select top 10 * from A
表有2列 分别是B,C
如何让查询出来的数据保存在Arraylist中?

解决方案 »

  1.   

    我一般是选好以后放入DataSet,不需要再用到ArrayList,如果非要用,建议使用泛型
    List<T>类DataSet a; // 数据绑定到这里List<DataRow> bSet = new List<DataRow>;
    foreach (DataRow br in b.Tables["b"].Rows)
    {
    bSet.Add(br);
    }
    //使用
    bSet[0]["C"]; // 这个就是C列的值,需要做类型转换,比如
    int.Parse(bSet[0]["C"].ToString()); // 这样做类型转换
      

  2.   

    我想知道的就是如何从DataSet中删除前10行,让这10行数据保存到Arraylist中,然后再用textBox把存在Arraylist中的数据读出来,读一行删一行,这样虽说烦琐了点,可以做吗?
      

  3.   

    我是用20个设备同时调用1个表中的数据,每调用一个就删除一个,20个设备运转一次的时间不到5秒,所以如果直接绑定DataGrid,因为设备运行速度不同,所以从DataSet中删除到同一行上回报错,同时删除20行又会有设备没有调用,所以想用ArrayList为每个设备调用10个数据,这样既不会重复,又不会有漏掉的
      

  4.   

    如果是这样,请不要用ArrayList,直接用Stack<T>类DataSet a; // 绑定数据
    DataTable b; // 选取需要的数据放入b
    // 这里删除a的相关数据
    // 定义堆栈
    Stack<DataRow> bSet = new Stack<DataRow>;
    foreach (DataRow br in b.Tables["b"].Rows)
    {
    // 入栈
    bSet.Push(br);
    }
    //使用
    while (bSet.Count>0)
    {
    // 出栈
    DataRow r = bSet.Pop();
    tbColC.Text = tbColC + r["C"].ToString() + ";";
    tbColD.Text = tbColD + r["D"].ToString() + ";";
    }
      

  5.   

    回贴以后才看到了楼主的要求。这样,你可以把20个设备共用的那个DataSet定义为全局变量。
    然后每次使用的时候,就用
    lock
    {
    // 使用DataSet读取数据,然后删除
    }
    // 这里处理数据// lock会锁定DataSet,等数据处理好以后,才释放。
      

  6.   

    我如果用LOCK
    是20个设备同时读第一个数据吗?
    还是20个设备分别读对应的行数据?
    我初学者,希望能讲的明白点谢谢!分一定会送的
      

  7.   

    不清楚LZ后来具体的要求,写了点代码,希望对你有用DataTable dt ="select top 10 * from cry"返回的一个DataTable ;
    ArrayList myAL = new ArrayList();
    for(int i=0;i<10;i++)
    {
    myAL.Add(dt.Rows[i][0]);
    myAL.Add(dt.Rows[i][1]);
    this.PrintValues( myAL, '\t');
    myAL.Remove(dt.Rows[i][0]);
    myAL.Remove(dt.Rows[i][1]);
    }public  void PrintValues( IEnumerable myList, char mySeparator )  
    {
         System.Collections.IEnumerator myEnumerator = myList.GetEnumerator();
         while ( myEnumerator.MoveNext() )
         {
     label1.Text +=  mySeparator.ToString() + myEnumerator.Current.ToString() ;
         }
    }
      

  8.   

    我如果用LOCK
    是20个设备同时读第一个数据吗?
    还是20个设备分别读对应的行数据?
    ===========================================20个设备应该分别用不同的线程对应。
    lock会在代码运行期间独占数据,其他的线程就会等待。所以实际上是一个个读取出来的
      

  9.   

    没看出来这跟 ArrayList 有什么关系?既然是用 DataSet/DataTable 了, 那直接用 DataRow[] 数组为何不可?
      

  10.   

    // 初始化,写在Constructor里
    Thread[] Pool = new Thread[20];
    for (int i=0; i<Pool.Length; i++)
    {
    Pool[i] = new Thread(new ThreadStart(MyJob)); // 你要自己写一个private void MyJob()
    }
    DataSet a; // 绑定数据//每台设备都有对应一个线程,所以,当有请求任务时候
    Pool[设备线程号].Start() // 启动线程// 每一个线程都会共享这个方法
    private void MyJob()
    {
    DataRow r;
    lock // 先到先读
    {
    // 读ds数据,读1行入DataRow
    r = a.Tables[b].Rows[0];
    // 然后删除a中的数据
    // 这里你自己写
    }
    // 处理r中的数据
    }