在 C# mysql 中获取单个列的值并将其放入文本框中

Get values of a single column in C# mysql and put it in textbox

我有这个 table 叫做 WeeklySales,有 2 列,DateandTimeSales.现在,我的表单上有 3 个文本框。我想获得添加到 table 上的最新值,所以我有这个字符串。

    string sql = "SELECT Sales FROM database.weeklysales ORDER BY DateandTime DESC LIMIT 3";

现在,我有这个数据库(可以说那个月是日期),

 DateandTime | Sales
 March       | 0
 February    | 0
 January     | 0

并使用该字符串获得此结果:

 Sales
 0
 0
 0

现在,我想将第一行放入第一个文本框,然后将第二行放入第二个文本框,依此类推...现在,我不知道在 Datareader 中输入什么...

        try
        {
            con.Open();
            using (reader = cmd.ExecuteReader())
            {
               first.Text = ?
               second.Text = ?
               third.Text = ?
            }
        }
        finally
        {
            con.Close();
        }

我已经搜索过了,但不幸的是他们只找到了第一行。

SqlDataReader class 有一个 Read() 方法,其中 returns 一个 bool 只要有更多的行要读取。例如,您可以使用它通过 while 循环读取多行。

using (SqlDataReader reader = cmd.ExecuteReader()
{
   while (reader.Read())
   {
      //Do your stuff here
   }
}

有关详细信息,请参阅 https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.read%28v=vs.110%29.aspx

因为您只有 3 个文本框要填写 - 没有循环,只需手动推进 reader。

MySqlDataReader dr = cmd.ExecuteReader();
dr.Read();
first.Text = dr.GetValue(0).ToString();
dr.Read();
second.Text = dr.GetValue(0).ToString();
dr.Read();
third.Text = dr.GetValue(0).ToString();

以下代码会对您有所帮助,

using (reader = cmd.ExecuteReader())
{
    if (reader.HasRows)
    {   
       int i = 1;                    
       while (reader.Read())
       {
          switch (i)
          {
             case 1:
             first.Text = reader["Sales"].ToString();
             break;
             case 2:
             second.Text = reader["Sales"].ToString();
             break;
             default:
             third.Text = reader["Sales"].ToString();
             break;             
          } 
          i += 1;         
       }
     }
}

避免重复或在多个对象的情况下

public void Example(MySqlDataReader dr)
        {
            TextBox a = new TextBox();
            TextBox b = new TextBox();
            TextBox c = new TextBox();

            foreach(TextBox current in new List<TextBox> { a, b, c })
            {
                dr.Read();
                current.Text = dr.GetValue(0).ToString();
            }
        }