存储过程没有参数,并且提供了参数

本文关键字:参数 存储过程 | 更新日期: 2023-09-27 18:26:50

我有一个函数,它将从数据库中获取记录。

public List<Issue> Load_Issues()
{
    SqlDataReader Sdr;
    List<Issue> ObjList = new List<Issue>();
    cmd.CommandText = "Get_All_Issue";
    try
    {
        cmd.Connection = con;
        cmd.CommandType = CommandType.StoredProcedure;
        con.Open();
        Sdr = cmd.ExecuteReader();
        while (Sdr.Read())
        {
            // here I pull out records from database..
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
    finally
    {
        con.Close();
    }
    return ObjList;
}

我用来绑定Gridview的函数如下

public void Bind_Issues()
{
    gdIssues.DataSource = Bl.Load_Issues()();
    gdIssues.DataBind();
}

我的存储过程不接受任何参数。当页面第一次加载时,它运行良好,并将记录绑定到网格视图。

我们也可以选择编辑记录,所以在更新记录后,我需要再次将记录绑定到gridview。所以我再次使用我的Load_Issues函数来做这件事。但这次它抛出了错误

Get_All_Issues没有参数,并且提供了参数

存储过程没有参数,并且提供了参数

您很可能在多个位置重新使用cmd实例,并且没有清除与它相关的参数,从而创建您看到的异常。

最简单的解决方案是不重复使用cmd,但如果出于任何原因,它对您更好,只需确保在执行之前使用Clear on参数即可。

cmd.Parameters.Clear();

尽量不要使用全局连接、命令等:在方法中打开和关闭它们

public List<Issue> Load_Issues() {
  //TODO: Put actual connection string here
  using (SqlConnection con = new SqlConnection("Connection String here")) {
    con.Open();
    // Put IDisposable into using
    using (SqlCommand cmd = new SqlCommand()) {
      cmd.Connection = con;
      cmd.CommandText = "Get_All_Issue";
      cmd.CommandType = CommandType.StoredProcedure;
      List<Issue> ObjList = new List<Issue>();
      // Put IDisposable into using 
      using (var Sdr = cmd.ExecuteReader()) {
        while (Sdr.Read()) {
          //TODO: Pull out records from database into ObjList
        }
      } 
      return ObjList; 
    }
  }
}

试试这些

exec 'stored_procedure_name'
go

alter proc stored_procedure_name
as
begin
    --Block of Statements
end
go

create proc stored_procedure_name
as
begin
    --Block of Statements
end
go

go关键字将解决您的问题。