无效试图调用时阅读阅读器关闭(Invalid attempt to call Read when r

2019-09-27 05:56发布

我有点挣扎试图让这个DataGrid的绑定。 每次我跑我的代码,我得到一个错误消息指出,“无效试图调用读取时读取器已关闭”。 我看不出在那里我将结束我的读者。 你能帮我么? 我对加载的数据网格的代码如下:

protected void LoadGrid()
        {
            using (SqlConnection conn = new SqlConnection())
            {
                conn.ConnectionString = ConfigurationManager.ConnectionStrings["VTC"].ConnectionString;
                conn.Open();


                string sql = "select * from roi_tracking";
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    using (SqlDataReader sqlReader = cmd.ExecuteReader())
                    {

                        gridROI.DataSource = sqlReader;
                        gridROI.DataBind();

                        sqlReader.Dispose();
                        cmd.Dispose();
                    }
                }

            }
        }

Answer 1:

你不能使用SqlDataReader作为一个DataGrid数据源。

从MSDN:

一种数据源必须是实现任一System.Collections.IEnumerable接口(如System.Data.DataView,System.Collections.ArrayList,或System.Collections.Generic.List(OF T))的集合或IListSource接口的至结合从BaseDataList类派生的控制。

DataSource属性: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.basedatalist.datasource.aspx

SqlDataReader对象: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.aspx

绑定查询结果发送到您的DataGrid的通用方法是使用SqlDataAdapter来填充一个DataTable或数据集,然后绑定,为您的DataGrid.DataSource:

protected void LoadGrid()
    {
        using (SqlConnection conn = new SqlConnection())
        {
            conn.ConnectionString = ConfigurationManager.ConnectionStrings["VTC"].ConnectionString;
            conn.Open();

            string sql = "select * from roi_tracking";
            using (SqlCommand cmd = new SqlCommand(sql, conn))
            {
                SqlDataAdapter adapter = new SqlDataAdapter();
                adapter.SelectCommand = cmd;

                adapter.Fill((DataTable)results);
                gridROI.DataSource = results;
            }

        }
    }


Answer 2:

除了什么pseudocoder说,你不会想绑定到一个SqlDataReader反正:到数据库的连接将继续开放,只要读者实例存在。

你肯定希望将数据反序列化到一些其他断开连接的数据结构,让你释放连接放回池中尽快。



文章来源: Invalid attempt to call Read when reader is closed