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

时间:2014-10-17 11:37:09

标签: c# asp.net sql-server gridview

我有一个函数可以从数据库中获取记录。

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。

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

  

Get_All_Issues没有参数和参数提供

3 个答案:

答案 0 :(得分:2)

您最有可能在多个地方重新使用cmd个实例,并且您不会清除与其关联的参数,从而创建您正在查看的例外。

最简单的修复方法是不重复使用cmd,但如果出于任何原因它对您更好,请确保在执行之前使用Clear on参数。

cmd.Parameters.Clear();

答案 1 :(得分:2)

尝试不使用全局连接,命令等:在方法中打开并关闭它们

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

答案 2 :(得分:1)

试试这些

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 关键字将解决您的问题。