如何使用 for 语句 C# 在列表框中获取我所有的数据库 table 值
How to get all my database table values in a listbox with the for statement C#
作为 C# 的初学者,我在从我的数据库 table 中获取我的所有值(并且只有值 - 而不是字段名称)并将它们列在我的列表框中时遇到了一些问题。
我做了一些研究,发现我可以使用以下代码获取特定 table 的所有字段名称:
try
{
connection.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = connection;
string query = "select * from MyTable where Month='January'";
command.CommandText = query;
OleDbDataReader reader = command.ExecuteReader();
var columns = listBox5;
for (int i = 0; i < reader.FieldCount; i++)
{
if (reader.GetName(i) != "Month" && reader.GetName(i) != "Id")
{
columns.Items.Add(reader.GetName(i));
}
}
connection.Close();
}
catch (Exception ex)
{
MessageBox.Show("Error" + ex);
}
这非常适合列出字段名称(而不是字段名称月份和 ID)。虽然现在我还需要列出我的所有值(与相应的字段名称匹配)。起初我想将它们与字段名称(代码上方)同时添加,但这对我来说太复杂了。因此,我尝试使用类似的代码在另一个列表框中列出值,但我没有使用 GetName,而是使用了 GetValue。请参阅下面的代码:
try
{
connection.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = connection;
string query = "select * from MyTable";
command.CommandText = query;
OleDbDataReader reader = command.ExecuteReader();
var columns2 = listBox6;
for (int i = 0; i < reader.FieldCount; i++)
{
columns2.Items.Add(reader.GetValue(i).ToString());
}
connection.Close();
}
catch (Exception ex)
{
MessageBox.Show("Error" + ex);
}
虽然这不起作用。我收到以下错误:
ErrorSystem.InvalidOperationException: Data doesn't exist for the row/column at line ...
这一行:
columns2.Items.Add(reader.GetValue(i).ToString());
您需要在 reader 上调用 Read()
才能读取记录:
var columns2 = listBox6;
while (reader.Read())
{
for (int i = 0; i < reader.FieldCount; i++)
{
columns2.Items.Add(reader.GetValue(i).ToString());
}
}
来自MSDN:
Advances the SqlDataReader to the next record. The default position of the SqlDataReader is before the first record. Therefore, you must call Read to begin accessing any data.
作为 C# 的初学者,我在从我的数据库 table 中获取我的所有值(并且只有值 - 而不是字段名称)并将它们列在我的列表框中时遇到了一些问题。
我做了一些研究,发现我可以使用以下代码获取特定 table 的所有字段名称:
try
{
connection.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = connection;
string query = "select * from MyTable where Month='January'";
command.CommandText = query;
OleDbDataReader reader = command.ExecuteReader();
var columns = listBox5;
for (int i = 0; i < reader.FieldCount; i++)
{
if (reader.GetName(i) != "Month" && reader.GetName(i) != "Id")
{
columns.Items.Add(reader.GetName(i));
}
}
connection.Close();
}
catch (Exception ex)
{
MessageBox.Show("Error" + ex);
}
这非常适合列出字段名称(而不是字段名称月份和 ID)。虽然现在我还需要列出我的所有值(与相应的字段名称匹配)。起初我想将它们与字段名称(代码上方)同时添加,但这对我来说太复杂了。因此,我尝试使用类似的代码在另一个列表框中列出值,但我没有使用 GetName,而是使用了 GetValue。请参阅下面的代码:
try
{
connection.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = connection;
string query = "select * from MyTable";
command.CommandText = query;
OleDbDataReader reader = command.ExecuteReader();
var columns2 = listBox6;
for (int i = 0; i < reader.FieldCount; i++)
{
columns2.Items.Add(reader.GetValue(i).ToString());
}
connection.Close();
}
catch (Exception ex)
{
MessageBox.Show("Error" + ex);
}
虽然这不起作用。我收到以下错误:
ErrorSystem.InvalidOperationException: Data doesn't exist for the row/column at line ...
这一行:
columns2.Items.Add(reader.GetValue(i).ToString());
您需要在 reader 上调用 Read()
才能读取记录:
var columns2 = listBox6;
while (reader.Read())
{
for (int i = 0; i < reader.FieldCount; i++)
{
columns2.Items.Add(reader.GetValue(i).ToString());
}
}
来自MSDN:
Advances the SqlDataReader to the next record. The default position of the SqlDataReader is before the first record. Therefore, you must call Read to begin accessing any data.