我可以找到C#的using
直接在使用括号内实例化的所有在线示例:
using (var cnx = new SqlConnection()) { }
我认为以下内容应该完全相同,但我似乎仍然锁定了资源:
SqlConnection GetConnection() { return new SqlConnection(); }
void foo()
{
using (var cnx = GetConnection()) { }
}
当我单步执行我的程序并进入使用的右大括号后面的行时,我希望能够以任何方式使用SQL Server Management Studio更改数据库,但我不能。当我关闭我的应用程序时,错误就会消失。
这不是隔离到SQL;我也通过这种方式打开文件流来体验这一点。即:超过using
块,但操作系统不允许外部应用程序更改文件。
我是否违反了using
合同的某些部分?
答案 0 :(得分:5)
使用返回适当资源的方法绝对没问题。特别是,这很常见:
using (var writer = File.CreateText(path))
{
}
(和File
中的类似方法)。
基本上,这与调用方法或调用构造函数无关 - 必定存在其他错误。如果您可以创建一个简短但完整的程序来演示问题(理想情况下使用文件而不是数据库),那么我们很可能能够帮助您找出是的内容问题,而不仅仅是什么:)
答案 1 :(得分:3)
如果启用了连接池,则“Dispose”不一定会在物理上关闭连接。
答案 2 :(得分:0)
我一直在使用那种代码:
SqlConnection GetConnection()
{
return new SqlConnection();
}
void foo()
{
using (var cnx = GetConnection())
{
cnx.Open();
}
}
如果你真的想确定,请在结束时调用cnx.Close();
。但是,在我的情况下,由于对Dispose
的调用会自动关闭连接,因此这是不必要的。