C#,ASP.NET - 从数据库中收集数据

时间:2011-01-03 13:14:39

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

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

            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];

4 个答案:

答案 0 :(得分:3)

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

例如:

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页面上,将<%@ Page %>标头设置为具有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 %>
<% } %>

答案 1 :(得分: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'列中的值转换为整数,然后等等。但是你需要验证每列返回的类型并相应地调整您的演员表。

答案 2 :(得分:1)

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

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

您将获得一个DataRow Rows[0],您需要循环浏览dsl以获取每个 DataRow

答案 3 :(得分:1)

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