如何查看SQL查询是否正确执行且没有错误?

时间:2017-04-13 14:42:36

标签: c# sql-server

我正在创建一个分离数据库的程序。

如何查看存储过程是否已正常运行,以便我确认用户已完全完成。

我在执行过程中使用try catch,但我不是100%肯定这会返回所有内部错误吗?

我担心的是,如果我写:

try
{
    cmd.ExecuteNonQuery();
    MessageBox.Show("it has finished");
}
catch (exception ex)
{
ex.ToString();
}

不可靠

我的命令:

 return "sp_detach_db '" + dbType[db] + "', 'true'";

3 个答案:

答案 0 :(得分:2)

您的原始代码很好(尝试/抓住)...您传入的字符串是您尝试做的最棘手的部分。我会看看这个答案,弄清楚命令返回0或1 ........如果返回值为1,那么你将抛出一个新的异常。

Calling stored procedure with return value

根据文档:你在RETURN_CODE之后。

https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-detach-db-transact-sql

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以检查错误值