Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 填充数据表时出现AccessViolationException异常_C#_Sql_Access Violation - Fatal编程技术网

C# 填充数据表时出现AccessViolationException异常

C# 填充数据表时出现AccessViolationException异常,c#,sql,access-violation,C#,Sql,Access Violation,我在使用一个工具时遇到了一个奇怪的问题,它应该能够从Excel文件中读取数据并将其写入SQL数据库 string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + filename + ";" + "Extended Properties=\"Excel 12.0 Xml;HDR=YES\"";

我在使用一个工具时遇到了一个奇怪的问题,它应该能够从Excel文件中读取数据并将其写入SQL数据库

            string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" +
                        "Data Source=" + filename + ";" +
                        "Extended Properties=\"Excel 12.0 Xml;HDR=YES\"";
        DataTable dt;
        OleDbDataAdapter dataAdapter;
        dataAdapter = new OleDbDataAdapter("SELECT * FROM [" + sheet + "$]", strConn);
        dt = new DataTable();
        try
        {
            dataAdapter.Fill(dt);   //Programm reagiert nicht mehr
        }
        catch(Exception ex)
        {
            Logger("Problem filling Adapter: " + ex.ToString());
            return null;
        }
dataAdapter.Fill(dt)发生以下异常

填充适配器时出现问题:System.AccessViolationException:尝试读取或写入受保护的内存。这通常表示其他内存已损坏。 位于System.Data.OleDb.DataSourceWrapper.InitializeAndCreateSession(OleDbConnectionString constr、SessionWrapper和SessionWrapper) 在System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr,OleDbConnection connection) 在System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions选项、对象池组ProviderInfo、DbConnectionPool池、DbConnection owningObject) 位于System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection,DbConnectionPoolGroup poolGroup) 位于System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection-owningConnection) 位于System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection,DbConnectionFactory connectionFactory) 在System.Data.OleDb.OleDbConnection.Open()处 位于System.Data.Common.DbDataAdapter.FillInternal(数据集数据集,数据表[]数据表,Int32 StartRecords,Int32 maxRecords,字符串srcTable,IDbCommand命令,CommandBehavior) 位于System.Data.Common.DbDataAdapter.Fill(DataTable[]dataTables,Int32 StartRecords,Int32 maxRecords,IDbCommand命令,CommandBehavior) 位于System.Data.Common.DbDataAdapter.Fill(DataTable) 在ExcelExportWindowsForms.Program.ReadExcel(字符串文件名、字符串表)

有趣的是,这在我的机器(Excel2013)上运行得很好,但在装有Excel2003的服务器上却不行。这可能是原因吗

在您的评论中,您提到您安装了最新的AccessDatabaseEngine。我在这方面也遇到了问题(当时我找到了很多有同样问题的人的参考资料,但是没有这些链接了)。我不得不使用2010版。如果其他所有操作都失败,可能需要尝试(您可能必须先卸载其他版本)。
原因尚不清楚(对我来说),但可能与x86 v x64安装有关。

使用Microsoft.ACE.OLEDB.16.0(尝试32位和64位),System.AccessViolationException在Windows Server 2012(64位)上多次读取MS Access文件仍然是个问题。 将参数
oledb Services=-1
添加到连接字符串似乎可以解决这个问题。 有关参数的说明,请参见
对我来说,问题是它试图访问的文件被Excel以某种方式锁定了,因为我无法删除或移动该文件。我第一次尝试打开任务管理器来停止Excel,但在那里找不到Excel,所以我只是重新启动了计算机,这很有魅力。

您正在使用Excel 2003的Excel 2013连接字符串,是的,这可能是原因。请尝试
Extended Properties=“Excel 8.0;”
也可能只有较旧版本的数据访问驱动程序可用。您也需要更改提供程序。请检查所有可能的连接字符串是否存在32/64位冲突?是否可以检查[此答案][()。您提到您安装了最新的AccessDatabaseEngine。我也遇到了一些问题(当时我发现很多人都有相同的问题,但没有这些链接)。我不得不使用2010版本。如果其他版本都失败,可能需要尝试一下(您可能必须先卸载其他版本)@xileb0,很高兴能帮上忙。回答补充。