一尘不染

什么时候应该打开和关闭与SQL Server的连接

sql

我有一个简单的静态类,其中有一些方法。这些方法中的每一个都打开SqlConnection,查询数据库并关闭连接。这样,我可以确定我总是关闭与数据库的连接,但是,另一方面,我不喜欢总是打开和关闭连接。以下是我的方法的示例。

public static void AddSomething(string something)
{
    using (SqlConnection connection = new SqlConnection("..."))
    {
        connection.Open();
        // ...
        connection.Close();
    }
}

考虑到这些方法在静态类内部,我是否应该有一个包含单个SqlConnection的静态成员?我应该如何以及何时丢弃它?最佳做法是什么?


阅读 250

收藏
2021-05-05

共1个答案

一尘不染

不,SqlConnection除非必须,否则不要保持静态。线程将是一个问题,但更重要的是-
通常,您根本不需要。使用所示的代码,内部连接池意味着在大多数情况下,无论如何,只要您使用相同的连接字符串,您在后续调用中都将获得相同的基础连接。让池子做好自己的工作;不用讲代码。

这也避免了当您开始拥有两个线程时发生的问题……现在每个线程都可以在自己的连接上工作;如果使用static(假设您不使用[ThreadStatic]),则必须进行同步,从而引入延迟。更不用说重新进入(即,一个线程试图同时使用两次相同的连接)。是的;
不用讲代码。现在很好,您所做的几乎任何更改都将使它不正确。

2021-05-05