我在数据层写了一个类,是DataReader来连接数据表,如下:
×××××××××××××××××××××××××××××××××××××××××
Public Function SearchClass() As SqlDataReader
            Dim Conn As New SqlConnection(System.Configuration.ConfigurationSettings.AppSettings("SqlConn"))
            Conn.Open()
            Dim Cmd As New SqlCommand("ps_SearchClass", Conn)
            Dim Dr As SqlDataReader
            Dr = Cmd.ExecuteReader()
            Return Dr
        End Function
×××××××××××××××××××××××××××××××××××××××××
但是用open打开数据库后缺不知道怎么关他,业务逻辑层也不能实现。
业务逻辑层:
×××××××××××××××××××××××××××××××××××××××××
Public LoadClass As qk_Search = New qk_Search    Sub OpenDatabase_And_BindToDropDownList()
        Dim Dr As SqlDataReader = LoadClass.SearchClass()
        DropDownList1.Items.Add(New ListItem("所有的产品类别", "all"))
        While Dr.Read()
            DropDownList1.Items.Add(New ListItem(Dr.Item("p_class"), Dr.Item("ID")))
        End While
        Dim Conn As SqlConnection
        Conn.Close()
    End Sub
×××××××××××××××××××××××××××××××××××××××××
各位帮忙看看,怎么才能关闭数据库连接。谢谢先

解决方案 »

  1.   

    返回DataSet吧,和数据库无关,离线操作
    适合业务逻辑层
      

  2.   

    如果是C#的话可以在业务逻辑中用
    using(SqlConnection conn=new SqlConnection("...."))
    {
    //然后把CONN当参数传给数据层,当处理完这段代码就能释放连接
    }
    不知道VB能不能用~
      

  3.   

    但是考虑到DataReader的效率高一点呀,而且在绑定DropDownList的时候不只是绑定数据库数据,还要手动绑定一个数据排在List的第一位。用DataSet不是很麻烦吗?
      

  4.   

    用这种方法connection.Open()
    Return (command.ExecuteReader(CommandBehavior.CloseConnection))这样在使用完Reader之后,连接会自动关闭
      

  5.   

    先DataReader数据到hashtable或arraylist中,close它
    Return hashtable或arraylist
      

  6.   

    同意楼上的
    SqlDataReader read=cmd.ExecuteReader(CommandBehavior.CloseConnection);
    //CommandBehavior.CloseConnection为一个枚举,当它作为参数得时候当关闭read得时候也将关闭conn