DBCC CheckDB-检测错误VB.NET的任何方法



我正在使用以下代码检查我的数据库是否有任何问题/需要故障排除:

Dim cmd As New SqlCommand("DBCC CHECKDB (offpoDb) WITH TABLERESULTS", con)
Dim reader As SqlDataReader = cmd.ExecuteReader
executing.Content = "Checking datatabse for errors"
executing.Margin = New Thickness(243, 111, 0, 0)
While reader.Read
    strBuilder.AppendLine(CStr(reader("MessageText")))
End While
reader.Close()
MessageBox.Show(strBuilder.ToString)

现在, DBCC CHECKDB命令可能会导致这样的事情:

CHECKDB found 0 allocation errors and 15 consistency errors in database 'mydb

可以修复以下SQL查询:

ALTER DATABASE AdventureWorks2008R2 SET SINGLE_USER WITH ROLLBACK 
IMMEDIATE;
BEGIN TRANSACTION;
DBCC CHECKDB ('AdventureWorks2008R2', REPAIR_ALLOW_DATA_LOSS);
ALTER DATABASE AdventureWorks2008R2 SET MULTI_USER;

但是,在通过我的应用程序执行以下查询之前,是否有办法知道DBCC CHECKDB是否真的返回了任何错误?因为没有任何错误,修复数据库将是没有用的...

有帮助吗?

一个跨越我的想法

我正在考虑将字符串从strBuilder转到文本框。将检查文本框以获取以下行CHECKDB found 0 allocation errors and 15 consistency errors in database的可用性。

但这仍然是不可能的,因为该行可能不时不同。e.g。

CHECKDB found 0 allocation errors and 15 consistency errors

CHECKDB found 1 allocation errors and 14 consistency errors

任何更好的想法?

有多种可能性:

1。
NO_INFOMSGS选项添加到命令中。
这样,如果找不到错误,将不会返回记录。

DBCC CHECKDB (dname) WITH TABLERESULTS, NO_INFOMSGS

2。
读取Level列的值。如果一个高于10,则会发生错误。(参考)
您可以使用的DBCC-Errors列表:

SELECT * FROM sys.sysmessages 
WHERE description LIKE '%checkdb%' AND msglangid = 1033 AND severity > 10

3。
检查结果弦的数字高于0

For Each c As Char In "CHECKDB found 0 allocation errors and 15 consistency errors"
    If (Char.IsNumber(c)) AndAlso Integer.Parse(c) > 0 Then
        'Errors occured
    End If
Next

最新更新