我有一个简单的静态类,其中有一些方法。这些方法中的每一个都打开SqlConnection,查询数据库并关闭连接。这样,我可以确定我总是关闭与数据库的连接,但是,另一方面,我不喜欢总是打开和关闭连接。以下是我的方法的示例。
public static void AddSomething(string something) { using (SqlConnection connection = new SqlConnection("...")) { connection.Open(); // ... connection.Close(); } }
考虑到这些方法在静态类内部,我是否应该有一个包含单个SqlConnection的静态成员?我应该如何以及何时丢弃它?最佳做法是什么?
不,SqlConnection除非必须,否则不要保持静态。线程将是一个问题,但更重要的是- 通常,您根本不需要。使用所示的代码,内部连接池意味着在大多数情况下,无论如何,只要您使用相同的连接字符串,您在后续调用中都将获得相同的基础连接。让池子做好自己的工作;不用讲代码。
SqlConnection
这也避免了当您开始拥有两个线程时发生的问题……现在每个线程都可以在自己的连接上工作;如果使用static(假设您不使用[ThreadStatic]),则必须进行同步,从而引入延迟。更不用说重新进入(即,一个线程试图同时使用两次相同的连接)。是的; 不用讲代码。现在很好,您所做的几乎任何更改都将使它不正确。
[ThreadStatic]