using SqlConnection.Open inside using () {} block?
本文关键字:using block SqlConnection Open inside | 更新日期: 2023-09-27 18:30:37
我需要在里面使用SqlConnection.Open()
吗:
using (SqlConnection var = new SqlConnection())
{
//my operations
}
?
如果我不通过SqlConnection.Close()
函数释放此连接,会发生什么情况?
是的,您需要在using
块内Open
连接。
如果您没有显式Close()
连接,则using
块的末尾将在 using 释放连接时为您执行此操作。当连接被释放时,它会自动关闭。
using
语句只是语法糖,它确保无论如何都会在IDisposable
实例上调用Dispose
,因此在您的情况下,using (SqlConnection connection = new SqlConnection())
大致等同于(根据 MSDN):
SqlConnection connection = new SqlConnection();
try
{
// Operations.
}
finally
{
if (connection != null)
{
connection.Dispose();
}
}
在SqlConnection
Dispose
和Close
调用的情况下实际上是等效的,因此对Close
的调用在using (SqlConnection)
块中是多余的。
另一方面,在许多情况下,调用Open
仍然是必要的(例如,在调用ExecuteReader
、ExecuteScalar
、ExecuteNonQuery
之前)。using
语句对是否需要显式打开连接没有影响 - 仅对是否需要显式关闭连接没有影响。
提供方便的语法,确保正确使用 可识别的对象
using
在内部实现 IDisposable
using(SqlConnection con=new SqlConnection("myCOnstr"))
{
con.open();
using(SqlCommand con=new SqlCommand("myCmd",con))
{
//......Insert/Update /Delete
}
}