大体情况是这样我想把这个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但是只要连接字符才一样就会去 连接池里面去空闲的?

解决方案 »

  1.   

    不应该这样使用connection,多线程情况下会有冲突每次new connnection的时候都是从连接池去取的,只要连接池里有空闲的连接。
    为了保证连接池里有足够多的空闲连接,应该在执行sql后立即关闭connection
      

  2.   

    本人认为 连接池是对数据库驱动的连接,sql server是有链接的..
    你可以用连接access数据试试..进行几十次new connection..
      

  3.   

    你这个要是访问量大的话,连接就不够用了,就会出现你说的情况,卡在那里了,获取数据库连接做好不要做成Static的方法来获得,容易造成资源竞争出现死锁现象。
      

  4.   

    楼上说的很对,多线程的情况下容易造成资源死锁现象,用lock或者连接池来做
      

  5.   

    你采用默认的写法就已经使用连接池了,虽然你对Connection进行Close了但是并不会直接关闭掉物理连接,是否关闭物理连接是由连接池管理的。如果采用静态连接,第一个用户打开了,他觉得用完了就关闭了,第二个用户来的时候用的是这个唯一连接,可是它已经关闭了。
      

  6.   

    用静态Connection是可行的,现在做的一个项目就是用的静态的,效果怎么样还待观察
    用静态Connection的优点:
    可以复用Command,特别是在使用了Command的Prepare方法的情况下,会提高一点效率。
    Connection保持打开,应该可以节省一点打开关闭的开销(个人猜测)。
    使用事务比较简单,因为只有一个Connection。
    缺点是:
    必须做好同步,并且在同步操作中尽量只进行数据库操作。这个是最大的缺点,而且想要做好很难,一旦没做好会大大影响效率。