2012-11-08 73 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);