我一直在尝试在我的ASP.NET MVC项目中使用预先存在的数据库。我为我的(Microsoft SQL)数据库(“。\ SQLEXPRESS.Databases”)创建了一个“数据连接”,它具有表“Test”。该表有两列“ID(int)”和“name(nvarchar(MAX))”。ASP.NET MVC数据库访问
在“模型”文件夹,我把这个新类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
namespace MvcMovie.Models
{
public class Test
{
public int ID { get; set; }
public string name { get; set; }
}
}
然后(在“控制器”),我有一个新的控制器,“HelloWorldController”。在此我有这样的功能:
public ActionResult Index()
{
DataSet data;
DataTable table;
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand select = new SqlCommand("SELECT * FROM Test", connection);
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = select;
data = new DataSet();
adapter.Fill(data, "Test");
table = data.Tables[0]; //is the [0] really correct?
}
return View(/* HOW DO I GET THE TABLE TO THE VIEW? */);
}
现在我想在我的“Index.cshtml”文件显示表中的行(在“意见”)。我如何从Controller获取表格到视图?我发现的是“@model”和“IEnumerable”,但这不起作用,因为我无法转换我的表格。
@model IEnumerable<MyProject.Models.Test>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@foreach (var item in Model) {
<p>blaaaah</p>
}
现在有三个问题:
1.我做一些完全错误的? (DB-Access的方法,..)
2.有没有更简单的方法来做到这一点? (没有所有的适配器,..东西)
3.如果!1 & &!2,我该如何使它工作? (获取视图文件“知道”我的表)
感谢您的帮助,
问候,
卡巴
感谢您的详细说明。我非常喜欢你的解决方案。到目前为止,我从未见过这种“收益”。但这不是一个真正的问题。我已经重写了我的东西(变化并不大),以匹配你的结构,我对结果很满意。非常感谢。 – Cabadath
只是一个想法...我怀疑'收益回报'是否是一件好事。返回IList而不是IEnumerable '是不是更好?使用“收益回报”有没有优势? –
KSK
@KSK,使用迭代器允许您延迟加载数据集。例如,如果您只需要显示视图中的前50行,那么将所有结果加载到内存中并将其全部扔掉将是一项完全浪费。很明显,在我的例子中,我重复了视图中的所有结果,但在真实世界的应用程序中,您可能想要做一些分页。 –