我有,我正在写与SQL Server管理一些相当基本的脚本实用程序,SQL Sever的2008 R2/64位数据库服务器对象(SMO)。我的项目是一个用C#编写的32位VS2010可执行文件。SqlServer的SMO Scripting.ScriptingError事件处理程序不触发
大部分的努力都相当简单和成功。我遇到的唯一问题是我的自定义事件处理程序的触发器,应该在响应脚本错误时调用它。
的Scripter
对象公开ScriptingError
事件,我曾试图利用正是如此:
//srv contains a valid server name
Scripter scrp = new Scripter(srv);
//scrp_ScriptingError is my handler
scrp.ScriptingError += new ScriptingErrorEventHandler(scrp_ScriptingError);
我的处理程序正是如此宣称:
static void scrp_ScriptingError(object sender, ScriptingErrorEventArgs e)
{
// my handler goes here, just printing e.Current.Urn to the console
// This is merely representative, have had other things here, but
// the handler never fires
Console.WriteLine(e.Current.Value);
}
这一切编译干净。
我的代码是通过简单scrp.Script(urns);
调用其中urns
仅仅是一个正在编写而成的数据库对象的阵列。没有什么幻想:
try
{
sc = scripter.Script(urns);
}
catch (Exception e)
{
WriteLog(String.Format("Failure during scripting: {0}: Inner exception message (if any): {1}",e.Message,((e.InnerException==null)?"[None]":e.InnerException.Message)));
}
using (System.IO.StreamWriter file = new System.IO.StreamWriter(fileName,true))
{
foreach(String currentLine in sc)
{
file.WriteLine(currentLine);
file.WriteLine("GO");
}
}
的问题是,不管是什么我到目前为止,当脚本过程中出现错误,我ScriptingError处理程序永远不会触发尝试。即使在VS2010中的调试模式下,当我在处理程序中设置一个断点并激活我的脚本代码,并知道会发生错误时,只会抛出一个异常,但是我的ScriptingError处理程序中的断点永远不会跳闸。
我在树上换林模式现在,不知道我做错了。我期待ScriptingError处理程序的错误吗?
我已搜查的SMO对象的MSDN文档,发现在除基本API等ScriptingError处理程序几乎没有要求自己,珍贵的几个例子在互联网上。对我而言,这似乎非常简单直接 - 只是给事件分配了一个事件处理程序 - 但还有一些我没有注意到的未包含电池的通知。
指针到我的错误是极大的赞赏,与旁人的言语中伤最小的礼仪要求,如果错误是我的一部分:)
你能给出一个例子来说明抛出的异常吗? –
好吧,它永远不会真正重要 - 无论发生什么异常,都不会触发ScriptingError事件。它通常总是一个简单的“脚本失败的服务器xxxx”,内部的例外情况如下:“属性HeaderText不适用于过程xxxxx”,另一次是“无法检索依赖关系”,这两者都可以修复不同的Scripter对象上的选项。我只是希望我的ScriptingError处理程序在发生时触发。 –