我经常得到SQL Server CE 3.5 SP2抛出的NullReferenceException。下面是堆栈跟踪:
System.Data.SqlServerCe.dll!System.Data.SqlServerCe.Accessor.Dispose()+ 0x5e bytes System.Data.SqlServerCe.dll!System.Data.SqlServerCe.Accessor.Finalize()+ 0x13 bytes
到目前为止,我只在一台机器上看到过这个问题,恰好是64位。不确定这是否有所贡献。我正在使用32位SQLCE库。
以下是异常时间/位置的反汇编:
00000000 55 push ebp
00000001 8B EC mov ebp,esp
00000003 57 push edi
00000004 56 push esi
00000005 53 push ebx
00000006 8B F1 mov esi,ecx
00000008 83 7E 08 00 cmp dword ptr [esi+8],0
0000000c 74 5D je 0000006B
0000000e 33 FF xor edi,edi
00000010 8B 46 08 mov eax,dword ptr [esi+8]
00000013 83 78 04 00 cmp dword ptr [eax+4],0
00000017 7E 4A jle 00000063
00000019 B9 01 00 00 00 mov ecx,1
0000001e E8 85 77 FB FF call FFFB77A8
00000023 8B D8 mov ebx,eax
00000025 8B 8B 8C 09 00 00 mov ecx,dword ptr [ebx+0000098Ch]
0000002b 8B 46 08 mov eax,dword ptr [esi+8]
0000002e 3B 78 04 cmp edi,dword ptr [eax+4]
00000031 73 6E jae 000000A1
00000033 6B D7 2C imul edx,edi,2Ch
00000036 8D 44 10 08 lea eax,[eax+edx+8]
0000003a 8B 40 10 mov eax,dword ptr [eax+10h]
0000003d 3B C8 cmp ecx,eax
0000003f 74 17 je 00000058
00000041 8B 46 08 mov eax,dword ptr [esi+8]
00000044 3B 78 04 cmp edi,dword ptr [eax+4]
00000047 73 58 jae 000000A1
00000049 6B D7 2C imul edx,edi,2Ch
0000004c 8D 44 10 08 lea eax,[eax+edx+8]
00000050 8B 48 10 mov ecx,dword ptr [eax+10h]
00000053 E8 00 88 FB FF call FFFB8858
00000058 83 C7 01 add edi,1
0000005b 8B 46 08 mov eax,dword ptr [esi+8]
0000005e 39 78 04 cmp dword ptr [eax+4],edi
00000061 7F C2 jg 00000025
00000063 33 D2 xor edx,edx
00000065 89 56 08 mov dword ptr [esi+8],edx
00000068 89 56 04 mov dword ptr [esi+4],edx
0000006b B9 01 00 00 00 mov ecx,1
00000070 E8 33 77 FB FF call FFFB77A8
00000075 8B D8 mov ebx,eax
00000077 8B 8B 8C 09 00 00 mov ecx,dword ptr [ebx+0000098Ch]
0000007d 8B 56 28 mov edx,dword ptr [esi+28h]
00000080 3B CA cmp ecx,edx
00000082 74 11 je 00000095
00000084 8B 4E 28 mov ecx,dword ptr [esi+28h]
00000087 E8 CC 87 FB FF call FFFB8858
0000008c 8B 83 8C 09 00 00 mov eax,dword ptr [ebx+0000098Ch]
00000092 89 46 28 mov dword ptr [esi+28h],eax
00000095 8B CE mov ecx,esi
00000097 E8 B4 62 FB FF call FFFB6350
0000009c 5B pop ebx
0000009d 5E pop esi
0000009e 5F pop edi
0000009f 5D pop ebp
000000a0 C3 ret
000000a1 E8 FA 76 FB FF call FFFB77A0
000000a6 CC int 3
在偏移 0000005e 时抛出异常。
我很想转到SQL CE 4.0,我听说它更可靠,但我暂时坚持使用.NET 3.5。
答案 0 :(得分:2)
显然,这是在Cummulative Update 2中修复的。详细信息可以在这里找到:
http://support.microsoft.com/kb/2300599
这主要解决了这个问题。
我还写了一篇关于此的博文,内容更多: http://www.robertdowney.com/post/2011/04/13/Trials-and-Tribulations-with-SQL-Server-Compact-Edition.aspx