繁体   English   中英

将INT传递给存储过程失败

[英]Passing INT to stored procedure fails

我正在尝试将CommandArgument作为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显示我在delprodID有正确的ID。

存储过程:

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

3个月前我遇到了同样的问题,无法解释发生了什么。 不知何故,您必须显式声明参数,设置它,然后将其添加到Parameters属性。 它只发生在SQL Server上,而不是在Access上发生。 我知道这基本上是相同的代码,但这对我有用,不要问我为什么:

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

尝试使用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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM