SQL 서버 관리 객체 (SMO)와 함께 꽤 기본적인 스크립팅 유틸리티를 작성하는 SQL Server 2008 R2/64 비트 데이터베이스 서버가 있습니다. 내 프로젝트는 C#으로 작성된 32 비트 VS2010 실행 파일입니다.SqlServer SMO Scripting.ScriptingError 이벤트 처리기가 실행되지 않음
대부분의 노력은 상당히 간단하고 성공적이었습니다. 유일한 문제는 스크립팅 오류에 대한 응답으로 호출해야하는 내 사용자 지정 이벤트 처리기가 실행되는 것입니다.
//srv contains a valid server name
Scripter scrp = new Scripter(srv);
//scrp_ScriptingError is my handler
scrp.ScriptingError += new ScriptingErrorEventHandler(scrp_ScriptingError);
내 핸들러가 thusly 히 선언 :
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);
}
이 모든 깨끗하게 컴파일
Scripter
목적은 내가 thusly 히 활용하는 시도 가지고 ScriptingError
이벤트를 노출합니다.
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 처리기의 중단 점은 절대로 실행되지 않습니다.
나는 지금 for-forest 모드입니다. 내가 잘못했는지 확실하지 않습니다. ScriptingError 핸들러에 잘못된 것을 기대하고 있습니까?
SMO 개체에 대한 MSDN 문서를 검색하여 기본 API 이외의 ScriptingError 처리기에서 거의 아무것도 발견하지 못했고 인터넷에서 몇 가지 귀중한 사례를 발견했습니다. 엄청나게 간단하고 직설적 인 것처럼 보입니다. 이벤트에 이벤트 핸들러를 할당하는 것만으로 배터리 부족 알림이 있습니다. 오류가 나는 PC의 오른쪽에 아닙니다 :)
던져지는 종류의 예외에 대한 예를들 수 있습니까? –
글쎄, 그것은 정말로 중요하지 않습니다 - 어떤 예외가 발생하더라도 ScriptingError 이벤트는 발생하지 않습니다. 일반적으로 항상 "스크립트 xxxx 서버에 대한 실패", 내부 예외가있는 : "프로퍼티 HeaderText는 프로 시저 xxxxx에 사용할 수 없습니다", 다른 시간은 "의존성을 검색 할 수 없습니다", 둘 다 다른 것으로 고칠 수있는 Scripter 개체의 옵션 방금 ScriptingError 처리기가 발생할 때 발생시키는 것으로 예상했습니다. –