如何使用 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.