我试图将 CommandArgument
作为 int
传递给我的存储过程,但我得到:
Failed to convert parameter value from a String to a 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);
关于c# - 将 INT 传递给存储过程失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13299502/