【问题标题】:issue in retrieve all Rows of the DataTable to a List将 DataTable 的所有行检索到列表中的问题
【发布时间】:2014-06-01 00:17:13
【问题描述】:

我想将数据从 DataTable 检索到一个列表中,我使用了两种方法

第一个是:

SqlDataAdapter dataadapter;
        DataSet dataset = new DataSet();
        public List<Groupe> displayGrp()
        {
            DataTable data = new DataTable();

            Requete = "select * from Groupe ";
            dataadapter = new SqlDataAdapter(Requete, cnx.cnx);
            dataadapter.Fill(dataset, "TGroupe");
         data = dataset.Tables["TGroupe"];

         for (int i = 0; i <data.Rows.Count; i++)
         {
             Program.listgrp[i].Codegroupe = int.Parse(data.Rows[i][0].ToString());
             Program.listgrp[i].Nom = data.Rows[i][1].ToString();
             Program.listgrp[i].Année = int.Parse(data.Rows[i][2].ToString());


         }

         return Program.listgrp;
        }

但当我尝试调用此方法时出现错误,错误是:

索引超出范围。它不能是负数,并且必须小于集合的大小。 参数名称:索引

但是当我使用这样的 foreach 方法时:

 SqlDataAdapter dataadapter;
        DataSet dataset = new DataSet();
        public List<Groupe> displayGrp()
        {
            DataTable data = new DataTable();

            Requete = "select * from Groupe ";
            dataadapter = new SqlDataAdapter(Requete, cnx.cnx);
            dataadapter.Fill(dataset, "TGroupe");
         data = dataset.Tables["TGroupe"];
         foreach (DataRow row in data.Rows)
         {
             Program.listgrp.Add(new Groupe { Nom = (row["Nom"].ToString()), Codegroupe = int.Parse(row["Codegroupe"].ToString())
                 , Année = int.Parse(row["Année"].ToString()) });
         }


         return Program.listgrp;
        }

一切都很好,我想知道问题出在哪里,为什么第一个方法不成功

程序类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace Gestion_stagiaire
{
    static class Program
    {
        /// <summary>
        /// Point d'entrée principal de l'application.
        /// </summary>
        /// 
        public static List<Groupe> listgrp = new List<Groupe>();
        public static List<Stagiaire> liststagiaire = new List<Stagiaire>();
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}

【问题讨论】:

  • 您是否尝试过使用 Visual Studio 调试器查看问题所在?这应该是一个非常简单的调试问题。您正在尝试访问一个不存在的索引。
  • 这是问题,我不知道为什么索引不存在并且我有 i=0 我不知道他为什么告诉我索引不存在并且循环是正确的
  • 正如我所说,这就是错误的原因。您需要逐步使用 Visual Studio 调试器并找出 为什么 索引超出范围。我的猜测是Program.listgrp 没有足够的长度来完成你正在做的作业。
  • 我已经添加了一个包含 listgrp 的程序类,我可以做些什么来获得足够的长度

标签: c# sql-server list datatable ado.net


【解决方案1】:

您正在尝试按索引分配给列表,但没有证据表明您的列表中有任何项目,因此分配肯定会失败。

当您尝试分配给listgrp[i] 时,没有listgrp[i]。您需要实例化一个新的Groupe 并将其添加到列表中。

for (int i = 0; i <data.Rows.Count; i++)
{
    // Create a new Groupe
    var item = new Groupe();

    // Set the properties
    item.Codegroupe = int.Parse(data.Rows[i][0].ToString());
    item.Nom = data.Rows[i][1].ToString();
    item.Année = int.Parse(data.Rows[i][2].ToString());

    // Add it to the list.
    listgrp.Add(item);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多