【问题标题】:expects parameter '@ID', which was not supplied?需要未提供的参数“@ID”?
【发布时间】:2012-03-21 06:18:32
【问题描述】:

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

【问题讨论】:

  • 你在创建存储过程的时候把ID参数设置为out了吗? (在数据库上;不是代码)

标签: c# .net database sqlcommand


【解决方案1】:

您似乎在调用存储过程 - 但您从未定义您的 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】:

    这个解决了我的问题 可能有帮助

    cmd.CommandType = CommandType.StoredProcedure;

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 我是在 StoredProcedure 中完成的 :)
      【解决方案4】:

      大家好。

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

      【讨论】:

        【解决方案5】:

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

        存储过程:

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

        代码:

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

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

        【讨论】:

          【解决方案6】:

          如果你使用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);  
          }
          
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-06-22
            • 2021-07-14
            • 1970-01-01
            • 1970-01-01
            • 2010-09-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多