2010-08-19 88 views

回答

1

服務器上的ODBC連接不會對您有所幫助。 ODBC連接需要在要連接的計算機上設置,而不是要連接到的計算機。

爲了連接到dBASE文件(並將其看作一個數據庫),你將需要

  1. 映射一個驅動器,以便您可以訪問這些文件的位置..
  2. 連接使用OleDbConnection。

它還處理一個問題,你將有閱讀來自.NET的DBase文件。如果您經常閱讀它們,應用程序將開始拋出「System.Resources.Exceeded」異常。我發現唯一可靠的解決方案是殺死應用程序並重新啓動它,這是在名爲FixMyself的代碼中完成的。 (不包括,因爲它包含敏感數據)。 FixMyself例程基本上啓動了第二個exe,它殺死了這個exe文件,然後重新啓動它。

下面的示例代碼是從生產代碼複製的,應該給你一個push int他的正確方向。它映射驅動器,連接和讀取。

這是醜陋的,但它的作品。這也只是部分的,因爲它調用了這裏沒有包含的幾個函數。但是,再次,它應該足以讓你走。

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

謝謝。如果您可以發佈該代碼,我會非常感激! – user204588 2010-08-19 20:17:45