我想往数据库里加东西,比如100个记录,我逐条检测是否存在该记录(并为将这些记录加入SQL)当小于150时可以,再大的话就错误。错误提示::
未处理的“System.InvalidOperationException”类型的异常出现在 system.data.dll 中。其他信息: 超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小。什么意思啊,是那的原因啊。代码如下:for(j=1;j<=i;j++)
{
if(cunzaibh(zhshbhshz))//检测是否存在该编号;
{
MessageBox.Show("编号已经存在!");
return;
}
zhshbhshz++;
}

解决方案 »

  1.   

    cunzaib的代码贴出来看看,出现这种错误,很可能是连接用完了没有close
      

  2.   

    可能是你打开连接后没有及时关闭且在循环中始终con.Open();最好用DataAdapter来更新数据。
      

  3.   

    在连接的时候设置一下它的ConnectTimeOut值,系统好象默认30S吧
      

  4.   

    可能是你打开连接后没有及时关闭且在循环中始终con.Open();最好用DataAdapter来更新数据。
      

  5.   

    你这样检查不好,最好用datareader来检查
    比如你的表是这样
    name    num
    zhang   001
    当你检查数据库中是否存在这条数据是如果每条数据去做比较的话很慢的
    用datareader就比较好了
    把zhang,001作为查询条件,
    if(DataReader.Read())
    {
    MessageBox.Show("记录已经存在!");
    }
      

  6.   

    同意楼上使用DATAREADER读出数据后再检查最好
      

  7.   

    我就是那么判断的啊,这是那个函数:
    //判断是否存在该编号;
    private bool cunzaibh(long bhshz)
    {
    string sql ="select EEBHShZ from ZBShSh where EEBHShZ='"+bhshz +"' ";
    string str=CanShu.getstr.getconnectstring();
    SqlConnection con= new SqlConnection(str);
    SqlCommand com = new SqlCommand (sql, con);
    con.Open ();
    try
    {
    SqlDataReader reader=com.ExecuteReader();
    if(reader.Read())
    return true;
    else
    return false;
    reader.Close();
    }
    catch
    {
    throw;
    }
    finally
    {
    con.Close();
    }
    }
      

  8.   

    当上边那个i的值超过150时就有错误了。在那设置ConnectTimeOut的值啊??
      

  9.   

    没有问题啊,我试过了,i都改成1500了也没问题啊,除了reader.Close()是访问不到的代码以外没有其他问题,这两段程序没有问题,搂主再定位一下产生异常的地方吧。
      

  10.   

    ConnectionString = "Persist Security Info=False;Integrated Security=SSPI;database=northwind;server=mySQLServer;Connect Timeout=30;Max Pool Size =1000;Pooling=true"
      

  11.   

    datareader适合于读小的数据,100多行的?建议用dataset做算了.
      

  12.   

    为了知道数据是否存在而用Reader是不是太大阵容了?用ExecuteScalar不就够了??还有你的 reader.Close()执行不到,应该放到finally里面.  最重要的是你每执行一次cunzaibh()方法都创建了一个连接对象却只是关闭没有完全放掉,应该是这里出了问题,建议把连接对象放在方法外,毕竟对一个连接打开100次关闭100次比创建100个连接分别打开关闭一次要好的多,如果不愿意这样,可以使用using语法确定资源完全释放,类似SqlHelper中的做法.
      

  13.   

    1. 如 syeerzy(快乐永远*先天下之乐而乐*后天下之忧而忧*) 所说  建议用ExecuteScalar
    2. 做循环 调用cunzaibh函数并没有问题,应该是不会出错的,问题可能在其他代码上,建议监视
      

  14.   

    cunzaibh函数中的各种SQL对象是在函数作用域的,还是类作用域的?使用之后有没有关闭?此外判断插入的数据是否在数据库存在,最好不要循环判断,可以使用
    1、ExecuteScalar是不错的选择,
    2、或者土一点,先获得新增记录的编号,然后以此编号为查询条件进行查询,如果查询得到记录的个数>0,则存在,否则不存在。
    3、建立存储过程,在存储过程判断新纪录的编号是否存在
      

  15.   

    如果程序出错的话,应该在catch 中 return false;
      

  16.   

    我刚才又运行了一遍,i是5000都没问题了,可不知道以后会不会还出现以前的错误啊!
    我还是换成ExecuteScalar吧,估计好点。谢谢各位帮忙了!!