Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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
.net OleDbDataAdapter在使用包含联接的station时引发AccessViolationException_.net_Ms Access_Join_Oledbdataadapter - Fatal编程技术网

.net OleDbDataAdapter在使用包含联接的station时引发AccessViolationException

.net OleDbDataAdapter在使用包含联接的station时引发AccessViolationException,.net,ms-access,join,oledbdataadapter,.net,Ms Access,Join,Oledbdataadapter,我有一段旧代码,它一直工作到上周。它使用OleDb帮助器类查询MS Access数据库。我已经能够将错误定位到一个特定的查询中。经过一些实验,我可以确认当语句包含JOIN子句时,OleDataAdapter.Fill([DataSet])行抛出一个AccessViolationException。我已经成功地从Access文件中运行了相同的精确查询。以及通过helper类进行的其他更简单的查询 什么可能导致此异常?我的研究没有给我提供任何见解,它似乎是一个通用的“出了问题”堆栈跟踪显示它起源如此

我有一段旧代码,它一直工作到上周。它使用OleDb帮助器类查询MS Access数据库。我已经能够将错误定位到一个特定的查询中。经过一些实验,我可以确认当语句包含JOIN子句时,OleDataAdapter.Fill([DataSet])行抛出一个AccessViolationException。我已经成功地从Access文件中运行了相同的精确查询。以及通过helper类进行的其他更简单的查询

什么可能导致此异常?我的研究没有给我提供任何见解,它似乎是一个通用的“出了问题”堆栈跟踪显示它起源如此之深以至于无法到达

StackTrace: 
at System.Data.Common.UnsafeNativeMethods.ICommandText.Execute(IntPtrpUnkOuter, Guid& riid, tagDBPARAMS pDBParams, IntPtr& pcRowsAffected,Object& ppRowset)
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)
at OleDatabase.hGetDS(String strSQL) in OleDatabase.cs:line 78
at GunTester.ServiceTest.getSalesOrder(String value) in ServiceTest.cs:line 53
at GunTester.ServiceTest.Manual() in ServiceTest.cs:line 29
GunTester是我的测试类,OleDatabase是助手类

我怀疑有某种环境变化,但据这里的任何人所知,在出现错误之前,托管此代码的服务器已经有好几天没有被触动了。代码同样未被编辑。运行此代码的服务一天调用几十次

编辑:

下面是一个分条的代码块,删除了helper类和所有其他层。该查询包含单个内部联接。我也看到了左连接的情况,但在查看时,该查询将其作为子查询包含。如前所述,连接字符串指向MS Access数据库,错误由da.Fill(a)抛出

情节扭曲: 我用虚拟数据创建了一些新的简单表

Table A     Table B
ID | This   ID | That
 1 | A       1 | A
 2 | C       2 | B 
 3 | E       3 | C
并在上述测试方法中使用了一个新的查询

SELECT this,that FROM A INNER JOIN B ON A.id = b.id

这没有抛出错误。这些新表与第一个失败示例中使用的表之间的区别在于它们是从原始表链接而来的。

在MS Access中,我使用链接表管理器刷新查询中的链接表,这解决了问题。

在MS Access中,我使用链接表管理器刷新查询中的链接表,这就解决了问题。

你能想出一个解决方案吗?它是因为只有一个连接而失败,还是必须是一系列复杂的连接?内部联接与外部联接似乎有什么关系吗?@GordThompson:在单个内部联接以及使用选择中保存的查询的任何操作上都会失败。内部/外部没有效果。你能想出一个解决方案吗?它是因为只有一个连接而失败,还是必须是一系列复杂的连接?内部联接与外部联接似乎有什么关系吗?@GordThompson:在单个内部联接以及使用选择中保存的查询的任何操作上都会失败。内部/外部不起作用。
SELECT this,that FROM A INNER JOIN B ON A.id = b.id