【发布时间】:2010-07-28 21:37:36
【问题描述】:
当我不使用 datareader 时,我收到一个与此命令关联的打开 DataReader 的错误(尽管可能 executereader() 是同一件事)如果我没有 datareader,我将如何关闭它?
using (SqlConnection conn = new SqlConnection(ConnectionString))
{
SqlCommand cmd = new SqlCommand("spSelectAllTypes",conn);
cmd.CommandType = CommandType.StoredProcedure;
SqlCommand cmd1 = new SqlCommand("spSelectAllTripA", conn);
cmd1.CommandType = CommandType.StoredProcedure;
conn.Open();
//checkboxlist
cbTransportType.DataSource = cmd.ExecuteReader();
cbTransportType.DataBind();
//dropdownlist
ddlTripTypeA.DataSource = cmd1.ExecuteReader();
ddlTripTypeA.DataTextField = "TripType";
ddlTripTypeA.DataValueField = "TripTypeID";
ddlTripTypeA.DataBind();
}
我只想能够在一个打开的连接中绑定一堆下拉列表。 (在我为每个控件进行多次打开和关闭之前)
【问题讨论】:
-
您可以发布异常详细信息吗?
-
我建议你试试 Linq2Sql 并用它来访问存储过程。它包装了您的低级数据库命令,并且还保护您免受此类异常的影响。您的问题是,您必须先从 cmd 关闭阅读器,然后才能在 cmd1 上执行阅读器....
-
ExecuteReader 返回一个 SqlDataReader,因此在调用 ExecuteReader msdn.microsoft.com/en-us/library/… 后确实有一个打开的阅读器(在 cbTransportType.DataSource 中存储了一个引用)
-
在您的示例中,它显示使用数据读取器并关闭它,我理解。但是如何使用数据读取器作为数据源呢? (或填充下拉列表、复选框列表等。