C# 当文件路径/名称有空间时,使用System.Data.Odbc.OdbcConnection查询DBF文件

C# 当文件路径/名称有空间时,使用System.Data.Odbc.OdbcConnection查询DBF文件,c#,odbc,dbf,system.data,C#,Odbc,Dbf,System.data,我正在尝试使用System.Data.Odbc.OdbcConnection查询DBF文件。当文件中没有空格时,它可以正常工作,但打开DBF文件时会出现以下错误:如果文件路径或名称中有空格,则在FROM子句中出现错误[42000][Microsoft][ODBC dBase Driver]语法错误 我正在使用以下代码: oConn=新的System.Data.Odbc.OdbcConnection; ocann.ConnectionString=Driver={Microsoft数据库驱动程序*

我正在尝试使用System.Data.Odbc.OdbcConnection查询DBF文件。当文件中没有空格时,它可以正常工作,但打开DBF文件时会出现以下错误:如果文件路径或名称中有空格,则在FROM子句中出现错误[42000][Microsoft][ODBC dBase Driver]语法错误

我正在使用以下代码:

oConn=新的System.Data.Odbc.OdbcConnection; ocann.ConnectionString=Driver={Microsoft数据库驱动程序*.dbf};SourceType=DBF;SourceDB=NA;独占=否;校对=机器;空=否;删除=否;BACKGROUNDFETCH=否

oCmd.CommandText=从C:\test 2\12345678.dbf中选择*

命令文本不是硬编码的。为了简单起见,我把它包括进去了。应用程序的设置允许用户选择一个DBF文件并让它显示。我无法控制用户存储DBF文件的位置,也不希望让他们记住不要在文件名/路径中放置空格


如何转义文件名/路径中的空格?

可能是与MS-DOS 8.3文件名格式有关的问题。 您可以查看以下链接:

在这里,它说,空间是不允许的公约
我也遇到了这个问题。这是我在谷歌的第一次成功,所以我不太抱希望。但是,通过将当前目录更改为有问题的目录,然后排除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);

您仍然限制文件的名称,不能使用空格和Doh,仅此而已。谢谢你的帮助。啊,微软的链接显然已经死了。微软很擅长重新排列他们的URL和破坏东西。我无法指定文件的名称,它们通常超过8个字符。幸运的是,我尝试读取的dbf文件相当小。小于10 MB。我最终将文件复制到了一个临时目录中,类似于c:\temp\nospaces.dbf,这样我就可以保证能够正确地读取它。