Coo*_*tar 10 data-binding asp.net-mvc datatable datareader
在我的ASP MVC应用程序中,我使用标准SQL(而不是Linq to SQL或其他ORM)来查询我的数据库.
我想将数据库结果传递给我的视图,并在我的视图中迭代结果.但我不知道该怎么做.我见过的每个例子都会传递一些字符串或使用L2S.我想传递嵌套的Hashtables之类的东西,但我唯一能想到的是将SqlDataReader对象传递给视图,但这听起来真的很糟糕.
我如何将标准SQL查询的数据库结果显示到我的视图中?我真的很想使用Linq或其他ORM,但要求我们不要求(不要问我为什么,我不明白).我在VB中这样做.我会尽量转换所提供的任何C#示例.
Ste*_*ock 12
您可以为要传输的数据创建简单类,然后手动从数据读取器填充控制器中的对象列表,然后将其传递给您的视图 - 例如(C#但这应该很容易转换)
// open your connection / datareader etc.
List<Customer> customers = new List<Customer>();
while(dataReader.Read())
{
Customer c = new Customer();
c.Id = dataReader.GetInt32(0);
c.Name = dataReader.GetString(1);
// etc (you might want to use string indexers instead of ints for the get methods)
customers.Add(c);
}
// close and dispose your datareader / connection etc as usual
return View("List", customers);
Run Code Online (Sandbox Code Playgroud)
MVC是关于关注点的分离.将SqlDataReaders,DataTables或驻留在System.Data命名空间中的任何类传递给视图并不是一个好主意.您需要定义可能与数据库通信的模型,以及将此模型传递给视图的控制器.如果您的公司政策说不使用ORM,那么经典WebForms可能比MVC模式更适合您的场景.
我同意拉沙克的观点.本文将详细解释它.链接文字
简而言之,以下是使用DataTable和DataReader的方法:
private DataTable GetData()
{
DataTable dt = new DataTable();
using (SqlConnection connection
= new SqlConnection("ConnectionString"))
using (SqlCommand command = new SqlCommand())
{
command.Connection = connection;
command.CommandText = "SELECT * FROM Customers";
connection.Open();
using (SqlDataReader reader =
command.ExecuteReader
(CommandBehavior.CloseConnection))
{
dt.Load(reader);
}
}
return dt;
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以将DataTable读入您传递的实体对象中.
我想你会发现这可以比使用Linq或ORM产生更好的性能.
| 归档时间: |
|
| 查看次数: |
8569 次 |
| 最近记录: |