存储过程代码出错

时间:2014-10-09 22:18:49

标签: c# sql sql-server

我有这个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或为空,但它不断抛出错误

任何建议都将不胜感激!

2 个答案:

答案 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;

    ...... 

然后一切都应该正常工作。