C# 为什么SqlConnection会忘记数据库类型

C# 为什么SqlConnection会忘记数据库类型,c#,.net,sqlconnection,C#,.net,Sqlconnection,我最近发布了一个关于SqlConnection在“ChangeDatabase”范围结束时丢失其数据库信息的问题(当我认为该问题与实际问题无关时,我立即删除了该问题)。例如: //Other code... dbConn = new SqlConnection(dbConnBuilder.ConnectionString); dbConn.Open(); dbConn.ChangeDatabase(currentDatabase); dbConn.Clos

我最近发布了一个关于SqlConnection在“ChangeDatabase”范围结束时丢失其数据库信息的问题(当我认为该问题与实际问题无关时,我立即删除了该问题)。例如:

    //Other code...
    dbConn = new SqlConnection(dbConnBuilder.ConnectionString);
    dbConn.Open();
    dbConn.ChangeDatabase(currentDatabase);
    dbConn.Close();
}
我的问题是:

  • 当您只有一个给定类型的连接时,您是否认为持有
    SqlConnection
    对象并在需要时打开和关闭它是一种不好的做法
  • 为什么
    dbConn.Database
    不记得
    currentDatabase
    在ChangeDatabase(不是变量的方法)之后“超出范围”?(见鬼,我不知道像
    ChangeDatabase
    这样的方法可以知道范围)
  • 我的连接字符串是:

    Data Source=server.name.com;Persist Security Info=True;User ID=username;Password=password
    

    谢谢各位,如果我能给你们提供更多信息,让我知道,我还在学习使用S.O.

    所以只要确保每次需要执行语句时都调用changedatabase:-)

    所以只要确保每次需要执行语句时都调用changedatabase:-)

    调用
    Close()
    会完全破坏对象,因此,您不应该在之后读取它的任何属性

    事实上,甚至应该有一个“after”,因为您不应该调用
    Close()
    。相反,使用块在
    中实例化连接,这样它将调用
    Dispose()
    ,这与
    Close()
    的作用相同,但无论您如何离开块,都保证这样做。

    调用
    Close()
    完全销毁对象,因此,您不应该在之后读取它的任何属性


    事实上,甚至应该有一个“after”,因为您不应该调用
    Close()
    。相反,使用
    块在
    中实例化连接,这样它将调用
    Dispose()
    ,这与
    Close()
    的作用相同,但无论您如何离开块,都保证这样做。

    谢谢:-)。那会有用的,不过我希望把它抽象出来,这样我就可以说:获取数据库并使用它,而不是获取、设置然后使用它。谢谢:-)。那会有用的,但我希望能把它抽象出来,这样我就可以说:获取数据库并使用它,而不是获取、设置然后使用它。那么,重建真的是唯一的方法吗?(保持SqlConnection是一种不好的方法?)。不管怎么说,保持它不变并没有什么好处,因为它有一个底层连接池。经验法则——除了一些合理的例外——是对任何实现
    IDisposable
    的东西使用
    use
    。@Cpfohl:我被你的问题弄糊涂了。如果基础连接已经是
    Close()
    d,那么保留
    SqlConnection
    对象有什么意义?如果您想实现自己的连接池(出于其他原因,这是一个坏主意),您会希望保持开放的连接,对吗?还是你想做些不同的事情?Fwiw:如果你每次关上门都会完全破坏房间之间的联系,那就太糟糕了。所以,重建确实是唯一的解决办法?(保持SqlConnection是一种不好的方法?)。不管怎么说,保持它不变并没有什么好处,因为它有一个底层连接池。经验法则——除了一些合理的例外——是对任何实现
    IDisposable
    的东西使用
    use
    。@Cpfohl:我被你的问题弄糊涂了。如果基础连接已经是
    Close()
    d,那么保留
    SqlConnection
    对象有什么意义?如果您想实现自己的连接池(出于其他原因,这是一个坏主意),您会希望保持开放的连接,对吗?还是你想做些不同的事情?Fwiw:如果你每次关上门都会完全破坏房间之间的联系,那就太糟糕了。