我在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
答案 0 :(得分:0)
您正在阅读所有记录:
while (NameReader.Read())
如果您只想阅读一个,请尝试将所有连接放在方法之外并运行
NameReader = NameCommand.ExecuteReader();
只有一次。
然后改变
while (NameReader.Read())
到
NameReader.Read()
答案 1 :(得分:0)
至少有两种方法可以实现,具体取决于您需要数据的实时性以及您想要进行多少个DB调用。他们在这里:
初始化名称列表和索引变量的类级别变量。
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以返回名称列表。
您可以更改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更多。