2008-09-16 19 views
2

我需要從C#應用程序運行存儲過程。如何從C#啓動sqlcmd時檢索錯誤?

我用下面的代碼可以這樣做:

Process sqlcmdCall = new Process(); 
sqlcmdCall.StartInfo.FileName = "sqlcmd.exe"; 
sqlcmdCall.StartInfo.Arguments = "-S localhost\\SQLEXPRESS -d some_db -Q \":EXIT(sp_test)\"" 
sqlcmdCall.Start(); 
sqlcmdCall.WaitForExit(); 

從sqlcmdCall對象調用完成後,我目前得到的-100一的ExitCode成功和1失敗(即缺少參數,存儲proc不存在,等等......)。

如何定製這些返回碼?

H.

回答

1

如果你試圖調用從C#中的存儲過程,你會想用ADO.Net,而不是通過命令行SQLCMD調用的。在System.Data.SqlClient命名空間中查看SqlConnectionSqlCommand

一旦通過SqlCommand調用存儲過程,您將能夠捕獲存儲過程引發的異常,並且如果需要的話我們可以讀取過程的返回值。

2

我有一個小VB.Net應用程序執行系統命令。要捕獲錯誤或成功的條件我定義正則表達式匹配的命令輸出的錯誤文本,我捕捉到這樣的輸出:

 myprocess.Start() 
     procReader = myprocess.StandardOutput() 

     While (Not procReader.EndOfStream) 
      procLine = procReader.ReadLine() 

      If (MatchesRegEx(errRegEx, procLine)) Then 
       writeDebug("Error reg ex: [" + errorRegEx + "] has matched: [" + procLine + "] setting hasError to true.") 

       Me.hasError = True 
      End If 

      writeLog(procLine) 
     End While 

     procReader.Close() 

     myprocess.WaitForExit(CInt(waitTime)) 

這樣我可以捕獲特定的錯誤,也記錄了該命令的所有輸出如果我遇到意外的錯誤。

0

即使使用Windows身份驗證,仍然可以使用SqlCommandSqlConnection執行,並且您不必重新發明輪子以進行異常處理。

一個簡單的連接配置和一個SqlCommand可以執行它沒有問題。