4

以下のように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
4

4 に答える 4

5

まず、パラメーターを使用してプロシージャを実行するとき、パラメーターをコンマで区切ります

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
            }

        }
    }
于 2012-11-14T15:02:54.133 に答える
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;
于 2012-11-14T15:02:44.503 に答える
4

この後のステートメントにパラメーターを追加するため、ストアド プロシージャの名前のみを指定します。CommandType も設定します。

 mySqlCom.CommandText = "pr_Update";
 mySqlCom.CommandType = CommandType.StoredProcedure;
于 2012-11-14T15:03:01.383 に答える
1

間違った SQL を呼び出しています。コマンドのコマンド テキストを次のようにpr_Updateのみ設定する必要があります。

mySqlCom.CommandText = "pr_Update";

type コマンド タイプをストアド プロシージャに設定します。

mySqlCom.CommandType = CommandType.StoredProcedure;

詳細については、 MSDN ページを参照してください。

于 2012-11-14T15:06:16.963 に答える