代码之家  ›  专栏  ›  技术社区  ›  Spooks

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

  •  0
  • Spooks  · 技术社区  · 15 年前

    我得到一个错误,一个与这个命令相关联的打开的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();
    
    }
    

    2 回复  |  直到 15 年前
        1
  •  2
  •   Adam Houldsworth    15 年前

    ExecuteReader 将返回一个打开的数据读取器。你真的应该在连接关闭之前处理它,但是我不确定你把它作为数据源使用会是什么样子。

        2
  •  0
  •   Spooks    15 年前

    我想我找到工作了,告诉我是否可以。。。

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

    非常适合填充dropdownlist,我想我可以让它对每个控件都更通用。。思想?