以下代码用于绑定网格:
protected void BindGrid()
{
using (clsDt.sqlCnn)
{
clsDt.sqlCnn.Open();
SqlCommand cmd = new SqlCommand("USP_CRUD_JWELORDERS", clsDt.sqlCnn);
cmd.Parameters.Add(new SqlParameter("@operation", SqlDbType.VarChar, 20));
cmd.Parameters["@operation"].Value = "Display";
cmd.CommandType = CommandType.StoredProcedure;
grdView.DataSource = cmd.ExecuteReader();
grdView.DataBind();
clsDt.sqlCnn.Close();
}
}
以及以下用于绑定同一页面上的下拉列表:
protected void ddparticular(DropDownList ddlParticular)
{
DataTable dt = new DataTable();
ddlParticular.DataSource = clsDt.getDataTable("SELECT COM_CMCD,COM_CMNM FROM COM_MST WHERE COM_CMCD = (SELECT COM_CMCD FROM COM_TYP WHERE COM_CTNM = 'Jewellery')");
ddlParticular.DataTextField = "COM_CMNM";
ddlParticular.DataValueField = "COM_CMCD";
ddlParticular.DataBind();
}
但运行时显示:
已经有一个与此命令关联的开放DataReader,必须先关闭
答案 0 :(得分:1)
我唯一可以直接看到的是将网格视图绑定到数据读取器,我不确定它是否可行(您必须调用reader.Read()来获取行),它可能永远不会实际读取,并且从不关闭连接,因为读者没有完成(我可能错了)。
出于兴趣,请尝试将其替换为:
grdView.DataSource = cmd.ExecuteReader();
grdView.DataBind();
使用:
var dt = new DataTable();
var reader = cmd.ExecuteReader();
dt.Load(reader);
grdView.DataSource = dt;
grdView.DataBind();
我遇到了一些与网格视图绑定的数据绑定器的公平问题,这是我现在通常采用的方式。