【问题标题】:C# ,mysql ,how to select and read all data from one table?C#,mysql,如何从一张表中选择和读取所有数据?
【发布时间】:2019-10-02 14:11:09
【问题描述】:

我想从 MySQL 数据库中的一个表中选择并显示(比如说在调试控制台中)所有数据。

我可以使用列名或索引读取数据,但只能读取一行。 有人可以告诉我如何循环槽行吗?所以我可以读取它的数据..

感谢您的帮助。

public class DatabaseHandler
    {
      private bool query_status;
        private int? count;
        private DataTable data_table;
        private static MySqlConnection connection;
        private MySqlDataReader data_reader;
        private MySqlCommand command;
        private static DatabaseHandler databasehandler;
    public void insert(string table, Dictionary<string, string> data)...

    public void select(string columns, string table, string where)
    {
        try
        {
            connection.Open();
            this.command = connection.CreateCommand();
            command.CommandType = CommandType.Text;
            command.CommandText = "SELECT * FROM user";
            this.data_reader = command.ExecuteReader();
            if (this.data_reader.HasRows) {
                this.count = data_reader.FieldCount;
                do
                {
                    this.data_reader.NextResult();
                    for (var i = 0; i < count; i++)
                    {
                        Debug.WriteLine(this.data_reader.GetValue(i));
//only returns one row. How to view all data?
                    }
                }
                while (this.data_reader.Read());           
            }
            connection.Close();
        }
        catch (Exception e)
        {
            Debug.WriteLine(e.Message);
        }
    }
    public void delete(string table, string where)...
    public void update(string table, string new_data, string where)... 
    public bool get_query_status()...
    public string get_custom_string()...
    public int? get_query_count()...
    public DataTable get_result()...

【问题讨论】:

  • 您的计数是返回数据库中的实际条目数还是仅 = 1?先检查一下,我会说。 for (var i = 0; i
  • 现在我知道我哪里出错了。获取结果时,我使用了 DB.select("", "table_name", "id = ''1");而不是 DB.select("", "table_name", "") 所以我总是只取一个..我根本没有注意这行代码。我的错。无论如何感谢您的帮助。

标签: c# mysql


【解决方案1】:

FieldCount() 返回表中 的数量。我认为您的表只有 1 列,这就是它没有遍历其余记录的原因。

我建议你去掉 count 变量的使用,直接使用 Read() 方法返回的布尔值。

【讨论】:

    【解决方案2】:

    您正在使用 NextResult,这将移动到下一个结果集。

    Difference between SqlDataReader.Read and SqlDataReader.NextResult

    在您的示例中,如果您将代码更改为类似

    this.data_reader = command.ExecuteReader();
            if (this.data_reader.HasRows) {
                this.count = data_reader.FieldCount;
                while (this.data_reader.Read());           
                {
                    for (var i = 0; i < count; i++)
                    {
                        Debug.WriteLine(this.data_reader.GetValue(i));
                    }
                }
               this.data_reader.Close();
            }
    

    【讨论】:

    • 我刚刚在这里测试了该代码,它在测试数据库上运行良好。我假设您在运行时没有遇到任何异常?
    【解决方案3】:

    也许可以尝试使用 MySqlDataAdapter:

     DataTable temp = new DataTable();
     adapter = new MySqlDataAdapter(command);
     adapter.Fill(temp);
    
     foreach(DataColumn column in  temp.Columns) 
     {
         foreach(DataRow row in temp.Rows)
         {
              Console.WriteLine(row[column]);
         }
     }
    

    【讨论】:

      【解决方案4】:

      您可以使用DataReader顺序访问数据库记录

      try
      {
          connection.Open();
          MySqlCommand command = new MySqlCommand("SELECT * FROM User", connection);
          using (MySqlDataReader reader = command.ExecuteReader())
          {
              while (reader.Read())
              {
                  // access your record colums by using reader
                  Console.WriteLine(reader["COLUMN_NAME"]);
              }
          }
      }
      catch (Exception ex)
      {
          // handle exception here
      }
      finally
      {
          connection.Close();
      }
      

      或者您可以使用DataAdapter 填充本地DataSetDataTable 并从那里循环您的行:

      try
      {
          connection.Open();
          MySqlDataAdapter adapter = new MySqlDataAdapter("SELECT * FROM User", connection);
          DataTable data = new DataTable();
          adapter.Fill(data);
          foreach (DataRow row in data.Rows)
          {
              Console.WriteLine(row["COLUMN_NAME"]);
          }
      }
      catch (Exception ex)
      {
          throw ex;
      }
      finally
      {
          connection.Close();
      }
      

      还要始终记住确保关闭与数据库的所有活动连接。

      【讨论】:

        【解决方案5】:
        try
        {
            listView1.Items.Clear();
            MySqlConnection con = new MySql.Data.MySqlClient.MySqlConnection("server=localhost;port=3306;uid=sql3305088;pwd=KwxUiLHnKt;database=sql3305088;");
        
            con.Open();
            MySqlCommand com = con.CreateCommand();
        
            com.CommandType = System.Data.CommandType.Text;
            com.CommandText = "SELECT * From eslamtarek";
            MySql.Data.MySqlClient.MySqlDataReader reader = com.ExecuteReader();
        
        
            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    ListViewItem lv = new ListViewItem();
                    lv.Text = reader.GetString(0);
                    lv.SubItems.Add(reader.GetString(1));
                    lv.SubItems.Add(reader.GetString(2));
                    lv.SubItems.Add(reader.GetString(3));
                    lv.SubItems.Add(reader.GetString(4));
                    listView1.Items.Add(lv);
                }
                reader.Close();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        

        【讨论】:

          【解决方案6】:

          你也可以试试这种编码方式

          try
          {
          
               DataTable data = new DataTable();
          
               connection.Open();
               MySqlCommand command = new MySqlCommand("SELECT * FROM User", connection);
               data.load(command.ExecuteReader());
          
               foreach(Datarow row in data.rows)
               {
                  // access your record colums by using reader
                  Console.WriteLine(row["COLUMN NAME"]);
               }
          
          }
          catch (Exception ex)
          {
               // handle exception here
          }
          finally
          {
               connection.Close();
          }
          

          【讨论】:

            猜你喜欢
            • 2020-04-08
            • 2016-09-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-01-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多