如何从mysql中显示数据并逐个显示?

时间:2015-01-25 01:28:50

标签: c# mysql

我在mysql中有一个数据,我想每次单击按钮时逐个显示数据。怎么做?

  

string ConnectToServer = @" server = *。; port = ****; user id = sampleID;密码= samplePW;数据库= SAMPLEDB;池=假&#34 ;;

    public void GetNames()
    {


        MySqlConnection NameConnector = null;
        MySqlDataReader NameReader = null;

        try
        {
            NameConnector = new MySqlConnection(ConnectToServer);
            NameConnector.Open();

            string Name = "SELECT * from sampleNames";
            MySqlCommand NameCommand = new MySqlCommand(Name, NameConnector);
            NameReader = NameCommand.ExecuteReader();

            while (NameReader.Read())
            {
                Console.WriteLine(NameReader.GetInt32(0) + ": " + NameReader.GetString(1));
                NameLabel.Text += NameReader.GetString("Names") + "\n";
            }
        }
        catch (MySqlException NameException)
        {
            Console.WriteLine("error : (0)", NameException.ToString());
        }
        finally
        {
            if (NameReader != null)
            {
                NameReader.Close();
            }

            if (NameConnector != null)
            {
                NameConnector.Close();
            }

        }

    }

private void ButtonName_Click(object sender, EventArgs e)
{
    GetNames();
}

输出:

Name1
Name2
Name3
Name4
Name5

但我不是,Name每次单击按钮时都会逐一显示

像这样:

click = output Name1
click = output Name2
click = output Name3
click = output Name4
click = output Name5

2 个答案:

答案 0 :(得分:0)

您正在阅读所有记录:

while (NameReader.Read())

如果您只想阅读一个,请尝试将所有连接放在方法之外并运行

NameReader = NameCommand.ExecuteReader();

只有一次。

然后改变

while (NameReader.Read())

NameReader.Read()

答案 1 :(得分:0)

至少有两种方法可以实现,具体取决于您需要数据的实时性以及您想要进行多少个DB调用。他们在这里:

  1. 选项#1
  2. 初始化名称列表和索引变量的类级别变量。

    List<string> names = null;
    int currentNameIndex = 0;
    
    单击处理程序上的

    ,如果names为null,则使用DB中的所有名称填充names变量。显示第一项如下。

    private void ButtonName_Click(object sender, EventArgs e)
    {
        if (names == null)
        {
         names = GetNames();
        }
    
        if (currentNameIndex < names.Count)
        {
         NameLabel.Text += names[currentNameIndex++];
        }    
    }
    

    需要修改getnames以返回名称列表。

    1. 选项#2
    2. 您可以更改SQL查询以从表中获取第一条记录,而不是在1 DB调用中检索整个列表。 (基于Id或某些密钥)

      点击一下,GetNames只会检索1条记录并显示该记录。 在下一次点击它将检索另一条记录,但不是第一条记录。

      这通常涉及涉及键列的查询。请发布您的表架构,我可以回答查询。

      例如查询是

      int currentNameId = -1;  // class level variable.
      

      查询是

      Select TOP 1 nameId, names from SampleNames Where NameId > currentNameId Order By NameId;
      
      currentNameId = int.Parse(NameReader[nameId].ToString());
      

      上述查询假设nameId是唯一键,值从0开始或大于-1,并且它们是增量的。 (身份PK等)

      正如我所提到的,如果你能提供表结构,我们可以更好地回答。

      选项#1在数据库调用中很有效,但可能有过时的数据。 选项#2更加健谈,但实时数据比选项#1更多。