0

リモート サーバー上の dBase ファイルに接続する必要がある asp.net Web サイトがあります。リモート サーバーには ODBC システム DSN 接続が構成されていますが、接続方法がわかりません。

4

1 に答える 1

1

サーバー上の ODBC 接続は役に立ちません。ODBC 接続は、接続先のマシンではなく、接続先のマシンで設定する必要があります。

DBASE ファイルに接続する (そしてそれらをデータベースのように扱う) には、次のことが必要です。

  1. ファイルの場所にアクセスできるようにドライブをマップします。
  2. OleDbConnection を使用して接続します。

また、.NET から DBase ファイルを読み取るときに発生する問題にも対処します。それらを頻繁に読むと、アプリは「System.Resources.Exceeded」例外をスローし始めます。私が見つけた唯一の信頼できる解決策は、アプリを強制終了して再起動することでした。これは、FixMyself という名前のコードで行われます。(機密データが含まれているため、含まれていません)。FixMyself ルーチンは基本的に、この exe を強制終了してから再起動する 2 番目の 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
于 2010-08-19T20:09:29.690 に答える