ファイルのパス/名前にスペースがある場合に、System.Data.Odbc.OdbcConnection を使用して DBF ファイルをクエリする

StackOverflow https://stackoverflow.com/questions/3151073

  •  01-10-2019
  •  | 
  •  

質問

System.Data.Odbc.OdbcConnection を使用して DBF ファイルをクエリしようとしています。ファイルにスペースが含まれていない場合は正しく動作しますが、「DBF ファイルを開くときにエラーが発生しました:」というエラーが表示されます。ファイル パスまたは名前にスペースが含まれている場合、エラー [42000][Microsoft][ODBC dBase Driver]FROM 句の構文エラーが発生します。

次のコードを使用しています。

oConn = 新しい System.Data.Odbc.OdbcConnection();oConn.ConnectionString = "Driver={Microsoft dBase Driver (*.dbf)};SourceType=DBF;SourceDB=NA;Exclusive=No;Collat​​e=Machine;NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO;";

oCmd.CommandText = "SELECT * FROM C: est 2\12345678.dbf";

コマンド テキストはハードコーディングされていません。簡単にするためにそのように含めただけです。このアプリケーションは、ユーザーが DBF ファイルを選択して表示できるように設定されています。ユーザーが DBF ファイルを保存する場所を制御することはできません。むしろ、ファイル名/パスにスペースを入れないようユーザーに覚えてもらう必要はありません。

ファイル名/パス内のスペースをエスケープするにはどうすればよいですか?

役に立ちましたか?

解決

おそらく「MS-DOS 8.3 ファイル名形式」に関連した問題だと思われます。次のリンクを確認できます。

他のヒント

私もこの問題に遭遇していました。これは Google で私のヒットナンバー 1 だったので、あまり期待していませんでした。ただし、現在のディレクトリを問題のあるディレクトリに変更し、CommandText 内のパスを除外することで、コードを機能させることができました。

//Save the current directory
string currentDir = System.IO.Directory.GetCurrentDirectory();

//Select the path that we need to use
System.IO.Directory.SetCurrentDirectory("C:\\test 2\\");

//Now the path isn't required:
oCmd.CommandText = @"SELECT * FROM 12345678.dbf";

//Restore the old directory
System.IO.Directory.SetCurrentDirectory(currentDir);

ファイル名にできることはまだ制限されています (スペースは使用できず、8 文字以下であると思います) が、それは私が作業できるものです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top