ExecutenonQuery不起作用

4
我有如下存储过程:

ALTER PROC pr_Update_Users_Nomination
(
      @UserID AS VARCHAR(100),  
      @Nominated AS BIT
)
AS

UPDATE User
SET isNominated = @Nominated
WHERE 
EMPID = @UserID;

我希望能够从c#代码中调用这个过程:下面是我正在尝试的代码:
void OpenConnection()
{
string Nominated = "False";
    //Connection String
        string sConnString = System.Configuration.ConfigurationManager.ConnectionStrings["ConString1"].ConnectionString;
        SqlConnection mySqlCon = new SqlConnection(sConnString);
        SqlCommand mySqlCom = mySqlCon.CreateCommand();

        //Call the stored proc and provide in parameters
        mySqlCom.CommandText = "EXECUTE pr_Update @UserID @Nominated";
        mySqlCom.Parameters.Add("@UserID", SqlDbType.VarChar, 20).Value = UserID;
        mySqlCom.Parameters.Add("@Nominated", SqlDbType.Bit).Value = Nominated;

        mySqlCon.Open();
        mySqlCom.ExecuteNonQuery();
        mySqlCon.Close();
}

我收到一个错误提示,内容为:
Incorrect Syntax near @Nominated
4个回答

5

首先,在执行带参数(s)的过程时,用逗号分开参数。

EXECUTE pr_Update @UserID, @Nominated

首先,将你的代码修改成这样:
    string sConnString = System.Configuration.ConfigurationManager.ConnectionStrings["ConString1"].ConnectionString;
    using(SqlConnection mySqlCon = new SqlConnection(sConnString))
    {
        using(SqlCommand mySqlCom = new SqlCommand())
        {
            mySqlCom.Connection = mySqlCon;
            mySqlCom.CommandText = "pr_Update";
            mySqlCom.CommandType = CommandType.StoredProcedure;
            mySqlCom.Parameters.Add("@UserID", SqlDbType.VarChar, 20).Value = UserID;
            mySqlCom.Parameters.Add("@Nominated", SqlDbType.Bit).Value = Nominated;
            try
            {
                mySqlCon.Open();
                mySqlCom.ExecuteNonQuery();
            }
            catch(SqlException ex)
            {
                // do something with the exception
                // don't hide it
            }

        }
    }

4

您的参数之间缺少逗号(,)。

应该是这样的:

mySqlCom.CommandText = "EXECUTE pr_Update @UserID, @Nominated";
mySqlCom.Parameters.Add("@UserID", SqlDbType.VarChar, 20).Value = UserID;
mySqlCom.Parameters.Add("@Nominated", SqlDbType.Bit).Value = Nominated;

或者,由于你只是在调用一个存储过程,你可以这样做:

mySqlCom.CommandType = CommandType.StoredProcedure ;
mySqlCom.CommandText = "pr_Update"; //no need to specify parameter names
mySqlCom.Parameters.Add("@UserID", SqlDbType.VarChar, 20).Value = UserID;
mySqlCom.Parameters.Add("@Nominated", SqlDbType.Bit).Value = Nominated;

4
只需提供存储过程的名称,因为您在此之后陈述中添加参数。还需设置CommandType。
 mySqlCom.CommandText = "pr_Update";
 mySqlCom.CommandType = CommandType.StoredProcedure;

不要忘记设置 mySqlCom.CommandType = CommandType.StoredProcedure。 - Fabio
谢谢@Fabio GouW,我一边这样做一边感谢您。 - Adil

1

您正在调用错误的SQL语句。您应该将命令文本设置为pr_Update

mySqlCom.CommandText = "pr_Update";

并将命令类型设置为存储过程:

mySqlCom.CommandType = CommandType.StoredProcedure;

请参见MSDN页面以获取更多信息。


那我该如何发送我的输入参数? - BFry
你的方法是对的,只是设置 CommandText 的方式不正确。 - Karel Frajták

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接