应该如何调用应用程序中的SQL连接?

时间:2010-08-24 14:24:00

标签: c# asp.net sql

回归基础。

我有一个用c#编写的应用程序,我使用sqlClient连接数据库。

我有几种方法,我通常在try catch块中打开连接

try{
    **open connection**
   //Mehod1()
   //Method2()
   ........
 }catch(exception){
   //Do something
 }finally{
  **close connection**
 }

问题是池中有很多连接。

我正在使用母版页并在母版页中我从数据库加载菜单(每个用户的不同菜单)。

然后在主页面中,我再次打开一个连接以获取其余数据。

在页面中间,它可能是一种需要再次连接到数据库的方法。

我的问题是

这是一个好习惯吗?

我做错了吗?

避免多重连接是否有更好的做法? 单身模式怎么样?

提前致谢

  

     

我找到了原因!!!

     

我忘了关闭连接。

     

我确信我关闭了它,但是   有时你不能这么肯定。

感谢大家的回复

3 个答案:

答案 0 :(得分:3)

由于连接是汇集的,因此您无需在不同的方法中“重用”它。

我使用以下代码:

using(SqlConnection connection = new SqlConnection("your-connectionstring"))
{
  // Do your stuff here...
}

Using只是撰写try-catch-finally的简便方法。它用于一次性物品。

这可以用于每种方法。

编辑:使用池中的连接也不会影响性能。无论如何,所有连接信息都被缓存。所以只需在原子级别上使用SqlConnection。

以更通用的方式处理ConenctionString是一件好事......

答案 1 :(得分:0)

可能你没有丢弃你的SqlConnections 试试这个:

using (SqlConnection connection = new SqlConnection(connectionString))
{ }

此语法将自动为您调用方法Dispose()Using statement details here

<强>更新

您可以在此处找到有关此方法的更多信息:CloseDispose

基本上区别在于方法Dispose()称为方法Close(),但在清理某些资源并从池details here中删除连接之前。

正如您所看到Dispose()Close()做的更多。因此,如果您以后要重用连接,请使用方法Close(),如果不使用方法Dispose()完全销毁,如果您使用上述语法则会自动调用该方法。

答案 2 :(得分:0)

如上所述使用()是一个很好的方法来新建一个实现IDisposable的类的新对象。但话说回来,一旦完成,就不能让你保持联系。您在池中具有有限数量的连接,并且保持未闭合的连接可能会使正在等待活动连接的其他SPID饿死,这将最终超时。所以你应该

  1. 始终拥有原子和小型交易。
  2. 完成后关闭。
  3. Microsoft Enterprise Library中有DAAB(​​数据访问应用程序块),可用作帮助程序打开和关闭连接+轻松执行许多其他与数据库相关的任务。这里是 http://msdn.microsoft.com/en-us/library/cc511547.aspx