【问题标题】:C#, ASP.NET - Gathering data from a databaseC#、ASP.NET - 从数据库中收集数据
【发布时间】:2011-01-03 13:14:38
【问题描述】:

我有代码,它从数据库中返回一行,

            con = new System.Data.SqlClient.SqlConnection();
            dsl = new DataSet();
            con.ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\tbl.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";

            con.Open();

            string sql = "SELECT * From tbl_fb";
            da = new System.Data.SqlClient.SqlDataAdapter(sql, con);
            da.Fill(dsl, "fb");
            DataRow dRow = dsl.Tables["fb"].Rows[0];
            ViewData["a"] = dRow.ItemArray.GetValue(1).ToString();

            ViewData["b"] = "afagjma";
            con.Close();

有没有办法,我可以使用循环从表中获取所有行。行数未知。 我知道我可以通过使用变量 (i) 而不是数字来循环执行此操作。但是我需要使用ViewData 数组,这对我来说是个问题。

示例:ViewData["a"][i];

【问题讨论】:

    标签: c# asp.net asp.net-mvc sdk


    【解决方案1】:

    您应该设置一个类来定义您从数据库返回的数据。

    例如:

    public class Customer  
    {
       public int Id { get; set;} 
       public string Name { get; set;} 
    } 
    

    然后您将创建一个List<Customer>(),并将其设置为您的 MVC 页面的模型。

    例如:

    var data = new new List<Customer>();    
    ViewData.Model = data; 
    

    并将您的数据加载到您的列表中:

    foreach(var row in dsl.Tables["fb"].Rows)
    {
       var customer = new Customer(); 
       customer.Id = row.Field<int?>("Id"); 
       customer.Name = row.Field<string>("Name");
       data.Add(customer);
    }
    

    然后,在您的 MVC 页面上,将 &lt;%@ Page %&gt; 标头设置为具有 Inherits 属性,如下所示:

    <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<Customer>>" %>
    

    现在终于可以直接绑定到页面内的Model了:

    <% foreach (var item in Model) { %>
      Customer Id: <%: item.Id %>
      Name: <%: item.Name %>
    <% } %>
    

    【讨论】:

    • 谢谢伙计。我首先开始尝试您的代码。所以我遇到了一个问题。该程序向我强调了一个 .Field<...>() 我有 system.data 包括在内。任何信息为什么它返回该错误?
    • 你需要参考 System.Data.DatasetExtensions (花了我一点时间才找到,呵呵)
    【解决方案2】:

    遍历“fb”表中每个 DataRow 的最简单方法是:

    foreach (DataRow dr in dsl.Tables["fb"].Rows) {
        // do something with each row
    }
    

    这将贯穿您表格的所有行。

    要返回 DataRow 对象中特定列的值,请执行以下操作:

    string firstName = (string)dr["FirstName"];
    string lastName = (string)dr["LastName"];
    int age = (int)dr["Age"];
    

    通过这样做,您是在说“从 'FirstName' 列中获取值并将其转换为字符串,将 'Age' 列中的值转换为整数,等等。但是您需要验证为每列返回的类型并相应地调整您的演员表。

    【讨论】:

      【解决方案3】:

      您需要遍历dsl,因为这是数据集。这是你的问题:

      DataRow dRow = dsl.Tables["fb"].Rows[0];
      

      您将获得一个单独的 DataRow Rows[0],您需要在其中循环遍历 dsl 以获取每个 DataRow

      【讨论】:

        【解决方案4】:

        为什么不改用DataReader?它会循环工作,一次读取一行。如果需要,您可以使用它来填充DataTable 并将其传递给DataSet

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-07
          • 1970-01-01
          • 2014-07-24
          • 2011-04-20
          • 2014-06-17
          • 1970-01-01
          相关资源
          最近更新 更多