为什么FbDataAdapter在批更新大约一分钟后抛出NullReferenceException?

为什么FbDataAdapter在批更新大约一分钟后抛出NullReferenceException?,exception,transactions,firebird,dataadapter,Exception,Transactions,Firebird,Dataadapter,在将包含1850个新行的DataTable更新到FbDataAdapter时,我在执行过程中收到一个NullReferenceException 通常它能成功插入大约1200条记录,有时更多,有时更少 但是,使用调试器单步执行代码时,有时会插入整个记录集,这没有问题 我正在使用Firebird ADO.NET数据提供程序v2.1 有什么想法吗?谢谢 堆栈跟踪: System.NullReferenceException was unhandled by user code Message="

在将包含1850个新行的DataTable更新到FbDataAdapter时,我在执行过程中收到一个NullReferenceException

通常它能成功插入大约1200条记录,有时更多,有时更少

但是,使用调试器单步执行代码时,有时会插入整个记录集,这没有问题

我正在使用Firebird ADO.NET数据提供程序v2.1

有什么想法吗?谢谢

堆栈跟踪:

System.NullReferenceException was unhandled by user code   Message="Object reference not set to an instance of an object."   Source="FirebirdSql.Data.FirebirdClient" StackTrace:
       at FirebirdSql.Data.FirebirdClient.FbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)
       at System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable, DataTableMapping tableMapping)
       at System.Data.Common.DbDataAdapter.Update(DataTable dataTable)
       at DBTools.MergeDB.DataAccess.DatabaseHelper.UpdateDataTable(Int32 connectionIndex, DataTable dataTable) in C:\Workspaces\DatabaseTools\Releases\Latest\Sources\DBTools\DBTools.MergeDB\DataAccess\DatabaseHelper.cs:line 74
InnerException:

我找到了这个线程:

这可能是一个解决方案

如果这对您不起作用,我建议您获取Firebird数据提供程序的源代码并查看一下,看看是否可以发现问题。如果不是,请尝试向导致问题的Firebird代码中添加一些错误处理(例如,将异常记录到文本文件),然后编译该代码并使用它,而不是当前的Firebird.Data.dll(或任何它的名称)


如果您可以隔离问题,那么您可以联系Firebird开发人员并让他们知道。。。或者更好,提交一个补丁!这样,您就可以获得有效的代码,并且可以向开源社区回馈一些东西。

除了Ian的建议外,我还可以尝试新的.Net提供商2.5。

谢谢你的建议

经过一点研究,我得出结论,NullReferenceException是实际异常的副作用。基本上,更新时间太长,大约60秒后超时

我更改了连接字符串以允许事务(Enlist=true;),并在代码周围添加了一个TransactionScope,超时时间为TimeSpan.MaxValue:

using (var scope = new TransactionScope(TransactionScopeOption.Required, TimeSpan.MaxValue))
{
 ...
}

这解决了问题。。。但是,我将查看Firebird客户端源代码,以了解实际异常(超时)未正确级联到调用方的原因。

如果您发布了异常的完整堆栈跟踪,或者未能通过Visual Studio的屏幕截图显示错误,这将有所帮助。