我有一个C#应用程序写入加密的SQL Server Compact数据库。这是代码:
conn = new SqlCeConnection(connectionString);
ConnectionOpen();
SqlCeCommand cmd = conn.CreateCommand();
cmd.CommandText = "INSERT INTO TableName ([Date],[ParentURL],[ChildURL],[DateLongFormat]) VALUES (@EntryDate ,@parentUrl,@childUrl,@EntryDateLong)";
cmd.Parameters.AddWithValue("@EntryDate", EntryDate);
cmd.Parameters.AddWithValue("@parentUrl", parentUrl);
cmd.Parameters.AddWithValue("@childUrl", childUrl);
cmd.Parameters.AddWithValue("@EntryDateLong", EntryDate.ToString("yyyy/MM/dd hh:mm:ss.fff"));
int count = cmd.ExecuteNonQuery();
cmd.Dispose();
ConnectionClose();
非常偶尔(大约1/500次)EXE将崩溃抛出以下两个错误(通过事件查看器应用程序日志检索):
[Source = .NET Runtime]
Description: The process was terminated due to an unhandled exception.
Exception Info: System.AccessViolationException
Stack:
at System.Data.SqlServerCe.SqlCeCommand.ReleaseNativeInterfaces()
at System.Data.SqlServerCe.SqlCeCommand.Dispose(Boolean)
at System.Data.SqlServerCe.SqlCeCommand.Finalize()
[Source = Application Error]
Exception code: 0xc0000005
Fault offset: 0x000000000005030e
Faulting module path: C:\Program Files\Microsoft SQL Server Compact Edition\v4.0\sqlcese40.dll
最初我认为错误是由两个线程试图同时写入数据库引起的,但SQL Server Compact支持多线程。我还更改了SQL Server Compact数据库模式以支持具有巨大字符限制的字符串值,因此它不是因为它试图写入比单元格值更长的字符串。
我的所有C#代码都在try / catch中执行,任何人都知道应用程序崩溃的原因,或者这些堆栈跟踪的含义是什么?