我在一个项目中要进行这样的操作,使用两个嵌套循环实现将ACCESS中的数据导入到SQL中,外循环遍历MDB中的每笔记录,将其读出来后在程序中进行一些计算,内循环遍历当月的天数,以生成对应MDB中相应记录的整月数据。也就是说MDB中的一条记录就要在SQL中执行30次左右insert动作。一般MDB中的记录数在200左右,也就是说这个导入一共要在SQL中连续执行6000次左右insert动作。这些操作都放在一个事务中进行。以免在导入过程中出错,导致数据混乱。
现在遇到的问题是,测试中发现,在200次外循环中,每次都比上次循环的执行速度慢,到第40次左右循环时就会出现“超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小。”的错误!我的所有的事务中的操作都只使用了一个SqlConnection对象,每次动作更新SqlCommand对象的设置而已,为什么会出现连接池的错误呢!我想请教一下这种问题是什么原因呢?是因为在事务中进行的操作太多引起的还是别的原因?
即使我增加连接池大小,增加超时时间,以达到正确运行的目的,但是每次循环都比上次慢这是让人受不了啊,第1次循环用时不到1秒。到第32次循环里已经要用时3秒了。这个问题怎么排除?

解决方案 »

  1.   

    因为你的SqlConnection在Open()后没有Close()就再一次Open()了,这时SQL的数据库连接就会加1,而当SQL的数据库连接数达到100时,就会被锁S,再也无法进行任何操作。直到连接被释放。
      

  2.   

    SqlConnection在Open()后如果没有Close()而直接Open()的话,就会增加一个SQL连接池。
      

  3.   

    if(conn!=null)
    {
    conn.Close();
    }   
    conn.Open();
      

  4.   

    我觉用dataset应该更好使!把所有的表和记录都放一dataset中,最后一下更新到数据库!