C# ExecuteOnQuery不工作

C# ExecuteOnQuery不工作,c#,sql,sql-server-2008,executenonquery,C#,Sql,Sql Server 2008,Executenonquery,我已将proc存储如下: 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 =

我已将proc存储如下:

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
参数之间缺少逗号(,)

应该是

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;

首先,在使用参数执行过程时,用逗号分隔参数

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
            }

        }
    }

只给出存储过程的名称,因为您要在后面的语句中添加参数。还要设置CommandType

 mySqlCom.CommandText = "pr_Update";
 mySqlCom.CommandType = CommandType.StoredProcedure;

您正在调用错误的SQL。您应该仅将命令的命令文本设置为
pr\u Update

mySqlCom.CommandText = "pr_Update";
并将type命令type设置为存储过程:

mySqlCom.CommandType = CommandType.StoredProcedure;

有关更多信息,请参阅。

别忘了设置mySqlCom.CommandType=CommandType.StoredProcedureThanks@Fabio GouW,我是这么做的。那么我将如何发送输入参数?您的方式。只有设置
CommandText
是错误的。