【问题标题】:File Access Error using OleDB to read CSV data使用 OleDB 读取 CSV 数据的文件访问错误
【发布时间】:2011-02-04 14:48:41
【问题描述】:

我正在尝试使用 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”下的路径以及临时文件夹的硬编码路径,但无论我尝试什么,都会出现同样的错误。

【问题讨论】:

  • 您的问题解决了吗?

标签: c# .net csv oledb


【解决方案1】:

在连接字符串中,您必须将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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多