C#using:构造函数以不同的方法

时间:2013-02-13 16:01:36

标签: c# using

我可以找到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合同的某些部分?

3 个答案:

答案 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的调用会自动关闭连接,因此这是不必要的。