gpt4 book ai didi

c# - 如果在 "using"语句中使用try/catch,一次性资源会被释放吗?

转载 作者:太空狗 更新时间:2023-10-30 00:24:07 25 4
gpt4 key购买 nike

我正在使用 SqlConnectionSqlCommand

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

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

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 { }
}
}
}

我的问题是,如果出现异常,我的 SqlConnectionSqlCommand 会被处理吗?这是处理它的好方法,还是我应该简单地使用旧的时尚方法使用 try/catch/finally block ?

最佳答案

using 语句只是 try/finally block 的语法快捷方式。所以是的,using 中的对象将在抛出异常的情况下被释放。换句话说:

using(var foo = new Foo())
{
}

基本上编译成:

Foo foo;

try
{
foo = new Foo();
}
finally
{
foo.Dispose();
}

关于c# - 如果在 "using"语句中使用try/catch,一次性资源会被释放吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29703436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com