我是新手,所以我无法找到解决问题的方法。我想使用OleDB读取DataTable中的.csv文件。这是我的代码
string file = "D:\\MyFile.csv";
string dir = Path.GetDirectoryName(file);
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dir + ";Extended Properties='text;HDR=Yes;FMT=Delimited'";
OleDbConnection objConn = new OleDbConnection(sConnectionString);
objConn.Open();
DataTable dt = new DataTable();
OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [" + file + "]", objConn);
OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();
objAdapter1.SelectCommand = objCmdSelect;
objAdapter1.Fill(dt);
objConn.Close();
但是我收到一个错误:Microsoft Jet数据库引擎找不到对象'D:\ MyFile.csv'。确保对象存在,并且您正确拼写其名称和路径名称。
文件在正确的位置,所以你能告诉我可能是什么问题吗?
答案 0 :(得分:3)
将文件放在D:\中的某个文件夹中,然后重试
GetDirectoryName函数通常在使用
之类时返回''GetDirectoryName('C:\ asd.txt')返回''所以请使用它
GetDirectoryName('C:\ myfol \ asd.txt')它将返回'C:\ myfol'
并且你的代码正在整理目录名,所以很可能你正在整理一个空字符串''
在线 1. String sConnectionString =“Provider = Microsoft.Jet.OLEDB.4.0; Data Source =”+ dir +“; 2. sConnectionString =“Provider = Microsoft.Jet.OLEDB.4.0 .; Data Source =''; // as dir is''
检查 http://msdn.microsoft.com/en-us/library/system.io.path.getdirectoryname(v=vs.110).aspx
寻求更多帮助。
答案 1 :(得分:0)
您需要从此行中的文件名中删除路径:
OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [" + file + "]", objConn);
应该是:
OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [" + Path.GetFileName(file) + "]", objConn);
在连接字符串中,您告诉引擎目录,在命令中告诉引擎要使用的文件(该路径可以看作是数据库的等价物,该文件相当于一个表)。
您可以按照以下方式改进:
string file = "D:\\MyFile.csv";
string dir = Path.GetDirectoryName(file);
string name = Path.GetFileName(file);
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dir + ";Extended Properties='text;HDR=Yes;FMT=Delimited'";
...
OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [" + name + "]", objConn);
...
答案 2 :(得分:0)
在select查询中尝试使用实际文件名。
<强> SELECT * FROM [MyFile.csv]
强>
OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [MyFile.csv]", objConn);