我有这个C#代码调用存储过程:
using (SqlConnection myConnection = new SqlConnection(Utility.ConnString))
{
myConnection.Open();
using (SqlCommand myCommand = new SqlCommand(AddScanLocation_Proc, myConnection))
{
myCommand.Parameters.AddWithValue("@LocationQr", string.IsNullOrEmpty(LocationQr) ? "" : LocationQr);
myCommand.Parameters.AddWithValue("@LocationNfc", string.IsNullOrEmpty(LocationNfc) ? "" : LocationNfc);
myCommand.Parameters.AddWithValue("@LocationMachineName", LocationMachineName);
myCommand.Parameters.AddWithValue("@LocationName", LocationName);
myCommand.Parameters.AddWithValue("@IsLastStop", IsLastStop);
myCommand.Parameters.AddWithValue("@Active", Active);
IAsyncResult res = myCommand.BeginExecuteNonQuery();
while (!res.IsCompleted) { }
int response = myCommand.EndExecuteNonQuery(res);
if (response > 0)
toReturn = true;
}
}
每次执行代码时,都会收到错误告诉我
程序或功能' AddScanLocation'期望参数' @ LocationMachineName',这是未提供的。
我已经调试了几个小时的代码并且所有内容都输入正确,并且变量不为null或为空,但它不断抛出错误
任何建议都将不胜感激!
答案 0 :(得分:0)
如果所有变量(包括 LocalMachineName )在执行存储过程的调用块代码之前都有值,请先检查。
检查你的代码,你发布了:
myCommand.Parameters.AddWithValue("@LocationQr", string.IsNullOrEmpty(LocationQr) ? "" : LocationQr);
为什么不对 LocalMachineName 做同样的事情呢?
PS:如果变量 LocalMachineName 不允许空值,请尝试使用测试值。
答案 1 :(得分:0)
简单而简单:您还没有告诉ADO.NET您正在执行存储过程!
添加以下行:
using (SqlCommand myCommand = new SqlCommand(AddScanLocation_Proc, myConnection))
{
myCommand.CommandType = CommandType.StoredProcedure;
......
然后一切都应该正常工作。