C#.NET使用块
我想在DAL层中使用“using”块。像C#.NET使用块,c#,using-statement,C#,Using Statement,我想在DAL层中使用“using”块。像 using (SqlConnection con = new SqlConnection("connection string")) { Command object Reader object } 由于中的SqlConnection对象在using块中初始化,我知道当控件退出using块作用域时,该连接对象将被自动处理 但我正在使用块内部创建命令和读取器对象。我必须显式关闭它们还是必须为它们编写另一个“使用”块。您可以为实现IDi
using (SqlConnection con = new SqlConnection("connection string"))
{
Command object
Reader object
}
由于中的SqlConnection对象在using块中初始化,我知道当控件退出using块作用域时,该连接对象将被自动处理
但我正在使用块内部创建命令和读取器对象。我必须显式关闭它们还是必须为它们编写另一个“使用”块。您可以为实现
IDispose
的任何项目使用块。因此,您可以在用于连接的块内,使用
块为其中的每一个创建嵌套的,以确保它们在使用后得到正确处理。您也应该将使用
用于命令和读卡器,或者显式关闭它们
我通常是这样编码的:
var sql = "SELECT * FROM table";
using (var cn = new SqlConnection(connectionString))
using (var cmd = new SqlCommand(sql, cn)) {
}
这限制了标识的数量。您通常也使用块来编写标识,即
using (SqlConnection con = new SqlConnection("connection string"))
{
con.Open();
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandText = "select * from table";
using (SqlDataReader reader = cmd.ExecuteReader())
{
...
}
}
}
值得为任何支持IDisposable接口的代码编写一个using块。通过这种方式,您可以确保您已经尽了最大努力来释放任何稀缺资源。如果您不喜欢为您的连接和读卡器使用using()
或finally
块。对于读卡器,在读卡器关闭之前,连接不会关闭。我还读到,using()
并不能100%保证连接会关闭,但我不知道这背后的原因,因为它被转换为try-finally块,并将在任何情况下执行。不确定。但不需要再编写一个“using”块。在块作用域覆盖对象之后:命令和读取器将被释放。@Pratik,只有使用(…)显式放入中的对象实际被释放。
括号。这里,将不处理命令和读取器。