期望参数’@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
必须在代码和存储过程中都匹配