【发布时间】:2010-07-23 21:14:03
【问题描述】:
我目前正在使用 SMO 来帮助自动修补和/或升级生产中的客户数据库。我正在使用以下代码
Public Sub RunScript(ByVal db As Database, ByVal scriptInfo As FileInfo)
If scriptInfo.Exists Then
RaiseEvent LogMessage("Executing Indicated Script: " & scriptInfo.Name)
Using sr As New StreamReader(scriptInfo.FullName)
Dim script As String = sr.ReadToEnd
Try
db.ExecuteNonQuery(script)
Catch ex As Exception
RaiseEvent LogMessage("ERROR: " & ex.Message.ToString)
db.ExecuteNonQuery(script,
Microsoft.SqlServer.Management.Common.ExecutionTypes.ContinueOnError)
End Try
End Using
End If
End Sub
我正在做的是记录SQLConnection 消息,这些消息来自我与Database 部分一起使用的SQLConneciton,这些消息为我提供了关于正在发生的事情的相当简单的消息。我是否也在通过我创建的LogMessage(string) 事件记录自己的各种消息。
我真正想做的是执行脚本,以便在出现错误时继续,但仍然记录有错误,而不必像现在这样。
原因是一些破坏交易的错误是微不足道的,它们正在发生是正常的。就像在索引存在或你有什么的时候尝试创建一个索引。
有什么方法可以在出错时继续执行脚本但仍然记录错误消息?
**编辑** 澄清进来的两个对象是什么
scriptInfo 是一个 FileInfo 对象,它告诉 StreamReader 从哪里加载 sql 脚本。
db 是一个与SQLClient.Connection 关联的SMO Database 对象,它允许我在与db 关联的数据库上执行脚本
错误记录发生在 SqlClient.SqlConnections OnInfo 事件上,或来自 LogMessage 事件
【问题讨论】: