我正在创建一个分离数据库的程序。
如何查看存储过程是否已正常运行,以便我确认用户已完全完成。
我在执行过程中使用try catch
,但我不是100%肯定这会返回所有内部错误吗?
我担心的是,如果我写:
try
{
cmd.ExecuteNonQuery();
MessageBox.Show("it has finished");
}
catch (exception ex)
{
ex.ToString();
}
不可靠
我的命令:
return "sp_detach_db '" + dbType[db] + "', 'true'";
答案 0 :(得分:2)
您的原始代码很好(尝试/抓住)...您传入的字符串是您尝试做的最棘手的部分。我会看看这个答案,弄清楚命令返回0或1 ........如果返回值为1,那么你将抛出一个新的异常。
Calling stored procedure with return value
根据文档:你在RETURN_CODE之后。
Return Code Values
0 (success) or 1 (failure)
Result Sets
None
伪c#代码
using (SqlConnection conn = new SqlConnection("MyString"))
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = string.Format("sp_detach_db '{0}', 'true'", myDatabaseName); /* where myDatabaseName is a string */
cmd.CommandType = CommandType.Text;
var returnParameter = cmd.Parameters.Add("@ReturnVal", SqlDbType.Int);
returnParameter.Direction = ParameterDirection.ReturnValue;
conn.Open();
cmd.ExecuteNonQuery();
object result = returnParameter.Value;
int resultInt = Convert.ToInt32(result);
if( 0 != resultInt )
{ throw new ArgumentOutOfRangeException("detach failed");}
}
答案 1 :(得分:1)
If your stored procedure is able to raise an exception, you can catch it in your try-catch block.
create procedure MySp
as
begin
<some operation>
if @@error <> 0
begin
rollback;
raiserror('error message', 16, 1);
return -1;
end
return 0;
end
答案 2 :(得分:0)
您可以检查ExecuteNonQuery()的值,该值为受影响的行返回Int 您还可以从SQL解析Status Message以检查错误值