我有代码,它从数据库中返回一行,
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];
答案 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
。