我的数据库中有一个名为" 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;。
答案 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");
}