代码如下
......
    Inherits System.Web.UI.Page
    Public sqlConnect As New SqlConnection
    Public sqlCom As New SqlCommand
    Public sqlData As SqlDataReader
...........
    Public Function ConnectData() As Boolean
        Dim strSql As String
        Dim strUserName As String
        strSql = System.Configuration.ConfigurationSettings.AppSettings.Get("conn") & System.Configuration.ConfigurationSettings.AppSettings.Get("Master")
        sqlConnect.ConnectionString = strSql
        sqlConnect.Open()
        sqlCom.Connection = sqlConnect        sqlCom.CommandText = "Select * From tbl_Usr_UserManager" 
       sqlData =sqlCom.ExecuteReader()'错误点
end
为什么执行到错误点那里会提示
”已有打开的与此连接相关联的 DataReader,必须首先将它关闭“
请问怎样才能解决这个问题呢?

解决方案 »

  1.   

    Public Function ConnectData() As Boolean
            Dim strSql As String
            Dim strUserName As String
            strSql = System.Configuration.ConfigurationSettings.AppSettings.Get("conn") & System.Configuration.ConfigurationSettings.AppSettings.Get("Master")
            sqlConnect.ConnectionString = strSql
    try
            sqlConnect.Open()
            sqlCom.Connection = sqlConnect        sqlCom.CommandText = "Select * From tbl_Usr_UserManager" 
           sqlData =sqlCom.ExecuteReader()'错误点       'sqlData.Read()'....
    Catch Finally
    sqlData.Close
    sqlConnect.Close
    end
      

  2.   

    直接用sqlData.Close()系统提示“未将对象引用设置到对象的实例。 “好象也不行呢
      

  3.   

    那是因为你没有实例化
    SqlDataReader sqlData;
    sqlData.Close();
    sqlData =sqlCom.ExecuteReader();
    我用C#的写法,楼主看看行不行
      

  4.   

    楼主可以调用IsClosed方法,判断sqlData是否关闭
    这样更妥
      

  5.   

    那请问在VB.NET下面怎么实例化这个对象呀?用sqlData=New SqlDataReader吗?可是这样好象编译都不能通过,而且我直接用sqlCom.ExecuteReader()的时候,系统提示我也是”已有打开的与此连接相关联的 DataReader,必须首先将它关闭“
      

  6.   

    唉!
    Catch 空在哪里是要你自己去添加异常错误处理。去多了解些OOP概念吧!
      

  7.   

    Public sqlConnect As New SqlConnection
        Public sqlCom As New SqlCommand
        Public sqlData As SqlDataReader    Sub Page_Load(ByVal Sender As Object, ByVal e As EventArgs) Handles MyBase.Load        Dim ConnStr As String
            Dim Server As String = ConfigurationSettings.AppSettings("Server")          ''数据库服务器
            Dim DataBase As String = ConfigurationSettings.AppSettings("DataBase")      ''数据库名称
            Dim UserID As String = ConfigurationSettings.AppSettings("UserID")          ''用户名
            Dim Password As String = ConfigurationSettings.AppSettings("Password")      ''密码        ConnStr = "Persist Security Info=False;Data Source=" & Server & ";Initial Catalog=" & DataBase & ";User ID=" & UserID & ";Password=" & Password        sqlConnect.ConnectionString = ConnStr
            sqlConnect.Open()
            sqlCom.Connection = sqlConnect
            sqlCom.Connection = sqlConnect
            sqlCom.CommandText = "Select * from 学期"        sqlData = sqlCom.ExecuteReader()    End Sub
    我把楼主的程序放到我的机子上测试一下,改成我的数据,没有问题啊。
      

  8.   

    不要为全局变量,它是个静态对象!
    Public Function ConnectData() As Boolean
            Dim strSql As String
            Dim strUserName As String
            strSql = System.Configuration.ConfigurationSettings.AppSettings.Get("conn") & System.Configuration.ConfigurationSettings.AppSettings.Get("Master")
            sqlConnect.ConnectionString = strSql
    try
            sqlConnect.Open()
            sqlCom.Connection = sqlConnect        sqlCom.CommandText = "Select * From tbl_Usr_UserManager" dim dr as sqlDataReader=sqlCom.ExecuteReader()
           'sqlData =sqlCom.ExecuteReader()'错误点       if sqlData.Read()then
    '在这里读取数据记录
           End if
           dr.Close()
    Catch 
     '错误处理
    Finally
    sqlConnect.Close
    end try
    end
      

  9.   

    if sqlData.Read()then  >>  if dr.Read()then
      

  10.   

    晕,我自己在看看,我是把程序放在一个类模块中的,不是一个页面ASP
      

  11.   

    sqlConnect.ConnectionString = strSql
            sqlCom.Connection = sqlConnect
            sqlConnect.Open()
            sqlCom.CommandText = "Select * From tbl_Usr_UserManager" 
            sqlData =sqlCom.ExecuteReader()'错误点
      

  12.   

    晕,我代码都改成,下面这样了,可是它还是提示“已有打开的与此连接相关联的 DataReader,必须首先将它关闭。”都不能打开数据库,怎么改呀?
            Dim strSql As String
            Dim strUserName As String
            strSql = System.Configuration.ConfigurationSettings.AppSettings.Get("conn") & System.Configuration.ConfigurationSettings.AppSettings.Get("Master")
            Dim sqlConnect As SqlConnection = New SqlConnection(strSql)
            Dim sqlCom As SqlCommand = New SqlCommand("Select * From tbl_Usr_UserManager", sqlConnect)
            sqlConnect.Close()
            sqlConnect.Open()
            Dim sqlData As SqlDataReader = sqlCom.ExecuteReader()'Error
      

  13.   

    我发现是什么问题了,因为我是在一个页面的ASPX中调用的另外一个页面数据库连接,如果在同一个页面下没有问题。但是我现在想把数据库连接做成一个共有的模块让其他所有页面都能调用,请问该如何做呀?谢谢各位大虾啦,分不够,我可以再开哈
      

  14.   

    可以!但每次连接后都要con.Close()
      

  15.   

    谢谢啦,问题基本上解决啦,一会儿我就结帖送分啦,有问题希望能帮忙哈,3tzjq(开始用C#做项目) 你可以留个QQ吗?