回归基础。
我有一个用c#编写的应用程序,我使用sqlClient连接数据库。
我有几种方法,我通常在try catch块中打开连接
try{
**open connection**
//Mehod1()
//Method2()
........
}catch(exception){
//Do something
}finally{
**close connection**
}
问题是池中有很多连接。
我正在使用母版页并在母版页中我从数据库加载菜单(每个用户的不同菜单)。
然后在主页面中,我再次打开一个连接以获取其余数据。
在页面中间,它可能是一种需要再次连接到数据库的方法。
我的问题是
这是一个好习惯吗?
我做错了吗?
避免多重连接是否有更好的做法? 单身模式怎么样?
提前致谢
解
我找到了原因!!!
我忘了关闭连接。
我确信我关闭了它,但是 有时你不能这么肯定。
感谢大家的回复
答案 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
<强>更新强>
您可以在此处找到有关此方法的更多信息:Close,Dispose
基本上区别在于方法Dispose()
称为方法Close()
,但在清理某些资源并从池details here中删除连接之前。
正如您所看到Dispose()
比Close()
做的更多。因此,如果您以后要重用连接,请使用方法Close()
,如果不使用方法Dispose()
完全销毁,如果您使用上述语法则会自动调用该方法。
答案 2 :(得分:0)
如上所述使用()是一个很好的方法来新建一个实现IDisposable的类的新对象。但话说回来,一旦完成,就不能让你保持联系。您在池中具有有限数量的连接,并且保持未闭合的连接可能会使正在等待活动连接的其他SPID饿死,这将最终超时。所以你应该
Microsoft Enterprise Library中有DAAB(数据访问应用程序块),可用作帮助程序打开和关闭连接+轻松执行许多其他与数据库相关的任务。这里是 http://msdn.microsoft.com/en-us/library/cc511547.aspx