mvc如何写个数据访问层?
习惯了asp.net 的public DataTable Getdata ( string i_sqlstr )
{
DataTable temptable = new DataTable ( );
DataSet ds = new DataSet ( );
try
{
SqlDataAdapter m_MyDataAdapter = new SqlDataAdapter ( i_sqlstr, Static_Conn );
Static_Conn.Open ( );
m_MyDataAdapter.Fill ( ds, "table" );
temptable = ds.Tables[0];
}
return temptable;
}
MVC 不用linq 实体类等
能否实现这样的 数据访问类?
最好给个DEMO --------------------编程问答-------------------- 可以的啊,
--------------------编程问答-------------------- 1楼的代码是错的 --------------------编程问答-------------------- 哪错了? --------------------编程问答-------------------- 1L的代码我也能写
private static SqlConnection cn; //创建SQL连接
private static SqlDataAdapter sda; //创建SQL数据适配器
private static SqlDataReader sdr; //创建SQL数据读取器
private static SqlCommand cmd; //创建SQL命令对象
private static SqlParameter param; //创建SQL参数
private static DataSet ds; //创建数据集
private static DataView dv; //创建视图
/// <summary>
/// 打开数据库连接
/// </summary>
private static void Open()
{
#region
var db = new DBServer
{
DBName = "FiberPDR",
//DBName = "ZTAM_PIMSDB_TEST",
DBPWD = @"#zfoc@data*",
DBUser = "sa",
ServerIP = "192.168.2.1"
};
cn = new SqlConnection(db.ConnString());
cn.Open();
#endregion
}
/// <summary>pxoenix
///
/// 关闭数据库连接
/// </summary>
private static void Close()
{
#region
if (cn != null)
{
cn.Close();
cn.Dispose();
}
#endregion
}
/// <summary>
/// 创建参数数组
/// </summary>
/// <param name="count"></param>
/// <returns></returns>
public static SqlParameter[] CreateParams(int count)
{
return new SqlParameter[count];
}
/// <summary>
/// 获得DataTable对象,返回最后一个表
/// </summary>
/// <param name="strSql">SQL语句</param>
/// <param name="ps"></param>
/// <returns></returns>
public static DataTable GetDt(string strSql, SqlParameter[] ps)
{
#region
var ds = GetDs(strSql, ps);
var i = ds.Tables.Count - 1;
cmd.Parameters.Clear();
return ds.Tables[i];
#endregion
}
但如何在MVC中应用呢
1个控制器 如何调用呢
具体些 --------------------编程问答-------------------- 不用实体类,直接返回DataTable? 你可以放到ViewBag里面啊,
类似于:
public ActionResult Index()
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("id", typeof(int)));
dt.Columns.Add(new DataColumn("name", typeof(string)));
DataRow dr = dt.NewRow();
dr[0] = 1;
dr[1] = "a";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 2;
dr[1] = "b";
dt.Rows.Add(dr);
ViewBag.Message = dt;
return View();
}
然后Index.cshtml:
--------------------编程问答-------------------- 全是静态对象,如果要同时执行两个命令怎么办? --------------------编程问答-------------------- mvc和数据访问层没啥关系啊 用orm可以 用ado一样可以
@{
ViewBag.Title = "Home Page";
System.Data.DataTable dt = (System.Data.DataTable)ViewBag.Message;
for (int i = 0, c = dt.Rows.Count; i < c; i++)
{
@dt.Rows[i]["Name"]
}
}
把返回view的模型设成dataset datatable这些不就可以了不就可以了 --------------------编程问答-------------------- 额,你要具体点的呀,这个可以不? --------------------编程问答-------------------- 例
之前
datatable d= classobjec.Getdata ("select * from where id=123")
repeater1.datasouce=d;
MVC如何呢? --------------------编程问答--------------------
repeater数据控件类似于一个 循环遍历集合的操作,那么,换到MVC里面后,你将DataTable也进行循环遍历不就行了。。
你没看我5L的小演示吗,其他做法还可以再找找 --------------------编程问答-------------------- --------------------编程问答-------------------- @model IEnumerable<Dog>
<ul>
@foreach (Dog d in Model)
{
<li>
<span>@d.ID</span><span>@d.Name</span></li>
}
</ul>
Dog是对象,不建议在View 用DataRow DataTable 这样的东西 --------------------编程问答-------------------- LZ既然写mvc了为啥还要用datatable呢。。。呵呵 --------------------编程问答-------------------- View 前台未必适用 DataRow DataTable
适用 Ilist 等对象也无所谓
单Models一定要LINQ 或者实体类吗 我还是习惯 sql=select * from
这样的访问方式
--------------------编程问答-------------------- 看了LZ发的几个回复,我想说的是既然你已经选择 MVC 了,为何不尝试着使用 MVC 所带来的一些特性。
如果数据访问模块一定要返回 DataTable,你可以使用 ViewData 在视图中拿到,然后:
DataTable dt=ViewData["datasource"] as DataTable;
foreach(DataRow row in dt)
{
//这里写Html,可以是<ul><li>,也可以是 <tr><td>,具体怎么布局自己选择吧
//例如:
<tr>
<td>产品名称<td>
<td>产品类别<td>
</tr>
<tr>
<td>row["ProductName"]<td>
<td>row["ProductTypeName"]<td>
</tr>
}
不过我觉得这样就已经有些本末倒置,失去了 MVC 视图应有的强类型的便利。
PS:你一楼的数据访问代码也有问题,全都是静态类,数据库打开了之后也没有关闭。
补充:.NET技术 , ASP.NET