期望参数'@ID';,没有提供
本文关键字:参数 #39@ID 期望 | 更新日期: 2023-09-27 18:28:41
我将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将尝试将您的内容解释为一个特殊的SQL语句。。。。
这个解决了我的问题这可能对有帮助吗
cmd.CommandType = CommandType.StoredProcedure;
存储过程中的ID参数必须设置为OUTPUT参数。您只是在代码中设置它,而不是在存储过程中设置它。
Hy guys。
如果是这种情况,则必须将命令的属性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
必须在代码和存储过程中匹配
如果使用dapper,则可以使用此构造
int id = 1;
var parameters = new DynamicParameters();
parameters.Add("@id", id, DbType.Int32, ParameterDirection.Input);
string sqlQuery = "[dbo].[SomeStoredProcedure]";
using (IDbConnection db = new SqlConnection(ConnectionString))
{
var result = await db.QueryAsync<SpResult>(sqlQuery, parameters, commandType: CommandType.StoredProcedure);
}