5

我正在尝试将CommandArgumentas传递int给我的存储过程,但我得到:

无法将参数值从 String 转换为 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.Write显示我在 中获得了正确的 ID 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 属性。它只发生在 SQL Server 上,而不是在 Access 上。我知道这基本上是相同的代码,但这对我有用,不要问我为什么:

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 回答