using语句之外的SQL Connection构造函数

时间:2015-12-04 12:13:24

标签: c# .net sql-server sqlconnection

我有以下代码:

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

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

感谢。

1 个答案:

答案 0 :(得分:4)

来自documentation;

  

通常,当您使用IDisposable对象时,您应该声明和   实例化 一个使用声明。

  

您可以实例化资源对象,然后将变量传递给   使用声明,,但这不是最佳做法。在这种情况下,   控件离开使用块后,对象仍然在范围内   虽然它可能不再能够访问它的非托管   资源。换句话说,它将不再完全初始化。 如果   你试图使用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