Как получить ошибку при запуске sqlcmd из C #? - PullRequest
2 голосов
/ 16 сентября 2008

Мне нужно запустить хранимую процедуру из приложения C #.

Для этого я использую следующий код:

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 после завершения вызова в настоящее время я получаю ExitCode, равный -100 для успеха и 1 для сбоя (т.е. отсутствует параметр, сохраненный процесс не существует и т. Д.)

Как мне настроить эти коды возврата?

H.

Ответы [ 3 ]

2 голосов
/ 16 сентября 2008

У меня есть небольшое приложение 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))

Таким образом, я могу зафиксировать определенные ошибки, а также записать все выходные данные команды на случай непредвиденной ошибки.

1 голос
/ 16 сентября 2008

Если вы пытаетесь вызвать хранимую процедуру из c #, вам следует использовать ADO.Net вместо вызова sqlcmd из командной строки. Посмотрите на SqlConnection и SqlCommand в пространстве имен System.Data.SqlClient.

Как только вы вызовете хранимую процедуру через SqlCommand, вы сможете перехватить исключение, вызванное хранимой процедурой, а также, если потребуется, мы читаем возвращаемое значение процедуры.

0 голосов
/ 17 сентября 2008

Даже при аутентификации Windows вы все равно можете использовать SqlCommand и SqlConnection для выполнения, и вам не нужно заново изобретать колесо для обработки исключений.

Простая конфигурация соединения и один SqlCommand могут выполнить его без проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...