c# 连接数据库 connection 静态问题

dongyangmoney 2010-10-11 05:19:52
大体情况是这样我想把这个connection 连接写成静态的,所有的请求都用这个连接,
在项目启动的时候调用 t方法,给静态的con赋值,
public static SqlConnection con = null;

public static void t()
{
con = new SqlConnection("server = .; database = dongyang;pooling = false;trusted_connection = true");
con.Open();
}


然后其它的请求都直接用这个con,我自己用多线程测试有时候出错有时候不错误,有时候好像还执行到一半就卡在那里,
不知道这样写静态的con可不可以,请大家指点下!

我的目的是想不用每个请求都去重新连接下数据。
但是网上说的ado.net数据库连接池 我有个疑惑的地方,每个求情过来的时候我都写的是new一个connection对象,这样是不是就没有连接池的效果了,还是象网上说的那样虽然是new但是只要连接字符才一样就会去 连接池里面去空闲的?
...全文
593 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
danjiewu 2010-10-13
  • 打赏
  • 举报
回复
用静态Connection是可行的,现在做的一个项目就是用的静态的,效果怎么样还待观察
用静态Connection的优点:
可以复用Command,特别是在使用了Command的Prepare方法的情况下,会提高一点效率。
Connection保持打开,应该可以节省一点打开关闭的开销(个人猜测)。
使用事务比较简单,因为只有一个Connection。
缺点是:
必须做好同步,并且在同步操作中尽量只进行数据库操作。这个是最大的缺点,而且想要做好很难,一旦没做好会大大影响效率。
zrrsj 2010-10-13
  • 打赏
  • 举报
回复
see see
凤凰涅檠 2010-10-13
  • 打赏
  • 举报
回复
同意周公。顶
IHandler 2010-10-13
  • 打赏
  • 举报
回复
静态对象是所有会话共享的,并发情况下会有冲突
周公 2010-10-13
  • 打赏
  • 举报
回复 1
[Quote=引用楼主 dongyangmoney 的回复:]
大体情况是这样我想把这个connection 连接写成静态的,所有的请求都用这个连接,
在项目启动的时候调用 t方法,给静态的con赋值,

C# code
public static SqlConnection con = null;

public static void t()
{
con = new SqlConnec……
[/Quote]
你采用默认的写法就已经使用连接池了,虽然你对Connection进行Close了但是并不会直接关闭掉物理连接,是否关闭物理连接是由连接池管理的。

如果采用静态连接,第一个用户打开了,他觉得用完了就关闭了,第二个用户来的时候用的是这个唯一连接,可是它已经关闭了。。。。
liaoyukun111 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 winner2050 的回复:]
多个人使用一个连接,对于实现事务是灾难性的。

对于并发访问的时候,会不会影响网站的并发量,你想想开关数据库连接会不会乱?
[/Quote]
UP
liyf_liyunfeng 2010-10-13
  • 打赏
  • 举报
回复
楼上说的很对,多线程的情况下容易造成资源死锁现象,用lock或者连接池来做
暖枫无敌 2010-10-13
  • 打赏
  • 举报
回复
你这个要是访问量大的话,连接就不够用了,就会出现你说的情况,卡在那里了,获取数据库连接做好不要做成Static的方法来获得,容易造成资源竞争出现死锁现象。
quanpp 2010-10-12
  • 打赏
  • 举报
回复
深研究也不是没有道理,呵呵 最后帮你顶了 困啊,睡觉
七爷 2010-10-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 winner2050 的回复:]
多个人使用一个连接,对于实现事务是灾难性的。

对于并发访问的时候,会不会影响网站的并发量,你想想开关数据库连接会不会乱?
[/Quote]
学习了
phil999 2010-10-12
  • 打赏
  • 举报
回复
sugercgq 2010-10-12
  • 打赏
  • 举报
回复
本人认为 连接池是对数据库驱动的连接,sql server是有链接的..
你可以用连接access数据试试..进行几十次new connection..
jshi123 2010-10-12
  • 打赏
  • 举报
回复
不应该这样使用connection,多线程情况下会有冲突

每次new connnection的时候都是从连接池去取的,只要连接池里有空闲的连接。
为了保证连接池里有足够多的空闲连接,应该在执行sql后立即关闭connection
Ijingjing 2010-10-12
  • 打赏
  • 举报
回复
引用错了 是2楼说的问题就这问题其它的你都不用看了 好好检查一下吧

Ijingjing 2010-10-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 winner2050 的回复:]
何必考虑呢,能作成静态的,微软干嘛为难自己为难程序员?
[/Quote]就这问题其它的你都不用看了 好好检查一下吧
果然如此 2010-10-12
  • 打赏
  • 举报
回复
如果做成一个连接,高并发访问时可能会慢,
根据你项目的实际访问请求数量而定
qingYun1029 2010-10-11
  • 打赏
  • 举报
回复
看看!!!
winner2050 2010-10-11
  • 打赏
  • 举报
回复
多个人使用一个连接,对于实现事务是灾难性的。

对于并发访问的时候,会不会影响网站的并发量,你想想开关数据库连接会不会乱?
打一壶酱油 2010-10-11
  • 打赏
  • 举报
回复
为什么这么多人共用一个连接,每次 操作 一个 连接,操作完成后 记得关闭 连接,性能应该也不差吧
winner2050 2010-10-11
  • 打赏
  • 举报
回复
何必考虑呢,能作成静态的,微软干嘛为难自己为难程序员?

62,272

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧