我需要从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表示失败(即缺少参数,存储过程不存在等等)。
如何自定义这些返回代码?
小时。
答案 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
命名空间中的SqlCommand
和System.Data.SqlClient
。
通过SqlCommand
调用存储过程后,您将能够捕获存储过程引发的异常,并在需要时读取过程的返回值。
答案 2 :(得分:0)
即使使用Windows身份验证,您仍然可以使用SqlCommand
和SqlConnection
来执行,并且您不必重新发明轮子以进行异常处理。
简单的连接配置和单个SqlCommand
可以毫无问题地执行它。