当我没有使用datareader时(虽然可能是executereader()是相同的事情),我收到一个与此命令关联的打开DataReader的错误,如果我没有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();
}
我只是希望能够在一个开放连接中对一堆下拉列表进行数据绑定。 (在我为每个控件打开和关闭之前)
答案 0 :(得分:2)
ExecuteReader
将返回一个开放数据阅读器。在连接关闭之前你应该真正处理它,但是我不确定你将它用作数据源会是什么样子。
答案 1 :(得分:0)
我想我找到了一个解决方法,让我知道这是否可以编码...
using (SqlConnection conn = new SqlConnection(ConnectionString))
{
SqlCommand cmd1 = new SqlCommand("spSelectAllTypeA", conn);
cmd1.CommandType = CommandType.StoredProcedure;
SqlCommand cmd2 = new SqlCommand("spSelectAllTypeB", conn);
conn.Open();
setDDL(ref ddlTripTypeA, cmd1, "Type", "pkiTypeAID");
setDDL(ref ddlTripTypeB, cmd2, "Type", "pkiTypeBID");
}
..end of method..
protected void setDDL( ref DropDownList ddl, SqlCommand cmd, string textField, string valueField)
{
SqlDataReader reader = cmd.ExecuteReader();
ddl.DataSource = reader;
ddl.DataTextField = textField;
ddl.DataValueField = valueField;
ddl.DataBind();
reader.Close();
}
非常适合填充下拉列表,我想我可以让它更通用于每个控件..想法?