连接到远程服务器上的dBase文件

时间:2010-08-19 20:02:10

标签: asp.net connection-string dbase

我有一个asp.net网站,需要连接到远程服务器上的dBase文件。远程服务器已配置ODBC系统DSN连接,但我不知道如何连接它。

1 个答案:

答案 0 :(得分:1)

服务器上的ODBC连接对您没有帮助。需要在要连接FROM的计算机上设置ODBC连接,而不是要连接到的计算机。

为了连接到DBASE文件(并将它们视为数据库),您需要

  1. 映射驱动器,以便您可以访问文件的位置..
  2. 连接使用OleDbConnection。
  3. 它还处理您将从.NET读取DBase文件的问题。如果你经常阅读它们,应用程序将开始抛出“System.Resources.Exceeded”异常。我发现的唯一可靠的解决方案是杀死应用程序并重新启动它,这在名为FixMyself的代码中完成。 (不包括在内,因为它包含敏感数据)。 FixMyself例程实际上启动了第二个exe,它杀死了这个exe,然后重新启动它。

    下面的示例代码是从生产代码中复制的,并且应该为您提供正确的方向。它映射驱动器,连接和读取。

    它很难看,但它有效。它也只是部分的,因为它调用了这里没有包含的几个功能。但同样,它应该足以让你前进。

      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