将数据从Excel工作表加载到数据表时遇到错误

时间:2019-03-20 07:33:52

标签: c# excel oledb

using (OleDbConnection connection = new 
OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathOnly + ";Extended Properties=\"Text;HDR=" + header + ";IMEX=1;Readonly=1;Extended Properties=Excel 8.0;\""))
{
    using (OleDbCommand command = new OleDbCommand(sql, connection))
    {
        using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
        {
            dataTable = new DataTable();
            adapter.Fill(dataTable);
        }
    }
}

上面是我正在使用的代码,并得到以下错误

  

无法更新。数据库或对象是只读的。

有人遇到过同样的问题吗?

2 个答案:

答案 0 :(得分:0)

您的连接字符串包含“ Readonly = 1;”。尝试更改“ Readonly = 0;”。并尝试删除“ imex = 1”。所以您的代码应该像这样:

    using (OleDbConnection connection = new 
OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathOnly + ";Extended Properties=\"Text;HDR=" + header + ";Readonly=0;Extended Properties=Excel 8.0;\""))
{
    using (OleDbCommand command = new OleDbCommand(sql, connection))
        {
            using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
                {
                    dataTable = new DataTable();
                    adapter.Fill(dataTable);
                 }
         }
}

答案 1 :(得分:0)

尝试使用以下语法(由于用于导入csv文件,因此从扩展属性中删除Text

using (OleDbConnection connection = new 
OleDbConnection(String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"HDR={1};IMEX=1;Readonly=1;Extended Properties=Excel 8.0;\"",pathOnly ,header )))
{
    using (OleDbCommand command = new OleDbCommand(sql, connection))
    {
        using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
        {
            dataTable = new DataTable();
            adapter.Fill(dataTable);
        }
    }
}

如果您安装了Office 2007或更高版本的提供程序,请尝试使用Microsoft.ACE.OLEDB.12.0提供程序,因为该程序还支持读取旧的excel格式。

如果您要导入文本文件(csv),则最好使用文本解析库,例如: