C# 当释放命令并且直接在命令上定义连接时,连接是否关闭?
我知道有很多例子,其中定义了SqlConnection,然后定义了SqlCommand,这两种方法都是使用块:C# 当释放命令并且直接在命令上定义连接时,连接是否关闭?,c#,using,using-statement,C#,Using,Using Statement,我知道有很多例子,其中定义了SqlConnection,然后定义了SqlCommand,这两种方法都是使用块: using (var conn = new SqlConnection(connString)) { using (var cmd = new SqlCommand()) { cmd.Connection = conn; //open the connection } } 我的问题:如果我直接在SqlCommand上定义连接,那
using (var conn = new SqlConnection(connString)) {
using (var cmd = new SqlCommand()) {
cmd.Connection = conn;
//open the connection
}
}
我的问题:如果我直接在SqlCommand上定义连接,那么在释放该命令时连接是否关闭
using (var cmd = new SqlCommand()) {
cmd.Connection = new SqlConnection(connString);
//open the connection
}
否,SqlCommand从不尝试关闭/释放连接。否,除非您显式地释放连接对象,否则不会释放连接对象。但我的建议是尽可能使用使用块。它不会关闭连接,您需要自己关闭它或将它放在自己的using station中 这里还有一个技巧,可以让您的
使用块更具可读性:
using (var conn = new SqlConnection(connString))
using (var cmd = new SqlCommand())
{
cmd.Connection = conn;
}
@米洛特
但我的建议是尽可能使用块
使用块很好,但在处理不可标识的对象时没有用,因此如果在任何地方使用块,这可能会令人困惑
要小心,因为如果对象没有实现IDisposable,它们可能不会被处置
希望这有帮助。非常好,安德鲁,我以前从未见过这种组合。我得试一下。我总是嵌套多个“使用块”,这有时会使代码更难阅读。IMO,这会降低代码的可读性。我不介意丢失大括号和嵌套,尤其是当sloppier JR开始使用东西时。嗯,我认为编译器不会允许你使用“使用”不实现IDisposable的对象的块。我模模糊糊地记得上一次尝试编译时出现了一个编译错误,那是几年前的事了。使用块很好,但是在处理不可IDisposable对象时没有用
,你不能对不可IDisposable对象使用使用
。