C#Window Forms和SQL连接实例的最佳实践是什么。我需要在所有窗口表单中使用相同的SQL连接。什么是最佳实施方法?我在哪里放置SQL连接?
我正在使用Compact framework 3.5。
答案 0 :(得分:9)
我个人更喜欢将连接管理留给ADO.NET connection pool,每次我想查询:
using (var conn = new SqlConnection("connection string"))
using (var cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "SELECT id FROM foo;";
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
// ...
}
}
}
当您调用conn.Open()
时,未打开物理连接,它将从连接池中提取,当使用块结束并调用.Dispose
时,连接未关闭但返回到连接池为了重用。这样可以提高性能并使我免于担心在应用程序中放置或存储这些SqlConnection实例的位置。
答案 1 :(得分:4)
您说您需要在所有表单中使用相同的连接,但我认为您不应该认为这是公理化的。您可能需要以所有形式连接到相同的数据库,但这不是一回事 - 除了您需要使用相同的连接向Web服务发出多个请求之外。
我强烈建议三件事:
一般来说,数据库访问应该是(从调用者的角度来看):“打开连接,做工作,关闭发生的任何事情”(根据Darin的回答)。让.NET的连接池处理与数据库的物理连接。您如何构建您的代码将取决于您的要求,以及它们在不同表单之间的差异程度。在许多情况下,您可能只需要让您的数据库访问类使用一组特定的参数为您执行查询并返回结果 - 在其他情况下您可能需要更精细的控制。
答案 2 :(得分:3)
正如季米特洛夫所说,一个好方法是只在需要时打开和关闭连接,并保持开放时间最短。 .NET连接池将为您处理此问题,因此将以透明的方式重用连接。
一般来说,一个好的方法是让另一个类库作为数据访问层,它包含对数据库的调用,不会向UI公开任何连接或命令用法,因此将来您将能够移动到另一个数据库引擎,最终只更改DAL。
来自DAL和UI的通信应仅包含对象(实体)或简单项目DataTables和DataSet。在大多数情况下,第三个项目(类库)位于中间,它被称为业务逻辑,这样的级别操纵来自DAL的数据,并应用特定于应用程序的业务逻辑,将更清晰或精细的结果返回给UI。
自从大约11年以来,我已经在许多项目中使用过这种方法。
答案 3 :(得分:1)
您应该使用连接逻辑创建一个类。