2012-03-21 155 views
16

我送ID作爲outparameter但其給錯誤需要參數'@ID',它沒有提供?

System.Data.SqlClient.SqlException:過程或功能 'usp_ClientHistoryItem' 預計參數 '@ID',這是不 供給。

代碼

using (SqlCommand cmd = new SqlCommand("dbo.usp_ClientHistoryItem", conn)) 
{ 
     SqlParameter parameterID = new SqlParameter("@ID", oReservation.Id); 
     parameterID.Direction = ParameterDirection.Output; 
     cmd.Parameters.Add(parameterID); 

     cmd.Parameters.Add(new SqlParameter("@PhoneNo", oReservation.ClientPhone)); 
     cmd.Parameters.Add(new SqlParameter("@UserId", oReservation.UserID)); 
     cmd.Parameters.Add(new SqlParameter("@Description", oReservation.Description)); 
     cmd.Parameters.Add(new SqlParameter("@TestId", oReservation.TestId)); 
     cmd.Parameters.Add(new SqlParameter("@StartDate", oReservation.StartDate)); 

     cmd.ExecuteNonQuery(); 

     returnValue = Convert.ToInt32(cmd.Parameters["@ID"].Value); 

     return returnValue; 
} 
+0

你設定的ID參數作爲出當創建存儲過程? (在數據庫;不是代碼) – jclozano 2012-03-21 06:21:06

回答

32

你似乎調用存儲過程 - 但你從來沒有定義SqlCommand是一個存儲過程:

using (SqlCommand cmd = new SqlCommand("dbo.usp_ClientHistoryItem", conn)) 
{ 
    cmd.CommandType = CommandType.StoredProcedure; // add this line to tell ADO.NET it's a stored procedure!! 

如果你忘了行,那麼ADO.NET將嘗試將你的東西解釋爲臨時SQL語句......

2

存儲過程中您的ID參數必須設置爲OUTPUT參數。您只是在代碼中將其設置爲不在存儲過程中。

+0

我在StoredProcedure中做過:) – Azhar 2012-03-21 07:18:23

1

Hy guys。

如果是這種情況,您必須將命令的屬性CommandType設置爲StoredProcedure。否則它無法檢測參數。

2

這一個解決我的問題 可能是它可能會有所幫助

cmd.CommandType = CommandType.StoredProcedure;

0

另一個原因引發此錯誤是當由於代碼失敗的變量名不要在你的存儲過程的代碼相匹配找到該值必須傳遞給的參數。確保它們匹配:

存儲過程:

​​

代碼:

SqlParameter p = new SqlParameter("@ID", id); 
cmd.Parameter.Add(p); 

參數@ID必須在兩個代碼匹配和存儲過程

相關問題