C# 应用程序中的SQL连接应该如何调用?
回到基本点 我有一个用c#编写的应用程序,我正在使用sqlClient连接到数据库 我有几种方法,通常在try-catch块中打开连接C# 应用程序中的SQL连接应该如何调用?,c#,asp.net,sql,C#,Asp.net,Sql,回到基本点 我有一个用c#编写的应用程序,我正在使用sqlClient连接到数据库 我有几种方法,通常在try-catch块中打开连接 try{ **open connection** //Mehod1() //Method2() ........ }catch(exception){ //Do something }finally{ **close connection** } 问题是池中有很多连接。 我使用母版页,在母版页中,我从数据库加载菜单(每
try{
**open connection**
//Mehod1()
//Method2()
........
}catch(exception){
//Do something
}finally{
**close connection**
}
问题是池中有很多连接。
我使用母版页,在母版页中,我从数据库加载菜单(每个用户的菜单不同)
然后在主页中,我再次打开一个连接以获取其余数据
在页面中间,它可能是一个需要再次连接到数据库的方法
我的问题是
这是个好习惯吗
我做错什么了吗
是否有更好的方法避免多重连接?
那么单例模式呢
提前谢谢
解决方案
我找到了原因
我忘了关闭一个连接
我确信我已经把它关了,但是
有时候你不能这么肯定
感谢大家的回复可能您没有处理SqlConnections 试试这个:
using (SqlConnection connection = new SqlConnection(connectionString))
{ }
此语法将自动为您调用方法Dispose()
更新:
有关此方法的更多信息,请参见:
基本上,区别在于方法Dispose()
调用方法Close()
,但在清理一些资源和从池中删除连接之前
正如您所看到的那样,
Dispose()
比Close()
做得更多。因此,如果以后要重用连接,请使用方法Close()
,如果不完全销毁,请使用方法Dispose()
,如果使用上述语法,该方法将自动被调用。由于连接是池连接,因此不需要在不同的方法中“重用”它
我使用以下代码:
using(SqlConnection connection = new SqlConnection("your-connectionstring"))
{
// Do your stuff here...
}
使用
只是一种简捷的书写方式最后尝试catch
。它用于一次性物品
这可以应用到每种方法中
编辑:使用池中的连接也不会影响性能。所有连接信息都会被缓存。所以只需在原子级别上使用SqlConnection
不过,以更通用的方式处理ConenctionString是一件好事…如上所述,使用()可以为实现IDisposable的类新建一个新对象。但既然如此,一旦你完成了,你就不能让你的连接打开。池中的连接数量有限,如果未关闭连接,则会导致其他SPID无法使用,而这些SPID正在等待活动连接,最终将超时。所以你应该
连接池是一件“好”事情。池中有多少个连接?连接池通常是一件好事,因为它允许您高效地“打开/关闭”多个连接。在web应用程序中,数据库连接的单例是一件坏事——应该利用连接池,而不是利用连接池。每次都会创建一个新的连接。“每次都会创建一个新的连接。”您如何衡量?我有一个sql脚本来观察连接dispose和close之间的池有什么不同吗?我同意您的看法,但我不知道为什么没有从池中重用连接。它每次都会创建一个新的。如果我打开一个连接,那么我在池中有一个连接,当我需要一个连接时,我将从池中获取它。但在我的例子中,它在池中又创建了一个连接。这是正常的行为吗?你可能会在这里得到更多的答案。如果连接字符串100%相同,则连接必须来自同一池。谢谢您的回答。最后,我认为使用using比try catch block更好,因为很容易忘记关闭任何连接。我会按照你的建议检查DAAB的。