我正在尝试将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
答案 0 :(得分:2)
3个月前我遇到了同样的问题,无法解释发生了什么。不知何故,您必须显式声明参数,设置它,然后将其添加到Parameters属性。它只发生在SQL Server上,而不是在Access上发生。我知道这基本上是相同的代码,但这对我有用,不要问我为什么:
SqlParameter param = new SqlParameter("@prodID", SqlDbType.Int);
param.Value = delprodID;
cmd.Parameters.Add(param);
答案 1 :(得分:1)
尝试使用SqlParameterCollection.AddWithValue Method 它将大大简化事情。
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)