我正在尝试使用OleDB 4来读取CSV文件中的一些数据。我使用以下代码,我从各种来源复制,表明它应该工作....
protected virtual string ConnectionString
{
get
{
return string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='text;HDR=Yes;FMT=Delimited'", _path);
}
}
public void ReadData()
{
using (OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT [Name] FROM SomeTable", ConnectionString))
{
using (DataTable table = new DataTable())
{
adapter.Fill(table);
foreach (DataRow row in table.Rows)
{
//Do something with the data
}
}
}
}
我正在尝试使用单元测试来测试代码,但我在“adapter.Fill”行中不断收到以下异常:
“Microsoft Jet数据库引擎无法打开文件”。它已由其他用户独占打开,或者您需要获得查看其数据的权限。“
请有人能给我一些线索,找出问题所在吗?该文件尚未被其他应用程序打开。我尝试使用“AppDomain.CurrentDomain.BaseDirectory”下的路径,以及只是一个临时文件夹的硬编码路径,但无论我尝试什么,都会给我带来同样的错误。
答案 0 :(得分:0)
在连接字符串中,您必须将Data Source
设置为包含CSV文件的文件夹,然后您必须SELECT * FROM your-file-name.csv
。
此处使用位于F:\Temp\dummy.csv
的文件(
var dir = @"F:\Temp";
var fn = "dummy.csv";
var cn = new OleDbConnection(
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"" + dir + "\";Extended Properties='text;HDR=Yes;FMT=Delimited(,)';");
cn.Open();
var cmd = new OleDbCommand("select * from [" + fn + "]", cn);
var rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Console.WriteLine(rdr[0] + " " + rdr[1]);
}
cn.Close();