【问题标题】:SQL Connection constructor outside the using statement在 using 语句之外的 SQL Connection 构造函数
【发布时间】:2015-12-04 12:13:24
【问题描述】:

我有以下代码:

SqlConnection Connect = new SqlConnection(IST_DBConnect.SQLConnectionString);
SqlCommand command = new SqlCommand(sqlCommandString, Connect);
RequestRow Result = new RequestRow();
Connect.Open();
using (Connect)
...

这不是我的代码,我会在 using 语句中编写 SQL 连接的创建,这是我朋友的代码,如果出现问题,我不确定这是否会正确处理 SQL 连接对象构造函数或 Open 方法中的错误。所以我的问题是如果连接对象被创建并且open方法抛出异常=>连接永远不会打开,这会被正确处理吗?

谢谢。

【问题讨论】:

标签: c# .net sql-server sqlconnection


【解决方案1】:

来自documentation

通常,当您使用 IDisposable 对象时,您应该声明实例化使用语句。

您可以实例化资源对象,然后将变量传递给 using 语句,但这不是最佳做法。在这种情况下, 在控制离开 using 块后,对象仍然在范围内 尽管它可能无法再访问其不受管理的 资源。换句话说,它将不再被完全初始化。 如果 您尝试在 using 块之外使用该对象,您可能会导致 要抛出的异常。因此,通常最好 在 using 语句中实例化对象并将其范围限制为 using 块。

根据您的示例,如果Open 方法的构造函数出现问题,则using 可以做任何事情,因为您将它用作资源之后 你初始化它。

当然这是最好的方法;

using(var Connect = new SqlConnection(IST_DBConnect.SQLConnectionString))
using(var command = Connect.CreateCommand())
{
   // 
} // <-- Both Connect and command will disposed here no matter exception is thrown or not

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多