私がCで作業しているプロジェクトの一部として、.dbfファイルを読み込む必要があります。まず、ファイルからスキーマテーブルを取得します。私は、ファイル名(拡張子なし)が8文字より長くない限り動作するコードを持っています。長い名前のdbfファイルでGetOleDbSchemaTableメソッドを使用する方法
たとえば、MyLongFilename.dbfという名前のファイルがあるとします。次のコードは機能しません。 「Microsoft Jetデータベースエンジンは、オブジェクト 'MyLongFilename'を見つけることができませんでした。オブジェクトが存在することを確認してください、あなたは正しく、その名前とパス名のスペルこと。」
string cxn = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyLongFilename;Extended Properties=dBASE 5.0";
OleDbConnection connection = new OleDbConnection(cxn);
は、この例外を乗り越えるためには、次のステップは、代わりのOldDbConnectionが好きな名前( 『MyLongF〜1』を使用することです
string cxn = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyLongF~1;Extended Properties=dBASE 5.0";
OleDbConnection connection = new OleDbConnection(cxn);
これは正常にOleDbConnectionを返します。スキーマテーブルを取得するには、次のようにしてください。
connection.Open();
DataTable schemaTable = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Columns,
new object[] { null, null, fileNameNoExt, null });
これは、行のないDataTableを返します。ファイル名を8文字以下に変更すると、このコードが機能し、データベースの各フィールドの行が返されます。長いファイル名で
、私はそうのようなDataSetを埋めるためにそれを使用することができますので、返された接続が有効である知っている:
string selectQuery = "SELECT * FROM [MyLongF~1#DBF];";
OleDbCommand command = new OleDbCommand(selectQuery, connection);
connection.Open();
OleDbDataAdapter dataAdapter = new OleDbDataAdapter();
dataAdapter.SelectCommand = command;
DataSet dataSet = new DataSet();
dataAdapter.Fill(dataSet);
これは私からのすべてのデータとのDataTableを含むDataSetをバック与えますdbfファイル
したがって、長い名前のdbfファイルのスキーマテーブルはどのように取得できますか?もちろん、ファイルの名前を変更したりコピーしたりすることで問題を回避することができますが、それは私が作成したくないハックです。また、上位1レコードでデータセットを塗りつぶしたり、列からスキーマを推定したりすることもできません。私はこのように使用する場合
これは1つの問題のようですが、すべての問題については説明していません。 –