5

ストアド プロシージャにCommandArgumentasを渡そうとしていますが、次のようになります。int

パラメータ値を文字列から Int32 に変換できませんでした

渡す前に変換されても...

C# コード:

cmd.CommandText = "deleteProd";
int delprodID = Convert.ToInt32(e.CommandArgument.ToString());

Response.Write(delprodID);

cmd.Parameters.Add(new SqlParameter("@prodID", SqlDbType.Int)).Value = delprodID;
cmd.CommandType = CommandType.StoredProcedure;

sqlTools.cmdToNonQuery(cmd)

で正しいResponse.WriteID を取得したことを示していますdelprodID

ストアド プロシージャ:

ALTER PROCEDURE dbo.deleteProd @prodID int
AS
IF @prodID > 0
BEGIN
    DELETE FROM products WHERE prodID = @prodID
END
4

2 に答える 2

2

私は 3 か月前に同じ問題を抱えていましたが、何が起こっているのか説明できませんでした。どういうわけか、パラメーターを明示的に宣言し、設定してから、それを Parameters プロパティに追加する必要があります。たとえば、Accessではなく、SQL Serverでのみ発生していました。これは基本的に同じコードであることは知っていますが、これは私にとってはうまくいきました。理由は聞かないでください:

SqlParameter param = new SqlParameter("@prodID", SqlDbType.Int);
param.Value = delprodID;
cmd.Parameters.Add(param);
于 2012-11-08T23:39:30.503 に答える
1

SqlParameterCollection.AddWithValue メソッドを使用してみてください 。物事が大幅に簡素化されます。

cmd.CommandText = "deleteProd";
int delprodID = Convert.ToInt32(e.CommandArgument.ToString());
Response.Write(delprodID);
cmd.Parameters.AddWithValue("@prodID", delprodID);
cmd.CommandType = CommandType.StoredProcedure;
sqlTools.cmdToNonQuery(cmd)
于 2012-11-08T23:18:19.507 に答える