Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 读取没有标准.dbf扩展名的dbase文件_C#_Oledb_Dbase - Fatal编程技术网

C# 读取没有标准.dbf扩展名的dbase文件

C# 读取没有标准.dbf扩展名的dbase文件,c#,oledb,dbase,C#,Oledb,Dbase,我试图读取一个文件,该文件只是一个dbase文件,但没有标准扩展名,该文件类似于: 测试数据 我正在使用这段代码尝试读取文件: string ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Temp;Extended Properties=dBase III"; OleDbConnection dBaseConnection = new OleDbConnection(Connec

我试图读取一个文件,该文件只是一个dbase文件,但没有标准扩展名,该文件类似于:

测试数据

我正在使用这段代码尝试读取文件:

string ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Temp;Extended Properties=dBase III";
            OleDbConnection dBaseConnection = new OleDbConnection(ConnectionString);
            dBaseConnection.Open();

            OleDbDataAdapter oDataAdapter = new OleDbDataAdapter("SELECT * FROM Test", ConnectionString);
            DataSet oDataSet = new DataSet();
            oDataAdapter.Fill(oDataSet);//I get the error right here...
            DataTable oDataTable = oDataSet.Tables[0];
            foreach (DataRow dr in oDataTable.Rows)
            {
                Console.WriteLine(dr["Name"]);
            }
当然,这会崩溃,因为它找不到名为test的dbase文件,但是如果我将该文件重命名为test.dbf,它就可以正常工作。我不能一直重命名文件,因为第三方应用程序使用它作为文件格式

有人知道一种在C语言中没有标准扩展名的情况下读取dbase文件的方法吗


谢谢。

我对您的代码感到困惑的是您创建连接字符串的方式。我会这样做:

string databaseFile = "test.dat";
string ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Temp\" + databaseFile +";Extended Properties=dBase III";
在路径的数据源部分设置文件名时,我从未遇到过任何文件类型/扩展名的问题,无论它是什么

对于SELECT语句,SELECT*FROM Test是从数据库中名为Test的表中选择所有数据,而不是从名为Test的文件中选择数据


我没有使用过dBase文件,但我猜现在发生的情况是,您的数据源足以让C使用默认的dBase扩展来确定您想要的文件,并且当您不使用默认扩展时,它会在填充数据适配器时崩溃。请尝试添加特定的文件名,看看它是否有效。

我对您的代码感到困惑的是您创建连接字符串的方式。我会这样做:

string databaseFile = "test.dat";
string ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Temp\" + databaseFile +";Extended Properties=dBase III";
在路径的数据源部分设置文件名时,我从未遇到过任何文件类型/扩展名的问题,无论它是什么

对于SELECT语句,SELECT*FROM Test是从数据库中名为Test的表中选择所有数据,而不是从名为Test的文件中选择数据


我没有使用过dBase文件,但我猜现在发生的情况是,您的数据源足以让C使用默认的dBase扩展来确定您想要的文件,并且当您不使用默认扩展时,它会在填充数据适配器时崩溃。尝试添加特定的文件名,看看是否有效。

文件有多大?如果你只是想读它,也许在你尝试阅读它之前先复制它,添加文件扩展名…@Nathan-你明白了吗?我对答案很感兴趣。这个文件有多大?如果你只是想读它,也许在你尝试阅读它之前先复制它,添加文件扩展名…@Nathan-你明白了吗?我对答案很感兴趣..dBase的数据源必须是一个目录文件夹,*.dbf位于其中,因为在SELECT查询或其他中,他必须使用下一个语法:SELECT FIELD-NAME from file.dbf,因为dBase是一个表数据库,它的结构中没有多个表,这就是为什么您要在查询中选择一个*.dbf文件的原因,在使用普通数据库之前,这个文件当然非常难看。dBase的数据源必须是一个目录文件夹,在*.dbf所在的位置,因为在SELECT query或其他查询中,他必须使用下一个语法:SELECT FIELD-NAME from file.dbf,因为dBase是一个表数据库,它的结构中没有多个表,这就是为什么在查询中选择一个*.dbf文件的原因,在使用普通数据库之前,这个文件当然非常难看