Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.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# 第二次通过OLEDB连接连接到Excel文件时,我得到:AccessViolationException:';试图读取或写入受保护内存“;_C#_.net_Excel_Oledb - Fatal编程技术网

C# 第二次通过OLEDB连接连接到Excel文件时,我得到:AccessViolationException:';试图读取或写入受保护内存“;

C# 第二次通过OLEDB连接连接到Excel文件时,我得到:AccessViolationException:';试图读取或写入受保护内存“;,c#,.net,excel,oledb,C#,.net,Excel,Oledb,我见过其他类似的帖子,但没有一篇能帮我解决问题 第一次打开连接时没有问题,然后使用该连接从文件中获取信息,然后关闭文件。很多时候,用户会想重复这个动作,第二次出现标题中的例外情况 下面是调用它的代码: public virtual void Open() { CheckConnection(); Connection.Close(); Connection.ConnectionString = Connec

我见过其他类似的帖子,但没有一篇能帮我解决问题

第一次打开连接时没有问题,然后使用该连接从文件中获取信息,然后关闭文件。很多时候,用户会想重复这个动作,第二次出现标题中的例外情况

下面是调用它的代码:

 public virtual void Open()
        {
            CheckConnection();
            Connection.Close();
            Connection.ConnectionString = ConnectionString;
            Connection.Open();
        }
其中,
连接
的类型为
OLEDB连接

以下是堆栈跟踪的相关部分:

at System.Data.OleDb.DataSourceWrapper.InitializeAndCreateSession(OleDbConnectionString constr, SessionWrapper& sessionWrapper)
   at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
   at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
   at System.Data.OleDb.OleDbConnection.Open()
最后是我第一次关闭连接的代码

Connection.Close();
Connection.Dispose();
OleDbConnection.ReleaseObjectPool();
GC.Collect();
请注意,我遵循以下步骤:

接近。处置释放池。调用GC()

而我仍然在努力

System.AccessViolationException: 'Attempted to read or write protected memory. This is often an indication that other memory is corrupt.'
我怀疑它并没有放弃文件连接,但我想可能是其他原因

编辑:这也是我当前使用的连接字符串(尽管我尝试了很多):


这也是我在评论中写的:嗯……如果我在第二次打开连接之前设置了断点,我可以进入文件浏览器手动打开文件,如果OLEDB连接控制了文件,我认为我无法做到这一点。我不知道这是否有帮助,但您可以尝试添加一个调用,也许
ReleaseObjectPool
有一个尚未运行的终结器。脱离主题:为什么在关闭前检查连接,而在关闭时不捕获错误?检查连接只是检查如果连接对象存在,则抛出异常(如果不存在)。关闭我认为是一个预防措施(我没有写那些代码行)@pstrjds不起作用,但值得一试嗯..如果我在第二次打开连接之前设置了一个断点,我可以进入文件资源管理器手动打开文件,如果oledbconnection控制了该文件,我认为我无法做到这一点
Provider=Microsoft.ACE.OLEDB.16.0;Data Source='C:\Users\Jacob\Documents\book1.xlsx';OLE DB Services=-2;Extended Properties='Excel 8.0';