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 {} } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |