首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ExecutenonQuery不工作

ExecutenonQuery不工作
EN

Stack Overflow用户
提问于 2012-11-14 23:01:06
回答 4查看 2.6K关注 0票数 4

我已经存储了proc,如下:

代码语言:javascript
复制
ALTER PROC pr_Update_Users_Nomination
(
      @UserID AS VARCHAR(100),  
      @Nominated AS BIT
)
AS

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

我想从c#代码中调用此过程:以下是我正在尝试的代码:

代码语言:javascript
复制
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();
}

我收到一个错误,说

代码语言:javascript
复制
Incorrect Syntax near @Nominated
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-14 23:02:54

首先,在执行带有参数的过程时,请用逗号分隔参数

代码语言:javascript
复制
EXECUTE pr_Update @UserID, @Nominated

其次,将您的代码修改为:

代码语言:javascript
复制
    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
            }

        }
    }
票数 5
EN

Stack Overflow用户

发布于 2012-11-14 23:02:45

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

它应该是

代码语言:javascript
复制
mySqlCom.CommandText = "EXECUTE pr_Update @UserID, @Nominated";
mySqlCom.Parameters.Add("@UserID", SqlDbType.VarChar, 20).Value = UserID;
mySqlCom.Parameters.Add("@Nominated", SqlDbType.Bit).Value = Nominated;

或者,由于您所做的只是调用一个存储的proc,因此您可以执行以下操作:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2012-11-14 23:03:01

仅提供存储过程的名称,因为您将在此之后的语句中添加参数。还要设置CommandType。

代码语言:javascript
复制
 mySqlCom.CommandText = "pr_Update";
 mySqlCom.CommandType = CommandType.StoredProcedure;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13381318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档