加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如果在“using”语句中使用try / catch,是否会处置一次性

发布时间:2020-12-15 23:23:46 所属栏目:百科 来源:网络整理
导读:我正在使用SqlConnection和SqlCommand. 例如,如果有任何SqlException,我必须捕获异常. 我正在使用using子句并在其中嵌入try / catch块.这是代码: public static void LogError(string error,string message){ using (SqlConnection conn = new SqlConnectio
我正在使用SqlConnection和SqlCommand.

例如,如果有任何SqlException,我必须捕获异常.

我正在使用using子句并在其中嵌入try / catch块.这是代码:

public static void LogError(string error,string message)
{
    using (SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["connStringWeb"]))
    using (SqlCommand cmd = new SqlCommand("INSERT INTO errorLogTable (errorTime,errorType,error) VALUES(@errorTime,@errorText,@errorMsg)"))
    {
        cmd.CommandTimeout = 300;
        cmd.Connection = conn;
        cmd.Prepare();
        cmd.Parameters.AddWithValue("@errorTime",DateTime.Now);
        cmd.Parameters.AddWithValue("@errorText",error);
        cmd.Parameters.AddWithValue("@errorMsg",message);

        try
        {
           conn.Open();
           int i = cmd.ExecuteNonQuery();
        }
        catch { }
        }
   }
}

我的问题是,我的SqlConnection和SqlCommand是否会在异常的情况下被处理掉,这是一个很好的方法来处理它,或者我应该只使用try / catch / finally块的旧时尚方法?

解决方法

在您的情况下,异常会在使用中被捕获,并且在您离开using块时执行dispose.

但即使你将try块放在try catch之外并抛出异常,也会调用dispose.

public static void LogError(string error,string message)
{
    try
    {
        using (SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["connStringWeb"]))
            using (SqlCommand cmd = new SqlCommand("INSERT INTO errorLogTable (errorTime,@errorMsg)"))
            {
                cmd.CommandTimeout = 300;
                cmd.Connection = conn;
                cmd.Prepare();
                cmd.Parameters.AddWithValue("@errorTime",DateTime.Now);
                cmd.Parameters.AddWithValue("@errorText",error);
                cmd.Parameters.AddWithValue("@errorMsg",message);

                conn.Open();
                int i = cmd.ExecuteNonQuery();
            }
    }
    catch {}
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读