2017-10-09 15 views
0

이것은 아마도 내가 지금까지 있었던 버그와 가장 혼동 스럽습니다.ADO 레코드 세트는 16 개의 생성 후에 새로운 연결을 시작합니다.

다음은 오류를 생성하는 일부 VB 코드입니다. 저는 새로운 recordSet을 생성 할 필요가 없다는 사실에 관심이 없습니다. 이것은 버그를 유발하려는 의도입니다.

Public Module ConnectionSetup 

Public ActiveTDConnection As ADODB.Connection 

Public Sub ConnectToTD(ByVal userName As String, ByVal Password As String, ByVal dsn As String) 

    ActiveTDConnection = New ADODB.Connection 

    ActiveTDConnection.ConnectionString = "Provider=MSDASQL.1;Persist Security Info=True;" & _ 

       "User ID=" & userName & ";Password=" & Password & ";" & _ 

       "Data Source=" & dsn & ";Mode=Read;" & _ 

       "UID=" & userName & ";AUTHENTICATION=LDAP;Initial Catalog=(Default)" 

    ActiveTDConnection.CommandTimeout = 0 

    ActiveTDConnection.Open(ActiveTDConnection.ConnectionString) 

End Sub 

End Module 

Module Module1 

Sub Main() 

    ConnectionSetup.ConnectToTD("XXX", "XXX", "XXX") 


    Dim DB_qry As String 

    Dim sessionQry As String 

    Dim i As Integer = 1 

    Dim sessionRS As New ADODB.Recordset 


    DB_qry = "SELECT TOP 1 * FROM dbc.databases" 

    sessionQry = "SELECT COUNT(*) FROM dbc.SessionInfo WHERE userName = 'MyUserName'" 


    Do While i <= 18 

     Dim DB_rs As New ADODB.Recordset 

     DB_rs.Open(DB_qry, ActiveTDConnection) 

     sessionRS.Open(sessionQry, ActiveTDConnection) 

     ' This starts going up by 1 on each loop, after 16. 
     Debug.Print(sessionRS.Fields.Item(0).Value) 

     Do While Not DB_rs.EOF 

      MsgBox(i) 

      i += 1 

      DB_rs.MoveNext() 

     Loop 

     DB_rs.Close() 

     DB_rs = Nothing 

     sessionRS.Close() 

    Loop 

End Sub 

16 번째 반복 후에 새로 열리는 각 recordSet은 새로운 연결을 생성합니다. 그래서 내 코드는 무작위로 세션 한계를 극대화하는 위험에 빠지기 시작합니다.

1.) 왜 이런 일이 발생합니까?

2.) 어떻게 방지 할 수 있습니까?

+0

오류가 발생하지 않았습니다. sessionRS - id est에 대한 참조를 제거 할 수 있습니까? est - 연결 내에서 한 번에 하나의 recordSet을여십시오 (DB_rs)? TD 클라이언트 버전은 무엇입니까? –

+0

글을 쓰는 것이 멍청한 방법이라는 것을 알고 있지만, 내 문제를 일으키는 가장 간단한 경우입니다. 내가 사용하고있다 14.10.05.10 –

+0

당신은 그것을 실행할 수 : DB_qry = "SELECT SESSION"- 대신에 MsgBox (i) - 출력 - MsgBox (DB_qry.Fields.Item (0) .Value) -보기 실제로 다른 연결을 사용합니까? –

답변

0
Sub Main() 

    ConnectionSetup.ConnectToTD("XXX", "XXX", "XXX") 


    Dim DB_qry As String 
    Dim sessionQry As String 

    Dim i As Integer = 1 

    Dim sessionRS As New ADODB.Recordset 

    DB_qry = "SELECT SESSION" 

    sessionQry = "SELECT COUNT(*) FROM dbc.SessionInfo WHERE userName = 'MyUserName'" 


    Do While i <= 18 

     Dim DB_rs As New ADODB.Recordset 

     DB_rs.Open(DB_qry, ActiveTDConnection) 

     sessionRS.Open(sessionQry, ActiveTDConnection) 

     ' This starts going up by 1 on each loop, after 16. 
     'Debug.Print(sessionRS.Fields.Item(0).Value) 

     Do While Not DB_rs.EOF 

      MsgBox("Sessions: " & sessionRS.Fields.Item(0).Value & " Cnt: " & i & " SID: " & DB_rs.Fields.Item(0).Value) 

      i += 1 

      DB_rs.MoveNext() 

     Loop 

     DB_rs.Close() 
     DB_rs = Nothing 
     sessionRS.Close() 

    Loop 

End Sub