我有一个函数可以从数据库中获取记录。
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没有参数和参数提供
答案 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 关键字将解决您的问题。