比如有一百个用户连接到服务器浏览网页,当第一个用户打开数据库还没有关的时候,第二个就要打开,这时候不会出错吗?不会产生数据库的排它性吗?

解决方案 »

  1.   

    sql server默认的连接池数是100,可以通过数据连接字符串设置数量,在connectstring中加上Max Pool size=200设置。
      

  2.   

    数据本身也有锁机制,看你是什么样的数据库操作,比如insert, update, delete都是表级锁,
    等等
      

  3.   

    注意连接池不是用来程序同时共享数据库联结的,而是让程序分享“剩下”的数据库连接。假设有程序 A、B、C 都使用同一数据库,这要开启三个联接,然后程序将连接放回连接池并且确保不在使用已经放回的连接,此连接才会被其它程序使用。SQLConnection是使用连接池的,所以如下的代码可以确保正确使用数据库连接:using(DBConnection cnn1=new SQLConnection(connStr))
    {
    ....
    }  //这可以确保cnn1.Close();
    using(DBConnection cnn2=new SQLConnection(connStr))
    {
    ....
    } //这可以确保cnn2.Close();cnn1和cnn2可能使用同一数据库物理连接,也可能使用两个独立的,你写程序的时候不用去管,这是由new SQLConnection()来自动维护的,只要记得每一次都创建新的逻辑连接并且确保及时关闭逻辑连接即可。有一种很混乱的说法,说有了连接池就可以让物理连接给多个程序同时使用了,这是与实际情况背道而驰的。
      

  4.   

    所以当有100个用户程序实例使用同一数据库,程序总有个快慢之分,也许第20个用户的new SQLConnection()使用的就是第10个用户刚刚释放的物理连接。有人错误地认为连接池就是共享物理连接,结果就出现了自以为高效的写法,就是将逻辑连接持续打开,给多用户程序共享。数据库连接不是线程安全的,即使在同一线程里也不能逻辑上混用,例如你打开一个DBDatareader不关闭它(或者它的连接)紧接着让这个连接给其它的DbAdapter、DBCommand或者DBDataReder使用,就无法正常使用。连接池正式因为数据库物理连接既不能共享又想缓冲区所以才想出的办法。