我有以下代码:
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方法抛出异常=>连接永远不会打开,这是否会妥善处理?
感谢。
答案 0 :(得分:4)
通常,当您使用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