2010-08-19 4 views

Répondre

1

La connexion ODBC sur le serveur ne vous aidera pas. La connexion ODBC doit être configurée sur la machine à partir de laquelle vous souhaitez vous connecter, et non sur celle à laquelle vous souhaitez vous connecter.

Afin de se connecter aux fichiers dBase (et les traiter comme une base de données), vous devrez

  1. Mappez un lecteur afin que vous puissiez accéder à l'emplacement des fichiers ..
  2. utilisation Connect OleDbConnection.

Il traite également un problème que vous aurez à lire des fichiers DBase à partir de .NET. Si vous les lisez assez souvent, l'application commencera à lancer une exception "System.Resources.Exceeded". La seule solution fiable que j'ai trouvée a été de tuer l'application et de la redémarrer, ce qui est fait dans le code nommé FixMyself. (Non inclus car il contient des données sensibles). La routine FixMyself démarre essentiellement un deuxième exe qui tue THIS exe et le redémarre ensuite.

L'exemple de code ci-dessous est copié à partir du code de production et devrait vous donner une impulsion dans la bonne direction. il mappe le lecteur, se connecte et lit.

C'est moche mais ça marche. C'est aussi seulement partiel car il appelle plusieurs fonctions non incluses ici. Mais encore une fois, cela devrait suffire à vous lancer.

Public Function GetRegisterConnectionString(ByVal PathToFolder As String) 
     Return "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & PathToFolder & ";Extended Properties=dBASE IV;User ID=Admin;Password=" 
    End Function 
    Public Sub ReadMyDbaseFile(ByVal DriveLetter As String, ByVal IPAddress As String) 

     Dim DpalmPath As String = "\\" & IPAddress & "\c$\Dpalm" 
     Dim cn As New System.Data.OleDb.OleDbConnection("") 
     cn.ConnectionString = Me.GetRegisterConnectionString(DpalmPath) 
     If ds.Tables.Contains("CurrentPrices") Then 
      ds.Tables.Remove("CurrentPrices") 
     End If 

    Dim POSAdapter As New System.Data.OleDb.OleDbDataAdapter("select * From MyDbaseFile WHERE SomeField > 0 AND ACTIVE = -1", cn) 

    Try 
     POSAdapter.Fill(ds, "CurrentPrices") 

    Catch ex As Exception 
     If InStr(ex.ToString().ToLower(), "system resource exceeded") Then 
      WriteToLog("System Resource Exceeded Error was thrown on register " & DriveLetter & ", IP " & IPAddress & ".") 
      Me.FixMyself() 
     Else 
      Throw New Exception(ex.ToString()) 
     End If 
    End Try 
    ds.Tables("CurrentPrices").Columns.Add("LastModified", GetType(Date)) 
    POSAdapter.Dispose() 
    POSAdapter = Nothing 
    cn.Dispose() 
    cn = Nothing 
    ds.AcceptChanges() 

    GC.Collect() 


End Sub 
+0

Merci. Si vous pouvez poster ce code, je l'apprécierais vraiment! – user204588

Questions connexes