我正在开发一个C#程序,它将读取DBF文件并将表导入MySQL数据库。我能够获取所有DBF文件的目录'位置和读取大多数DBF文件。问题是17个DBF文件中有2个会抛出myDataAdapter.Fill(myDataSet)的异常;
这是我的代码:
private void button2_Click(object sender, EventArgs e)
{
DirectoryInfo dir = new DirectoryInfo(Regex.Replace(textBox1.Text, @"\\", @"\\"));
string strAccessConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dir + ";Extended Properties=dBase III";
DataSet myDataSet = new DataSet();
OleDbConnection myAccessConn = null;
try
{
myAccessConn = new OleDbConnection(strAccessConn);
}
catch (Exception ex)
{
Console.WriteLine("Error: Failed to create a database connection. \n{0}", ex.Message);
return;
}
foreach (FileInfo file in dir.GetFiles())
{
MessageBox.Show(file.Name.Substring(0, file.Name.Length - 4));
string strAccessSelect = "SELECT * FROM " + file.Name.Substring(0, file.Name.Length - 4);
OleDbCommand myAccessCommand = new OleDbCommand(strAccessSelect, myAccessConn);
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(myAccessCommand);
myAccessConn.Open();
myDataAdapter.Fill(myDataSet);
myAccessConn.Close();
}
MessageBox.Show("End");
}
这些是错误讯息:
未处理的类型' System.Data.OleDb.OleDbException'发生在System.Data.dll
中其他信息:Microsoft Jet数据库引擎无法找到对象' SomeFile'。确保对象存在,并且您正确拼写其名称和路径名称。
造成这种情况的原因是什么?我已打印出dir,file.name和strAccessSelect,所有内容看起来都拼写正确。
非常感谢任何帮助,谢谢!
- UPDATE -
我检查了文件权限,每个用户都拥有完全权限。
不确定这会有多大帮助,但有时当我重命名文件时(例如:SomeFile1)它会起作用,我不会收到错误信息......大部分时间这都不起作用。
答案 0 :(得分:0)
我会尝试使用Path.GetFileNameWithoutExtension来确保文件名正确
string strAccessSelect = "SELECT * FROM " + Path.GetFileNameWithoutExtension(file.Name);
OleDbCommand myAccessCommand = new OleDbCommand(strAccessSelect, myAccessConn);
如果这不起作用,唯一可能的原因是某个其他进程锁定的文件或权限问题
答案 1 :(得分:0)
问题是strAccessConn。我不得不使用以下代码:
if ((file.Name.Substring(0, file.Name.Length - 4) == "SomeFile1") || (file.Name.Substring(0, file.Name.Length - 4) == "SomeFile2"))
{
strAccessConn = @"Provider=vfpoledb;Data Source=" + dir + ";Collating Sequence=machine;";
}
else
{
strAccessConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dir + ";Extended Properties=dBase IV";
}
每个文件都需要不同的连接字符串