如何将Access表放入C#数组?

时间:2015-02-19 11:21:41

标签: c# arrays ms-access

我的数据库中有一个名为" RichtingEnJaar"的MS-Access表。

此表有2列:" ID"和" Naam"。

我需要获得整个专栏" Naam"在C#中的数组中。

我已经尝试了很多,但似乎无法找到正确的答案。

你们中的任何人能否快速帮助我?

connect.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=H:\Project Officieel\Project_MagnusCurriculum\Project_MagnusCurriculum\Project.accdb";

connect.Open();

OleDbCommand cmdKlassen = new OleDbCommand("SELECT Naam FROM RichtingEnJaar WHERE ID = 1", connect);

if (connect.State == ConnectionState.Open)
{    
    try
    {
                   OleDbDataReader KlasReader = null;
                   KlasReader = cmdKlassen.ExecuteReader();

                   while (KlasReader.Read())
                   {
                      Klas[0].Naam = KlasReader["Naam"].ToString();
                   }

                   connect.Close();
    }
    catch (Exception expe)
    {
        MessageBox.Show(expe.Source);
        connect.Close();
    }
}
else
{
    MessageBox.Show("Connection failed");
}

试了一个新的:

string connStringKlas = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=H:\Project Officieel\Project_MagnusCurriculum\Project_MagnusCurriculum\Project.accdb";

        DataTable resultsKlas = new DataTable();

        using (OleDbConnection connKlas = new OleDbConnection(connStringKlas))
        {
            OleDbCommand cmdKlas = new OleDbCommand("SELECT Naam FROM RichtingEnJaar", connKlas);

            connKlas.Open();

            OleDbDataAdapter adapter = new OleDbDataAdapter(cmdKlas);

            adapter.Fill(resultsKlas);

            for (int i = 0; i <= resultsKlas.Rows.Count - 1; i++)
            {
                Klas[i].Naam = resultsKlas.Rows[i].ToString();
            }

            connKlas.Close();
        }

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

Klas[i].Naam = resultsKlas.Rows[i].ToString();行上出现错误,说“System.NullReferenceException&#39;。

2 个答案:

答案 0 :(得分:1)

目前尚不清楚Klas是什么,但假设它是某个阵列。

看起来Klas[0].Naam = KlasReader["Naam"].ToString();是问题来源。您将查询的所有结果放入同一个变量中。

它应该是您将查询结果添加到的一些列表或其他集合,而不是单个Klas[0].Naam变量。

例如(跳过代码中不相关的部分)

var list = new List<KlasStruct>();
while (KlasReader.Read())
{
    var k = new KlasStruct();
    k.Naam = KlasReader["Naam"].ToString()
    list.Add(k);
}

以后(如果你真的需要数组,而不是列表)你可以使用List.ToArray()方法将列表转换为数组。

像这样:

Klas = list.ToArray();

答案 1 :(得分:1)

由于您可能不知道数据库中有多少条记录,您可以使用列表从数据库中填充,并将此列表转换为数组:

        var klasList = new List<KlasStruct>();

        connect.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=H:\Project Officieel\Project_MagnusCurriculum\Project_MagnusCurriculum\Project.accdb";

           connect.Open();
           OleDbCommand cmdKlassen = new OleDbCommand("SELECT Naam FROM RichtingEnJaar WHERE ID = 1", connect);

           if (connect.State == ConnectionState.Open)
           {    
               try
               {
                   OleDbDataReader KlasReader = null;
                   KlasReader = cmdKlassen.ExecuteReader();
                   while (KlasReader.Read())
                   {

                      klasList2.Add(new KlasStruct() { Naam = KlasReader["Naam"].ToString());
                   }
                   connect.Close();


                   Klas =  klasList.ToArray();
               }
               catch (Exception expe)
               {
                   MessageBox.Show(expe.Source);
                   connect.Close();
               }
          }
          else
          {
              MessageBox.Show("Connection failed");
          }