【发布时间】:2014-05-22 13:12:18
【问题描述】:
我现在使用 SQL-Server 11.0.3128.0 有一段时间了,通常它可以正常工作。
今天出于某种奇怪的原因,当我尝试使用几周以来没有更改的代码从 SqlDataReader 中读取数据时,我开始收到 SqlExceptions。不仅是我,一位客户也遇到了同样的问题。
我有点不知如何调试它,因为错误消息对我来说毫无用处。发生异常时,代码正在从 SqlDataReader 读取:
using (SqlDataReader rdr = cmd.ExecuteReaderWithEx())
{
while (rdr.Read()) // <-- the SqlException happens here
{
nAllQueryRows = (int)rdr["TotalRowCount"];
rc.Add(new Datenkey(tabelleID, (long)rdr[1]));
}
}
SQL-Command 是跨多个数据库和视图的搜索:
WITH NumberedList AS
(
SELECT ROW_NUMBER() OVER (ORDER BY [Artikel_View].[Key]) AS [RowNum]
,[Artikel_View].[Key]
,COUNT(*) OVER () AS [TotalRowCount]
FROM [MyDatabase].dbo.[Artikel_View]
WHERE (([Artikel_View].[GeloeschtAm] IS NULL)
AND (EXISTS (SELECT [Key] FROM [MyDatabase].dbo.[Artikel] WHERE [Artikel_View].[Key] = [Artikel].[Key] AND CONTAINS(*, '"steril"'))
OR EXISTS (SELECT [Key] FROM [MyDatabase].dbo.[ArtikelLieferanten] WHERE [Artikel_View].[Key] = [ArtikelLieferanten].[ArtikelKey] AND CONTAINS(*, '"steril"'))
OR EXISTS (SELECT [Key] FROM [MyDatabase].dbo.[ArtikelLager] WHERE [Artikel_View].[Key] = [ArtikelLager].[ArtikelKey] AND CONTAINS(*, '"steril"'))
OR EXISTS (SELECT [Key] FROM [MyDatabase].dbo.[ArtikelVKPreise] WHERE [Artikel_View].[Key] = [ArtikelVKPreise].[ArtikelKey] AND CONTAINS(*, '"steril"'))
OR EXISTS (SELECT [Key] FROM [MyDatabase].dbo.[KundenReservierteBestaende] WHERE [Artikel_View].[Key] = [KundenReservierteBestaende].[ArtikelKey] AND CONTAINS(*, '"steril"'))))
AND (([Artikel_View].[Nr] LIKE @suchwort1a)
OR ([Artikel_View].[KatalogNr] LIKE @suchwort1a)
OR ([Artikel_View].[PZN] LIKE @suchwort1a)
OR ([Artikel_View].[Hilfsmittelpositionsnummer1] LIKE @suchwort1a)
OR ([Artikel_View].[HerstellerNr] LIKE @suchwort1a)
OR ([Artikel_View].[Suchwort1] LIKE @suchwort1a)
OR ([Artikel_View].[Suchwort2] LIKE @suchwort1a)
OR ([Artikel_View].[Suchwort3] LIKE @suchwort1a)
OR ([Artikel_View].[Suchwort4] LIKE @suchwort1a)
OR ([Artikel_View].[BezeichnungKurz] LIKE @suchwort1a)
OR ([Artikel_View].[Lieferanten.LieferantKey.Nr] LIKE @suchwort1a)
OR ([Artikel_View].[Lieferanten.LieferantKey.NameVorname] LIKE @suchwort1a)
OR ([Artikel_View].[Lieferanten.LieferantKey.KuerzelFuerArtikelNr] LIKE @suchwort1a)
OR ([Artikel_View].[Lieferanten.LieferantKey.Suchwort1] LIKE @suchwort1a)
OR ([Artikel_View].[Lieferanten.LieferantKey.Suchwort2] LIKE @suchwort1a)
OR ([Artikel_View].[Lieferanten.LieferantKey.Suchwort3] LIKE @suchwort1a)
OR ([Artikel_View].[Lieferanten.LieferantKey.Suchwort4] LIKE @suchwort1a)
OR ([Artikel_View].[Lieferanten.LieferantKey.UnsereKdNrBeiLieferant] LIKE @suchwort1a)
OR ([Artikel_View].[Lager.StandardLagerplatzKey.Kuerzel] LIKE @suchwort1a))
)
SELECT * FROM NumberedList WHERE RowNum BETWEEN 1 AND 100 ORDER BY [Key]
查询有两个参数(是的,第二个从未使用过 - 我会尝试摆脱它):
@suchwort1a='plast%'
@suchwort1c='%[^A-z^Ä^Ö^Ü^ä^ö^ü^ß]plast%'
它抛出一个 SqlException Class 11 Number 0 LineNumber 0 和(德语)文本“Für den aktuellen Befehl ist ein schwerwiegender Fehler aufgetreten.Löschen Sie eventuelle Ergebnisse”。 (在英语中类似于“当前命令中的严重错误。丢弃结果”)。
错误确实在客户站点发生了很多,但在我的调试系统上只发生了几次。我不知道这个错误试图告诉我什么。对我来说,SQL Server 似乎有一个内部问题。如果我重新运行相同的 SQL 命令,它通常会起作用,因此似乎是服务器的一些短暂的内部条件导致了错误。
我该如何解决这个问题?
[更新] SQL Server 错误日志包含状态转储:
2014-05-22 14:00:42.48 spid51 Using 'dbghelp.dll' version '4.0.5'
2014-05-22 14:00:42.49 spid51 ***Stack Dump being sent to C:\Program Files\Microsoft SQL Server\MSSQL11.BSOFT\MSSQL\LOG\SQLDump0003.txt
2014-05-22 14:00:42.49 spid51 SqlDumpExceptionHandler: Process 3772 generated fatal exception c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server is terminating this process.
2014-05-22 14:00:42.49 spid51 * *******************************************************************************
2014-05-22 14:00:42.49 spid51 *
2014-05-22 14:00:42.49 spid51 * BEGIN STACK DUMP:
2014-05-22 14:00:42.49 spid51 * 05/22/14 14:00:42 spid 3772
2014-05-22 14:00:42.49 spid51 *
2014-05-22 14:00:42.49 spid51 *
2014-05-22 14:00:42.49 spid51 * Exception Address = 00007FFA87046E07 Module(sqllang+0000000000BB6E07)
2014-05-22 14:00:42.49 spid51 * Exception Code = c0000005 EXCEPTION_ACCESS_VIOLATION
2014-05-22 14:00:42.49 spid51 * Access Violation occurred reading address 000000081C1A4000
2014-05-22 14:00:42.49 spid51 * Input Buffer 255 bytes -
2014-05-22 14:00:42.49 spid51 * 16 00 00 00 12 00 00 00 02 00 00 00 00 00 00 00 00 00
[... lots of bytes...]
2014-05-22 14:00:42.49 spid51 * a s t % 61 00 73 00 74 00 25 00
2014-05-22 14:00:42.49 spid51 *
2014-05-22 14:00:42.49 spid51 *
2014-05-22 14:00:42.49 spid51 * MODULE BASE END SIZE
2014-05-22 14:00:42.49 spid51 * sqlservr 00007FF79E580000 00007FF79E5BDFFF 0003e000
[... lots of modules...]
2014-05-22 14:00:42.49 spid51 * dbghelp 000000005C1F0000 000000005C385FFF 00196000
2014-05-22 14:00:42.49 spid51 *
2014-05-22 14:00:42.49 spid51 * P1Home: 0000000000000018:
2014-05-22 14:00:42.49 spid51 * P2Home: 0000000000000004:
2014-05-22 14:00:42.49 spid51 * P3Home: 000000081C1A4000:
2014-05-22 14:00:42.49 spid51 * P4Home: 000000081C1A02B8: 0000524400000001 0000000000000100 000000087D1F8040 0000000000015250 000000084B494040 0000000000000001
2014-05-22 14:00:42.49 spid51 * P5Home: 0000000021FCD580: 0000000000000004 0000000821F4B070 0000000821F4A9D0 0000000000000000 0000000821F2A301 0000000821F4B070
2014-05-22 14:00:42.49 spid51 * P6Home: 0000000021FCD610: 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000
2014-05-22 14:00:42.49 spid51 * ContextFlags: 000000000010005F: 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000
2014-05-22 14:00:42.49 spid51 * MxCsr: 0000000000001FA0:
2014-05-22 14:00:42.49 spid51 * SegCs: 0000000000000033:
2014-05-22 14:00:42.49 spid51 * SegDs: 000000000000002B:
2014-05-22 14:00:42.49 spid51 * SegEs: 000000000000002B:
2014-05-22 14:00:42.49 spid51 * SegFs: 0000000000000053:
2014-05-22 14:00:42.49 spid51 * SegGs: 000000000000002B:
2014-05-22 14:00:42.49 spid51 * SegSs: 000000000000002B:
2014-05-22 14:00:42.49 spid51 * EFlags: 0000000000010216:
2014-05-22 14:00:42.49 spid51 * Rax: 0000000000000000:
2014-05-22 14:00:42.49 spid51 * Rcx: 00007FFA87046E31: EBC09F0F30533B49 C09E0F30533B4910 9D0F30533B4907EB 48C7FF0B75C084C0 AEEB08C38348C6FF 5E73F93B410A8B45
2014-05-22 14:00:42.49 spid51 * Rdx: 000000081C1A3070: 0000081000000000 0000000000000F60 000000081C1A3FE0 000000081C1A3FE0 0000000000000000 0000000000000000
2014-05-22 14:00:42.49 spid51 * Rbx: 000000081C1A4000:
2014-05-22 14:00:42.49 spid51 * Rsp: 0000000021FCDBF8: 00007FFA87046C17 0000000821F4AD50 0000000821F4AD00 0000000000000000 0000000821F4B070 000000081C197831
2014-05-22 14:00:42.49 spid51 * Rbp: 00007FFA86490000: 0000000300905A4D 0000FFFF00000004 00000000000000B8 0000000000000040 0000000000000000 0000000000000000
2014-05-22 14:00:42.49 spid51 * Rsi: 0000000000000608:
2014-05-22 14:00:42.49 spid51 * Rdi: 0000000000000608:
2014-05-22 14:00:42.49 spid51 * R8: 0000000000000000:
2014-05-22 14:00:42.49 spid51 * R9: 0000000000000004:
2014-05-22 14:00:42.49 spid51 * R10: 0000000821F4B070: 000000080000003C 000000081C197720 0000000821F0ED00 0000000821F0ED60 000000081C1A0FC0 000000081C1A11E0
2014-05-22 14:00:42.49 spid51 * R11: 0000000821F4A9D0: 00007FFA86BA1158 0000000000000000 0000000000000000 0000000000000000 0000000800000000 0000000821F56040
2014-05-22 14:00:42.49 spid51 * R12: 0000000000000000:
2014-05-22 14:00:42.49 spid51 * R13: 0000000821F2A301: 600000000821F0F4 000000000821F643 E000000000000000 9000007FFA888E22 C000007FFA888E22 0000007FFA888E22
2014-05-22 14:00:42.49 spid51 * R14: 0000000821F4B070: 000000080000003C 000000081C197720 0000000821F0ED00 0000000821F0ED60 000000081C1A0FC0 000000081C1A11E0
2014-05-22 14:00:42.50 spid51 * R15: 8000000000000001:
2014-05-22 14:00:42.50 spid51 * Rip: 00007FFA87046E07: 7705F98341138B48 D8858C8BC1634949 E1FFCD034800BB6E EBC0940F30533B49 C09C0F30533B4922 9F0F30533B4919EB
2014-05-22 14:00:42.50 spid51 * *******************************************************************************
2014-05-22 14:00:42.50 spid51 * -------------------------------------------------------------------------------
2014-05-22 14:00:42.50 spid51 * Short Stack Dump
2014-05-22 14:00:42.50 spid51 00007FFA87046E07 Module(sqllang+0000000000BB6E07)
2014-05-22 14:00:42.50 spid51 00007FFA87046C17 Module(sqllang+0000000000BB6C17)
2014-05-22 14:00:42.50 spid51 00007FFA870375CF Module(sqllang+0000000000BA75CF)
2014-05-22 14:00:42.50 spid51 00007FFA8702F22B Module(sqllang+0000000000B9F22B)
2014-05-22 14:00:42.50 spid51 00007FFA87015C72 Module(sqllang+0000000000B85C72)
2014-05-22 14:00:42.50 spid51 00007FFA87017DF4 Module(sqllang+0000000000B87DF4)
2014-05-22 14:00:42.50 spid51 00007FFA86FE87EA Module(sqllang+0000000000B587EA)
2014-05-22 14:00:42.50 spid51 00007FFA87029FF6 Module(sqllang+0000000000B99FF6)
2014-05-22 14:00:42.50 spid51 00007FFA8702BF94 Module(sqllang+0000000000B9BF94)
2014-05-22 14:00:42.50 spid51 00007FFA86F7A117 Module(sqllang+0000000000AEA117)
2014-05-22 14:00:42.50 spid51 00007FFA86D10A7D Module(sqllang+0000000000880A7D)
2014-05-22 14:00:42.50 spid51 00007FFA890E643B Module(sqlmin+0000000000BC643B)
2014-05-22 14:00:42.50 spid51 00007FFA88568EF7 Module(sqlmin+0000000000048EF7)
2014-05-22 14:00:42.50 spid51 00007FFA88649D62 Module(sqlmin+0000000000129D62)
2014-05-22 14:00:42.50 spid51 00007FFA886466D2 Module(sqlmin+00000000001266D2)
2014-05-22 14:00:42.50 spid51 00007FFA886481B1 Module(sqlmin+00000000001281B1)
2014-05-22 14:00:42.50 spid51 00007FFA88707952 Module(sqlmin+00000000001E7952)
2014-05-22 14:00:42.50 spid51 00007FFA85793D80 Module(sqldk+0000000000013D80)
2014-05-22 14:00:42.50 spid51 00007FFA85793B64 Module(sqldk+0000000000013B64)
2014-05-22 14:00:42.50 spid51 00007FFA85793967 Module(sqldk+0000000000013967)
2014-05-22 14:00:42.50 spid51 00007FFA857B2F0F Module(sqldk+0000000000032F0F)
2014-05-22 14:00:42.50 spid51 00007FFA857B3750 Module(sqldk+0000000000033750)
2014-05-22 14:00:42.50 spid51 00007FFA857B2C5D Module(sqldk+0000000000032C5D)
2014-05-22 14:00:42.51 spid51 00007FFA857B3F88 Module(sqldk+0000000000033F88)
2014-05-22 14:00:42.51 spid51 00007FFA916116AD Module(KERNEL32+00000000000016AD)
2014-05-22 14:00:42.51 spid51 00007FFA937F4629 Module(ntdll+0000000000074629)
2014-05-22 14:00:42.53 spid51 Stack Signature for the dump is 0x000000014CD388CE
2014-05-22 14:00:43.25 spid51 External dump process return code 0x20000001.
External dump process returned no errors.
【问题讨论】:
-
错误日志说什么?
-
cmd.ExecuteReaderWithEx()是什么?这不是框架方法。 -
对不起,我添加了 ExecuteReaderWithEx() 来调试,这是一个小助手方法,它执行带有 try/catch 和记录异常的命令:
public static SqlDataReader ExecuteReaderWithEx(this SqlCommand cmd) { try { return cmd.ExecuteReader(); } catch (SqlException ex) { Logger.LogSqlException(ex); throw; } } -
@st4hoo windows 事件日志中没有相关消息 - 或者您是否引用了其他错误日志?
-
@st4hoo,我发现 SQL Server 错误日志,它们包含信息,但对我来说不是很有用。我会把它添加到问题中。
标签: c# sql-server sql-server-2012