2012-03-21 122 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必须在两个代码匹配和存储过程

相关问题