如何从C#启动sqlcmd时检索错误?

时间:2008-09-16 14:39:50

标签: c# sql-server

我需要从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表示失败(即缺少参数,存储过程不存在等等)。

如何自定义这些返回代码?

小时。

3 个答案:

答案 0 :(得分: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))

这样我就可以捕获特定错误,并记录命令的所有输出,以防我遇到意外错误。

答案 1 :(得分:1)

如果您尝试从c#调用存储过程,则需要使用ADO.Net而不是通过命令行调用sqlcmd。查看SqlConnection命名空间中的SqlCommandSystem.Data.SqlClient

通过SqlCommand调用存储过程后,您将能够捕获存储过程引发的异常,并在需要时读取过程的返回值。

答案 2 :(得分:0)

即使使用Windows身份验证,您仍然可以使用SqlCommandSqlConnection来执行,并且您不必重新发明轮子以进行异常处理。

简单的连接配置和单个SqlCommand可以毫无问题地执行它。