mvc如何写个数据访问层?

momotomo123 2012-03-16 04:02:55
习惯了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
...全文
530 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
焚寂 2012-03-21
  • 打赏
  • 举报
回复
看了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:你一楼的数据访问代码也有问题,全都是静态类,数据库打开了之后也没有关闭。
momotomo123 2012-03-17
  • 打赏
  • 举报
回复
View 前台未必适用 DataRow DataTable
适用 Ilist 等对象也无所谓
单Models一定要LINQ 或者实体类吗 我还是习惯 sql=select * from
这样的访问方式
yyl8781697 2012-03-16
  • 打赏
  • 举报
回复
LZ既然写mvc了为啥还要用datatable呢。。。呵呵
aiit 2012-03-16
  • 打赏
  • 举报
回复
@model IEnumerable<Dog>

<ul>
@foreach (Dog d in Model)
{
<li>
<span>@d.ID</span><span>@d.Name</span></li>
}
</ul>

Dog是对象,不建议在View 用DataRow DataTable 这样的东西
风骑士之怒 2012-03-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 momotomo123 的回复:]

之前
datatable d= classobjec.Getdata ("select * from where id=123")
repeater1.datasouce=d;

MVC如何呢?
[/Quote]
repeater数据控件类似于一个 循环遍历集合的操作,那么,换到MVC里面后,你将DataTable也进行循环遍历不就行了。。

你没看我5L的小演示吗,其他做法还可以再找找
momotomo123 2012-03-16
  • 打赏
  • 举报
回复

之前
datatable d= classobjec.Getdata ("select * from where id=123")
repeater1.datasouce=d;

MVC如何呢?
风一样的大叔 2012-03-16
  • 打赏
  • 举报
回复
额,你要具体点的呀,这个可以不?
tptptp00 2012-03-16
  • 打赏
  • 举报
回复
mvc和数据访问层没啥关系啊 用orm可以 用ado一样可以
把返回view的模型设成dataset datatable这些不就可以了不就可以了
种草德鲁伊 2012-03-16
  • 打赏
  • 举报
回复
全是静态对象,如果要同时执行两个命令怎么办?
风骑士之怒 2012-03-16
  • 打赏
  • 举报
回复
不用实体类,直接返回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:

@{
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"]
}
}
momotomo123 2012-03-16
  • 打赏
  • 举报
回复
1L的代码我也能写
但如何在MVC中应用呢
1个控制器 如何调用呢
具体些
风一样的大叔 2012-03-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 karascanvas 的回复:]

1楼的代码是错的
[/Quote]哪错了?
种草德鲁伊 2012-03-16
  • 打赏
  • 举报
回复
1楼的代码是错的
风一样的大叔 2012-03-16
  • 打赏
  • 举报
回复
可以的啊,

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
}

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧