用c#中的数据表填充数组

Fill array with datatable in c#

struct KlasStruct
{
    public string Naam;
    public int AantalUur;
}

KlasStruct[] Klas;

private void btnMaakLessenrooster_Click(object sender, EventArgs e)
{
    string queryVakkenNaam = "SELECT Naam FROM Vakken";
    OleDbDataAdapter dAdapterVakkenNaam = new OleDbDataAdapter(queryVakkenNaam, 
        @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Project Officieel\Project_MagnusCurriculum\Project_MagnusCurriculum\Project.accdb");

    DataTable sourceVakkenNaam = new DataTable();
    dAdapterVakkenNaam.Fill(sourceVakkenNaam);

    for (int i = 0; i <= sourceVakkenNaam.Rows.Count - 1; i++)
    {
        // Exception happens here:
         Klas[i].Naam = sourceVakkenNaam[i]["Naam"];
    }

    MessageBox.Show(Klas[0].Naam);
}

我得到的异常是:

Error: Cannot apply indexing with [] to an expression of type System.Data.DataColumn

您正在使用的数组 KlasStruct[] Klas; 未初始化。你可以使用如下:

struct KlasStruct
{
 public string Naam;
 public int AantalUur;
}

List<KlasStruct> Klas =new List<KlasStruct>();

private void btnMaakLessenrooster_Click(object sender, EventArgs e)
{
  //add a try catch
    string queryVakkenNaam = "SELECT Naam FROM Vakken";
    OleDbDataAdapter dAdapterVakkenNaam = new OleDbDataAdapter(queryVakkenNaam, 
        @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Project Officieel\Project_MagnusCurriculum\Project_MagnusCurriculum\Project.accdb");

    DataTable sourceVakkenNaam = new DataTable();
    dAdapterVakkenNaam.Fill(sourceVakkenNaam);

    for (int i = 0; i <= sourceVakkenNaam.Rows.Count - 1; i++)
    {
         KlasStruct kStruct = new KlasStruct(); ;
         kStruct.Naam = Convert.ToString(sourceVakkenNaam.Rows[i]["Naam"]);

         Klas.Add(kStruct);
    }


}

我认为你在循环中遗漏了 Rows 属性:

foreach (int i = 0; i < sourceVakkenNaam.Rows.Count; i++)
{
    Klas[i].Naam = sourceVakkenNaam.Rows[i]["Naam"];
}