我正在像SQL这样对SQL Server执行数据库访问方法
using (SqlConnection con = new SqlConnection(//connection string)
{
using (SqlCommand cmd = new SqlCommand(storedProcname, con))
{
try{
con.open();
//data reader code
}
catch
{
}
}
}
我是否需要关闭或处理SqlCommand,或者using语句是否会为我处理?我只是不想挂开连接 感谢
答案 0 :(得分:57)
using
将为您处理。在幕后,SqlConnection.Dispose()
调用SqlConnection.Close()
方法,SqlCommand.Dispose()
调用SqlCommand.Close()
。
作为附加背景,using
语句是try ... finally
的语法糖,用于在IDisposable
中处置finally
对象。
答案 1 :(得分:12)
顺便说一句,您可以使代码更简洁,更易读,如下所示:
using (SqlConnection con = new SqlConnection(/*connection string*/))
using (SqlCommand cmd = new SqlCommand(storedProcname, con))
{
//...
}
答案 2 :(得分:4)
正如菲尔所说,使用条款将为您处理。在编译时,它将连接创建包装在try .. finally中并将连接处理调用放在finally中。
有关详细信息,请参阅using statement article at msdn。
答案 3 :(得分:3)
是的,您的代码将关闭连接,但这通常意味着释放回连接池以便以后真正关闭。
如果您执行此代码片段,然后执行sp_who并观察您的连接仍然存在,那就是原因。
如果你绝对需要真正关闭连接(边缘情况要确定),那么使用ClearAllPools sqlConnection的静态方法
答案 4 :(得分:2)
Using
关键字会自动关闭您的连接
所以你不必担心每次都在调用connection.close()
。
答案 5 :(得分:1)
当范围
时using (SqlConnection con = new SqlConnection(//connection string)
{
}
将结束,连接将由运行时自动处理。所以不要担心
答案 6 :(得分:0)
我认为SqlCommand不需要“使用”。对于SqlConnection,“使用”本身就可以完成这项工作。 实际上,您的连接已提交到连接池。