在C#应用程序中,是应该创建一次DB连接,还是每次执行SQL语句?

时间:2010-08-11 13:21:52

标签: c# winforms oledbconnection

在C#应用程序中,应该创建一次OleDBConnection,还是每次执行SQL语句?

我正在查看其他人编写的C#代码。每个SQL语句都先创建一个OleDbConnection对象,其连接字符串指向MDB数据库。

每次创建OleDbConnection对象是否合适,或者应该在应用程序的开头创建对象并从那时开始使用。

5 个答案:

答案 0 :(得分:7)

根据Best Practices for Using ADO.NET

  

高性能应用程序保持   与正在使用的数据源的连接   在最短的时间内也是如此   利用表现   增强技术如   连接池......

答案 1 :(得分:6)

假设您的数据库可以使用连接池,那么您可能希望为每次调用数据库打开和关闭连接。这允许您仅在需要时才使用数据库连接的有限资源,然后将其返回到池中,以便在您完成调用后立即使用其他调用者。如果你坚持连接,你很快就会耗尽有限资源,即数据库的总可用连接,因此严重阻碍了应用程序的可伸缩性和性能。

我通常使用using语句来确保连接在使用后关闭 - 见下文:

  using (ODBCConnection c = new ODBCConnection(ConnectionString))
  {
    c.Command.CommandType = CommandType.Text;
    // make a call
  }

享受!

答案 2 :(得分:3)

这取决于具体情况。

如果你要连续执行多个语句,那么你最好先打开它一次,执行所有语句,然后关闭它,

如果您在程序启动时询问是否打开连接并保持打开状态,直到程序关闭而不管发生了什么,那么没有。一旦完成它就关闭它。最好不要挂断连接。

人们似乎永远不会想到的另一个因素是维护程序员在以后进行转换,他必须跟踪代码并跟踪连接打开的位置以及何时关闭。例如,假设您有一个访问数据库的程序,然后分支到其他几个函数,每个函数都需要连接。跟踪代码中的东西是一场噩梦。

然后,这个因素仍然是正常运行和性能的次要因素,但仍然需要在复杂的应用程序中考虑。

主要因素是它如何影响性能与保持连接开放的关系。你需要在每种情况下做出决定。

答案 3 :(得分:1)

只有在直接在数据库上执行活动时,才能打开与数据库的连接。在应用程序执行其他活动时维护与数据库的开放连接可能会阻止其他用户在连接池达到其限制时访问数据库。

如果您在客户端PC上执行了CPU密集型功能,那么在关闭连接后应该执行此任务,这样就不会占用连接。

但是,如果要执行一系列数据库功能,可以通过在单个打开的连接中一起完成这些功能来提高客户端的性能。

答案 4 :(得分:0)

每次需要db中的内容时都应该打开一个连接,然后关闭它。留下连接池以确定何时物理关闭连接。