Mar*_*tin 37 .net c# sql data-binding sqlconnection
我有一个简单的静态类,其中包含一些方法.每个方法都打开一个SqlConnection,查询数据库并关闭连接.这样,我确信我总是关闭与数据库的连接,但另一方面,我不喜欢总是打开和关闭连接.下面是我的方法的示例.
public static void AddSomething(string something)
{
using (SqlConnection connection = new SqlConnection("..."))
{
connection.Open();
// ...
connection.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
考虑到方法在静态类中,我是否应该有一个包含单个SqlConnection的静态成员?我该如何以及何时放弃它?什么是最佳做法?
Mar*_*ell 46
不,SqlConnection
除非必须,否则不要保持静止.线程是一个问题,但更重要的是 - 通常你根本不需要.使用您提供的代码,内部连接池意味着大多数情况下您将在后续调用中获得相同的底层连接(只要您使用相同的连接字符串).让小伙子做好自己的工作; 保持代码单独.
这也避免了当你开始有两个线程时会发生什么问题...现在每个线程都可以在自己的连接上工作; 使用静态(假设您不使用[ThreadStatic]
),您必须同步,引入延迟.更不用说重入(即单个线程试图同时使用两次相同的连接).对; 保持代码单独.它现在很好,几乎你所做的任何改变都会让它变得不好.
Jon*_*ker 20
因为当您调用Open()和Close()时,SqlConnection具有连接池,您实际上并不打开和关闭与服务器的物理连接.您只是从可用连接池中添加/删除连接.因此,尽可能晚地打开连接并在执行命令后尽早关闭连接是一种良好且最佳的做法.