我正在尝试读取一个只是dbase文件但没有标准扩展名的文件,如下所示:
TEST.DAT
我正在使用此代码块来尝试读取文件:
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文件。
感谢。
答案 0 :(得分:1)
让您对代码感到困惑的是您创建ConnectionString的方式。我会这样做:
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扩展来找出您想要的文件,并且在填充数据适配器时崩溃您没有使用默认扩展名。尝试添加特定的文件名,看看它是否有效。