2009-05-08 3 views
8

좋아, 이번 주 초에이 오류에 대해 매우 많이 물어 보았고 몇 가지 도움이되는 답변을 얻었으며 제안을 따르기 시작한 이후의 모든 사항이 크게 개선되었습니다.ExecuteReader에는 열려 있고 사용 가능한 Connection이 필요합니다. 연결의 현재 상태가 닫혔습니다

그러나 지금은 데이터베이스에 액세스하기 위해 '올바른'최상의 방법을 사용하고 있는데 일부 기능에서이 오류가 발생하며 해당 블록에서 사라질 수는 없습니다. 여기 내 코드는 다음과 같습니다.

Public Shared Function doesBasketExist(ByVal baskethash As String) As Boolean 
    Dim _r As Boolean 
    Using db As New SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("pitstopConnectionString").ConnectionString) 
     Using cmd As New SqlCommand("doGetBasketByHash", db) 
      cmd.CommandType = CommandType.StoredProcedure 
      cmd.Parameters.AddWithValue("@baskethash", baskethash) 
      Using dr As SqlDataReader = cmd.ExecuteReader() 
       If dr.HasRows() = True Then 
        _r = True 
       Else 
        _r = False 
       End If 
       dr.Close() 
      End Using 
     End Using 
    End Using 
    Return _r 
End Function 

이제는 내가 무엇을해도 상관 없습니다 : ExecuteReader는 열려 있고 사용 가능한 Connection이 필요합니다. 연결의 현재 상태가 닫힙니다. 이 연결에. 나는이 클래스 (cmd, dr 등) 내에서 같은 것으로 불리는 객체를 가진 함수를 가지고있다. 그러나 사용은 스스로를 닫는다.

제안 환영 :)

답변

14

연결을 열어 두는 것을 잊었을 것 같습니다.

이 행하기 전에를 엽니 다

cmd.Parameters.AddWithValue("@baskethash", baskethash) 

사용 - 당신은 실제로 Open 연결에 잊어

db.Open() 
2

:

이에 대한
 db.Open() 
     Using dr As SqlDataReader = cmd.ExecuteReader() 
1

이유 중 하나가 될 것이다 연결이 수 전혀 개방하지 마십시오. "SqlConnection.Open"문에서 예외가 발생하지 않도록 제한됩니다. 응용 프로그램에 문제가 없다면 서버가 사용자에게 연결을 부여 할 수없는 것일 수 있습니다. 앱 또는 동일한 서버에 호스팅 된 다른 데이터베이스의 연결 누출 때문일 수 있습니다.