2012-10-16 1 views
0

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의 오른쪽에 아닙니다 :)

+0

던져지는 종류의 예외에 대한 예를들 수 있습니까? –

+0

글쎄, 그것은 정말로 중요하지 않습니다 - 어떤 예외가 발생하더라도 ScriptingError 이벤트는 발생하지 않습니다. 일반적으로 항상 "스크립트 xxxx 서버에 대한 실패", 내부 예외가있는 : "프로퍼티 HeaderText는 프로 시저 xxxxx에 사용할 수 없습니다", 다른 시간은 "의존성을 검색 할 수 없습니다", 둘 다 다른 것으로 고칠 수있는 Scripter 개체의 옵션 방금 ScriptingError 처리기가 발생할 때 발생시키는 것으로 예상했습니다. –

답변

2

알고 내 인생에 매우 바보 같은 경우 내 오류

포인터는 크게 최소한의 brickbats에 대한 정중 한 요청, 감사합니다,하지만 난 당신이 시도해야한다고 생각 ContinueScriptingOnError 옵션을 설정하십시오. 그렇지 않으면 SMO가 이벤트를 호출 할 이유가 없으며 대신 예외를 통해 수행됩니다.

+0

그건 내가 생각한 것이지만,이 옵션을 true/false로 설정하면 아무런 효과가 없습니다. 그럼에도 불구하고 답변을 제공하는 시간을내어 주셔서 감사합니다! –

+0

글쎄, 젠체하는, 어둠 속에서 그걸로 다시 시도해, 나는 그것을 거짓으로 변경, 재 컴파일, 여전히 작동하지 않았고, 사실로 되돌려 놓았다. *한숨*. 행복한 해답을드립니다! :) –