我目前正在使用SMO來幫助自動修補和/或升級正在生產的客戶數據庫。我使用下面的代碼SQL管理對象,繼續出錯但日誌消息
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
,我與Database
一部分給我所發生的事情相當簡單的郵件用的是什麼,我做的是記錄的SQLConnection
消息被脫落SQLConneciton的。我還在通過我創建的LogMessage(string)
事件記錄自己的各種消息。
我真的很希望能夠做的是執行腳本,以便在出現錯誤時繼續執行,但仍然記錄出現錯誤,而不必按現在的方式執行。
原因是一些打破交易的錯誤是微不足道的,它們正在發生。就像試圖在一個存在或者你擁有什麼時創建一個索引一樣。
有什麼辦法可以在錯誤時繼續執行腳本,但仍然會記錄錯誤消息嗎?
**編輯** 一種什麼樣的兩個對象進來是
的scriptInfo
是一個FileInfo
對象,告訴StreamReader
要加載從SQL腳本澄清。
的db
是與SQLClient.Connection
相關的SMO Database
對象,讓我一個與db
錯誤日誌上SqlClient.SqlConnections
OnInfo事件發生關聯的數據庫上執行的腳本,或者從LogMessage
事件
我們使用CodeSmith來生成這個程序所使用的大部分腳本,但對腳本的修改不是問題。最後一行'EXEC sp_help't1''做了什麼? (谷歌搜索,但它會很好的答案)。我們也儘可能地使用If Exists不存在,因爲我們可以。 – msarchet 2010-08-05 14:15:44
最後一行僅僅是爲了表明腳本儘管出現了錯誤仍然有效。 sp_help命令顯示錶的結構,約束和索引。 – 8kb 2010-08-05 15:14:08