我有以下代码:
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方法抛出异常=>连接从未打开,是否可以正确处理?
谢谢。
来自文件 ;
通常,使用IDisposable对象时,应在 using语句中声明并 实例化它。
和
您可以实例化资源对象,然后将变量传递给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