已经是一个与此命令关联的开放DataReader - 当我不使用datareader时?

时间:2010-07-28 12:58:34

标签: c# asp.net sql

当我没有使用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();

}

我只是希望能够在一个开放连接中对一堆下拉列表进行数据绑定。 (在我为每个控件打开和关闭之前)

2 个答案:

答案 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();
        }

非常适合填充下拉列表,我想我可以让它更通用于每个控件..想法?