从C#启动sqlcmd时如何检索错误?
时间:2020-03-05 18:56:09 来源:igfitidea点击:
我需要从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(表示失败)(即缺少参数,存储的proc不存在等)。
如何自定义这些返回码?
H。
解决方案
回答
如果尝试从c调用存储过程,则需要使用ADO.Net,而不是通过命令行调用sqlcmd。查看System.Data.SqlClient名称空间中的SqlConnection和SqlCommand。
通过SqlCommand调用存储过程后,我们将能够捕获该存储过程引发的异常,并且如果需要的话,我们也会读取该过程的返回值。
回答
我有一个小型的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))
这样,我可以捕获特定的错误,并在遇到意外错误的情况下记录命令的所有输出。
回答
即使使用Windows身份验证,我们仍然可以使用SqlCommand和SqlConnection来执行,并且不必重新发明轮子来进行异常处理。
一个简单的连接配置和一个SqlCommand
就可以毫无问题地执行它。