0

以下代码用于绑定网格:

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 与此命令关联,必须先关闭

4

1 回答 1

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();

我在数据读取器绑定到网格视图方面遇到了一些公平的问题,这是我现在通常这样做的方式。

于 2013-08-15T15:19:11.057 回答