【问题标题】:ExecutenonQuery not workingExecutenonQuery 不起作用
【发布时间】:2012-11-03 02:18:50
【问题描述】:

我存储的过程如下:

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

【问题讨论】:

    标签: c# sql sql-server-2008 executenonquery


    【解决方案1】:

    首先,在执行带参数的过程时(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
                }
    
            }
        }
    

    【讨论】:

      【解决方案2】:

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

      应该是

      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;
      

      【讨论】:

        【解决方案3】:

        只提供存储过程的名称,因为您在之后的语句中添加参数。同时设置 CommandType。

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

        【讨论】:

        • 别忘了设置 mySqlCom.CommandType = CommandType.StoredProcedure
        • 谢谢@Fabio GouW,我正在这样做。
        【解决方案4】:

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

        mySqlCom.CommandText = "pr_Update";
        

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

        mySqlCom.CommandType = CommandType.StoredProcedure;
        

        请参阅MSDN page 了解更多信息。

        【讨论】:

        • 那我将如何发送我的 In 参数?
        • 你做的方式。仅设置CommandText 是错误的。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-29
        • 1970-01-01
        • 2011-07-17
        相关资源
        最近更新 更多