如果某个connection已经打开一个datareader时,则该connection就成为该datareader的独占连接了,其他的任何数据组件都不能使用该连接。

解决方案 »

  1.   

    datareader是在线联接,它会独占一个联接,也就是说datareader时时与资料库取得联系,建议在外循环使用dataset.如果要使用datareader时,请取出据放在数组中。然后循环数组。
      

  2.   

    sqlConnection1.Open();
    ===>
    sqlConnection1.Close();
    sqlConnection1.Open();
      

  3.   

    在出现第二个sqlConnection2.Open();时应该先关闭第一次打开的链接。
      

  4.   

    如果关闭第一次打开的链接,会使while (ds1.Read())失去效果。
      

  5.   

    ArrayList Branch=new ArrayList();
    ArrayList count2=new ArrayList();
    ArrayList count3=new ArrayList();
    ArrayList count4=new ArrayList();
    Arraylist count5=new ArrayList();
    ArrayList newdate=new Arraylist();
    sqlConnection1.Open();
    ds1=sqlCommand3.ExecuteReader();
    while (ds1.Read())
    {
    Branch.add(ds1["Branch"].ToString());
    count1.add(ds1["count1"].ToString());
    count2.add(ds1["count2"].ToString());
    count3.add(ds1["count3"].ToString());
    count4.add(ds1["count4"].ToString());
    }
    ds1.close
    for (var i=0;i<Branch.count;i++){
    sqlCommandup2.Parameters["@Branch"].Value=Brach(i);
    sqlCommandup2.Parameters["@count1"].Value=Count1(i);
    sqlCommandup2.Parameters["@count2"].Value=Count2(i);
    sqlCommandup2.Parameters["@count3"].Value=Count3(i);
    sqlCommandup2.Parameters["@count3"].Value=Count4(i);
    sqlCommandup2.Parameters["@newdata"].Value=newdate(i);
    sqlConnection2.Open();
    sqlCommandup2.ExecuteNonQuery();
    }sqlConection.close;
    随手写的,没有调试。思路如此