我正在努力让这个数据网格绑定。每次我运行我的代码时,都会收到一条错误消息,指出“读取器关闭时无效尝试调用读取”。我不知道我在哪里关闭我的读者。你能帮我么?我加载数据网格的代码如下:
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();
}
}
}
}
答案 0 :(得分:2)
您不能将SqlDataReader用作DataGrid的DataSource。
来自MSDN:
数据源必须是实现其中一个的集合 System.Collections.IEnumerable接口(例如 System.Data.DataView,System.Collections.ArrayList或 System.Collections.Generic.List(Of T))或IListSource接口 绑定到从BaseDataList类派生的控件。
数据源属性: 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或DataSet,然后将其绑定到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;
}
}
}
答案 1 :(得分:1)
除了伪编码器所说的,你还不想绑定到SqlDataReader:只要读者实例存在,与数据库的连接就会保持打开状态。
您肯定希望将数据反序列化为其他一些断开连接的数据结构,以便尽快将连接释放回池中。