2015-04-10 1 views
0

J'utilise une OledbConnection sur un ordinateur AS400. Quand j'ai une instruction SQL qui ne retournera rien, elle se bloque simplement sur la commande de l'adaptateur Fill.La connexion Oledb se bloque VB.Net

Function ExecuteOLEDBQuery(ByVal cmdtext As String) As DataTable 

    Try 
     Dim connString As String = "Provider=IBMDA400;Persist Security Info=True;User [email protected]@USERID;[email protected]@PASSWORD;Data [email protected]@SYSTEM" 
     Dim as400 As New OleDb.OleDbConnection(connString) 
     Dim cmd As New OleDb.OleDbCommand(cmdtext, as400) 
     Dim adapter As New OleDb.OleDbDataAdapter(cmd) 
     cmd.CommandTimeout = 60 'Doesn't work. It never times out. 
     Dim dt As New DataTable 
     as400.Open() 
     adapter.Fill(dt) 'This is where it hangs 
     as400.Close() 
     adapter.Dispose() 
     cmd.Dispose() 
     Return dt 
    Catch ex As Exception 
     Return Nothing 
    End Try 

End Function 

Des idées?

Répondre

0

Il peut s'agir de la connexion à l'AS400 elle-même. Essayez cette version qui dispose de l'objet dans un ordre légèrement différent:

Function ExecuteOLEDBQuery(cmdtext As String) As DataTable 
    Using cn = New OleDbConnection("Provider=IBMDA400;Persist Security Info=True;User [email protected]@USERID;[email protected]@PASSWORD;Data [email protected]@SYSTEM") 
     cn.Open() 
     Using da = New OleDbDataAdapter(cmdtext, cn) 
      Dim dt = New DataTable 
      da.Fill(dt) 
      Return dt 
     End Using 
    End Using 
End Function 
+0

Cela ne fonctionnera pas. Il n'y a pas de problèmes avec la connexion. Une autre instruction SQL qui retournera quelque chose fonctionnera très bien. C'est le SQL qui ne retournera rien qui se bloque sur la commande de remplissage. – CodeMonkey

+0

Je commence à penser que ce n'est pas vraiment rien, mais plutôt un très gros fichier qui cause le ralentissement majeur. – CodeMonkey