期望参数’@ID’,没有提供?

我发送ID作为outparameter,但它给出了错误

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; } 

您似乎在调用存储过程 – 但您从未将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会尝试将你的东西解释为ad-hoc SQL语句….

存储过程中的ID参数必须设置为OUTPUT参数。 您只是在代码中而不是在存储过程中设置它。

这一个解决我的问题可能会有所帮助

cmd.CommandType = CommandType.StoredProcedure;

嗨伙计们。

如果是这种情况,您必须将Command的属性CommandType设置为StoredProcedure。 否则它无法检测到参数。

抛出此错误的另一个原因是变量名称在存储过程和代码中不匹配,因为代码无法找到必须传递值的参数。 确保它们匹配:

存储过程:

 create procedure getEmployee @ID as Begin select * from emp where id = @ID End 

码:

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

参数@ID必须在代码和存储过程中都匹配