一直没有找到办法但是我用这个办法程序竟然提示超过范围?怎么回事?
这个是我用的测试代码ArrayList lilei = new ArrayList();
            SqlConnection sqlConn = new SqlConnection("server=127.0.0.1;Database=Northwind;uid=sa;pwd=;");
            SqlCommand sqlCmd = new SqlCommand();
            sqlCmd.Connection = sqlConn;
            sqlCmd.CommandText = "select CategoryName from Categories";
            SqlDataAdapter sqlDa = new SqlDataAdapter();
            sqlDa.SelectCommand = sqlCmd;
            DataSet sqlDs = new DataSet();
            sqlDa.Fill(sqlDs);            for (int i = 0; i <= sqlDs.Tables[0].Rows.Count; i++)
            {
                lilei[0] = sqlDs.Tables[0].Rows[i][0].ToString();            }

解决方案 »

  1.   

    for (int i = 0; i < sqlDs.Tables[0].Rows.Count; i++)
      

  2.   

    i <= sqlDs.Tables[0].Rows.Count - 1
    or
     i < sqlDs.Tables[0].Rows.Count
      

  3.   

    并且你要判断
    if (sqlDs != null && sqlDs.Tables.Count > 0)
    {
        for (int i = 0; i <= sqlDs.Tables[0].Rows.Count; i++)
        {
            lilei.Add(sqlDs.Tables[0].Rows[i][0])
            //lilei[0] = sqlDs.Tables[0].Rows[i][0].ToString();
            你这个是什么意思?如果只要一个,应该break;
        }
    }
      

  4.   

    跟你改改:
    for (int i = 0; i < sqlDs.Tables[0].Rows.Count; i++)
                {
                    lilei[i] = sqlDs.Tables[0].Rows[i][0].ToString();
                }
      

  5.   

    for (int i = 0; i < sqlDs.Tables[0].Rows.Count; i++)
    {
       lilei.Add(sqlDs.Tables[0].Rows[i][0].ToString());
    }
      

  6.   

    谢谢楼上,不消息写成<=了呵呵,难道只能考循环把ds里面的赋值到lilei里面?
    没有一次性导入的函数么?
    另外还有一个问题:
    如何在c#中实现将文本传到lpt1端口? 
    在vb中可以直接 open "LPT1:" "string"
    在c#中难道只能调用api?
      

  7.   

    for (int i = 0; i <= sqlDs.Tables[0].Rows.Count-1; i++)
                {
                    lilei[0] = sqlDs.Tables[0].Rows[i][0].ToString();            }
      

  8.   

    难道只能考循环把ds里面的赋值到lilei里面
    ————————————————————————————————————————
    你可以用“一句话”就能搞定,但是这需要你懂 Array.ForEach方法、匿名方法等比较高级的编程语法。其实不论是写上一大堆代码还是用“一句话”搞定,从底层实现上看是一样的都是循环赋值,只是表现力不同,说明书写着的逻辑思维以及与编程语言的结合达到了一定水平。
      

  9.   

    其实从你这个例子看,用DataSet是特大的内存浪费            ArrayList lilei = new ArrayList();
                SqlConnection sqlConn = new SqlConnection("server=127.0.0.1;Database=Northwind;uid=sa;pwd=;");
                SqlCommand sqlCmd = new SqlCommand();
                sqlCmd.Connection = sqlConn;
                sqlCmd.CommandText = "select CategoryName from Categories";SqlDataReader sdr = sqlCmd.ExecuteReader(CommandBehavior.CloseConnection);
    while (sdr.Read()) lilei.Add(sdr.GetString(0));
    sdr.Close();
      

  10.   

    我只是想知道用法,那楼上有没有更好的办法呢?
    我只是想把lilei作为一个临时缓存用
      

  11.   

    现在我的目的是这样,从表barcodeInfoNow中取出最后的一条记录也是最新的一条记录(表update的时候也是一直加在最后的),然后把条记录读到一个string变量里去
    我现在是这样实现的,还有更好的办法没有?SqlConnection sqlConn = new SqlConnection("server=XXX.XX.X.X;Database=mes;uid=mesAdmin;pwd=mes;");
                SqlCommand sqlCmd = new SqlCommand();
                sqlCmd.Connection = sqlConn;
                sqlCmd.CommandText = "select max(barcode_id) from barcodeInfoNow";
                SqlDataAdapter sqlDa = new SqlDataAdapter();
                sqlDa.SelectCommand = sqlCmd;
                DataSet sqlDs = new DataSet();
                sqlDa.Fill(sqlDs);            string startBarcode = sqlDs.Tables[0].Rows[0][0].ToString();
      

  12.   

    和这个例子差多啦。http://community.csdn.net/Expert/topic/4731/4731123.xml?temp=.3014185
    public class MyClass
    {
      private string name;
      private int id;
      private int age;
      public string Name
      {
        get { return name; }
        set { name = value; }
      }
      public int ID
      {
        get { return id; }
        set { id = value; }
      }
      public int Age
      {
        get { return age; }
        set { age = value; }
      }
    }MyClass cls;
    List<MyClass> al = new List<MyClass>();
    ///下边的for语句里可用用dataset来代替for (int i = 0; i < 10; i++)
    {
        cls = new MyClass();
        cls.Name = "a" + i;
        cls.ID = i;
        cls.Age = 20 + i;
        al.Add(cls);
    }
    dataGridView1.DataSource = al;
      

  13.   

    sqlCmd.CommandText = "select max(barcode_id) from barcodeInfoNow";
    根据这个SQL判断,不要说DataSet,你用DataReader都是浪费这个SQL语句只会给你一个值,就是barcode_id的最大值(不一定是最后一条记录;如果你最后一条记录不是最大值的话就好看了)这种情况应该直接:
    string returnValue = (string)sqlCmd.ExecuteScalar();
      

  14.   

    那请问我怎么才能查到某一张表中的最后一条(也就是最新的一条)记录?
    如果不用select max(barcode_id) from barcodeInfoNow的话?
      

  15.   

    那请问我怎么才能查到某一张表中的最后一条(也就是最新的一条)记录?
    如果不用select max(barcode_id) from barcodeInfoNow的话?
    ---------------------------------
    给表添加一个自增的PKID字段或者DateTime字段,查询时order by一下。
      

  16.   

    不需要order啊,我只是要那出表里面的最新的一个记录就可以了
    就是想问出了用max()的方法还可以用什么SQL语句来得到?
      

  17.   

    -------------------------------------
    不需要order啊,我只是要那出表里面的最新的一个记录就可以了
    就是想问出了用max()的方法还可以用什么SQL语句来得到?
    -------------------------------------有多个方法
    最好的方法需要你操作数据库,修改表结构和索引1)你的表是否有一个递增的主键?
    是-->修改该主键的索引,将其顺序改为DESC,这样以后的SELECT都是从后往前搜的了
    符合你要求的SQL语句就是 SELECT TOP 1 * FROM barcodeInfoNow
    或-->不修改,那么你就要亲自倒序,即 SELECT TOP 1 * FROM barcodeInfoNow ORDER BY barcode_id DESC2)你的表是否有一个存放日期/时间的字段?
    是-->在该字段上新建或修改索引使之倒序,然后就可以
    SELECT TOP 1 * FROM barcodeInfoNow ORDER BY [日期/时间字段] DESC
    或-->直接就用上面这句,不过性能会大减