リモート サーバー上の dBase ファイルに接続する必要がある asp.net Web サイトがあります。リモート サーバーには ODBC システム DSN 接続が構成されていますが、接続方法がわかりません。
1402 次
1 に答える
1
サーバー上の ODBC 接続は役に立ちません。ODBC 接続は、接続先のマシンではなく、接続先のマシンで設定する必要があります。
DBASE ファイルに接続する (そしてそれらをデータベースのように扱う) には、次のことが必要です。
- ファイルの場所にアクセスできるようにドライブをマップします。
- 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 に答える