2012-11-08 76 views
4

我想一个CommandArgumentint传递给我的存储过程,但我得到:传递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.Write显示我在delprodID中有正确的ID。

存储过程:

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

可能重复吗? http://stackoverflow.com/questions/11099141/failed-to-convert-parameter-value-from-a-string-to-a-int32-while-executing-store – CodeLikeBeaker

+1

“cmdToNonQuery”做什么?它可能是消耗命令参数吗? –

+1

使用Sql Server Profiler并跟踪DataBase的内容。 –

回答

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) 
2

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

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