VB.net 2005でFoxProテーブルを開く
-
05-07-2019 - |
質問
oledb接続を使用してvb.netでfoxpro freeテーブルを開く必要があります。
しかし...列名を取得するだけです。本当に「選択」する必要はありません。 私はすべての無料のテーブルを動的に参照し、すべてのファイルのすべての列のリストを設定し、各列の説明を含む別の無料のテーブルへの外部参照を設定しようとしています。
現在、動作するモデルがありますが、実行する必要があります...
SELECT TOP 1 FROM "File" ORDER BY 1
しかし、最大のテーブルでは、最初のレコードを読み込むのに2分以上かかり、250を超えるテーブルがあります。全体として、15〜20分かかります。
または、「ORDER BY」を使用せずにテーブルの最初のレコードのみを取得する別の方法はありますか?
ここに私がこれまで持っているものがあります。 "ファイル"パラメータとして渡されます。
" C:\ data \ table1.dbf"
Dim filePath As String
filePath = IO.Path.GetDirectoryName(file)
myOledbConnection = New OleDbConnection("Provider=VFPOLEDB.1;Data Source=" & filePath & ";Collating Sequence=MACHINE")
myOledbCommand = New OleDbCommand
myOledbDataAdapter = New OleDbDataAdapter
Dim fields, from, order As String
fields = "select top 1 *"
from = " from " & file
order = " order by 1"
myOledbCommand.CommandText = fields & from & order
myOledbCommand.Connection = myOledbConnection
myOledbDataAdapter.SelectCommand = myOledbCommand
myOledbDataAdapter.Fill(dt)
次に、データテーブル(dt)を取得し、ループスルーして列情報を取得します。
データセットを作成し、ウィザードを使用してディレクトリからすべてのテーブルをロードするとき、Visual Studioと同じくらい迅速に処理したいと思います。テーブルからデータを読み込まなくても、すべての列情報を非常にすばやく見つけることができます。
詳細情報が必要かどうか教えてください。
ありがとう。
解決
レコードを取得する必要があるのはなぜですか?あなたは言うことができるはずです:
SELECT * FROM "File" where 1 = 0
これにより、空の結果セットが返され、返される投影法のメタデータも提供されます。
OleDbConnection
クラス。クエリを実行せずにデータベースのスキーマに関する情報を取得できるためです。
Microsoft ADO Extensions for Data Definitionも使用できます。 COM相互運用機能(mxADOX.dll)による言語とセキュリティを使用して、スキーマ情報も取得します。
他のヒント
これは試していません/。しかし、それは行く方法のように見えます。
具体的には" GetSchema" OleDbConnectionインスタンスのメソッド。 http://msdn.microsoft.com/en-us /library/ms254934(VS.80).aspx