【发布时间】:2011-08-20 23:53:44
【问题描述】:
我不得不在这里重建一台机器,并认为我只是在此过程中重做我的网站。我决定使用 mvc 3 但仍然在后端使用 mysql。
我基本上复制并粘贴了所有用于 sql 连接的旧代码,以从 mysql 存储过程返回结果,但它根本不起作用。然后我尝试创建一个简单的插入存储过程,它也不起作用。如果我在 MySqlCommand 上使用内联 sql,它可以正常工作(选择和插入)。我在想,他们在 .net 4.0 上改变了 CommandType.StoredProcedure 上的一些东西……但我不能肯定地说。
当我在对实际存储过程的命令调用上设置断点时,它不会显示任何内容,也不会实际执行任何操作。我已经从 CLI 调用了存储过程,它们正在正常工作。回到我刚才所说的,我猜测.net 4 不再使用“调用”命令了。有人遇到这个问题吗?如果是这样,您有解决方案吗?无论如何将 System.Data 2.0 dll 导入 .net 4.0 项目以验证我的想法?
这是我的数据库层上的一些代码:
public static BuyCollectionModel GrabBuyData(GridSettings gridSettings)
{
int totalRows = 0;
BuyCollectionModel buys = new BuyCollectionModel();
using (MySqlConnection myConnection = new MySqlConnection(AppConfig.Connection)) {
//string sql = "SELECT 100 as totalrows, c.* FROM cBuys as c";
//MySqlCommand myCommand = new MySqlCommand(sql, myConnection);
MySqlCommand myCommand = new MySqlCommand("usp_GetBuys", myConnection);
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.Parameters.AddWithValue("@startrowvar", gridSettings.PageIndex);
myCommand.Parameters.AddWithValue("@endrowvar", gridSettings.PageSize);
myCommand.Parameters.AddWithValue("@sortcolvar", gridSettings.SortColumn);
myCommand.Parameters.AddWithValue("@sortordervar", gridSettings.SortOrder);
myConnection.Open();
using (MySqlDataReader myReader = myCommand.ExecuteReader())
{
while (myReader.Read())
{
buys.Add(FillBuys(myReader, out totalRows));
}
}
myConnection.Close();
}
buys.TotalCount = totalRows;
return buys;
}
如上所述,我还尝试创建一个简单的插入存储过程,它可以在 CLI 中正常工作,但是当我使用 ExecuteNonQuery() 从代码中调用它时,它什么也不做......
【问题讨论】:
-
你得到什么错误信息?
-
我有一个建议,你为什么不使用某种 ORM?在当今有这么多优秀的 ORM 解决方案时,直接处理命令对象似乎很愚蠢。我会建议 NHibernate。
-
如果需要仅是 MS 框架,则使用 EntityFramework。
-
您确定传入的参数完全符合您的预期吗? Dio 你收到任何错误信息了吗?
-
将
using (MySqlDataReader myReader = myCommand.ExecuteReader()) { while (myReader.Read()) { buys.Add(FillBuys(myReader, out totalRows)); } }替换为DataTable tmp = new DataTable(); tmp.Load(myCommand.ExecuteReader());,tmp.Load(...)调用后的断点,看看你是否能得到你的结果。如果你这样做,我会看看你的 FillBuys 方法
标签: mysql asp.net-mvc stored-procedures