带有select distinct列的c#mysql查询
我试图将不同的行(一个小字符串)放在一个字符串变量中,该变量以文本框为目标,但它只返回列中具有不同内容的一些行。我使用了类似的代码,但目标是datagridview,工作正常。我尝试了不同的方法,我错在哪里带有select distinct列的c#mysql查询,c#,mysql,mysqldatareader,C#,Mysql,Mysqldatareader,我试图将不同的行(一个小字符串)放在一个字符串变量中,该变量以文本框为目标,但它只返回列中具有不同内容的一些行。我使用了类似的代码,但目标是datagridview,工作正常。我尝试了不同的方法,我错在哪里 stConsulta = "SELECT distinct symbol from ticks"; MySqlCommand MyCmd = new MySqlCommand(stConsulta,cnn); MyCmd.Connection = cnn; MyCmd.CommandText
stConsulta = "SELECT distinct symbol from ticks";
MySqlCommand MyCmd = new MySqlCommand(stConsulta,cnn);
MyCmd.Connection = cnn;
MyCmd.CommandText = stConsulta;
MySqlDataReader myreader = MyCmd.ExecuteReader();
if (myreader.HasRows)
{
while (myreader.Read())
{
myreader.Read();
stSymbols = stSymbols + myreader.GetString("symbol") + " ";
}
}
cnn.Close();
textBox1.Text = stSymbols;
首先,不要调用
myReader.Read()
两次。你每隔一行就跳过一行
您指出行不多,但为了提高效率,您可能还需要使用StringBuilder
...
var stSymbols = new StringBuilder();
while (myreader.Read())
stSymbols.Append(myreader.GetString("symbol") + " ");
...
textBox1.Text = stSymbols.ToString();
首先,不要调用
myReader.Read()
两次。你每隔一行就跳过一行
您指出行不多,但为了提高效率,您可能还需要使用StringBuilder
...
var stSymbols = new StringBuilder();
while (myreader.Read())
stSymbols.Append(myreader.GetString("symbol") + " ");
...
textBox1.Text = stSymbols.ToString();
忽略循环中的这一行即可
myreader.Read();
当您在while(myreader.Read())条件下使用它时,它开始读取它。所以不要在循环中再次调用它。这就是你的错误所在
if (myreader.HasRows)
{
while (myreader.Read())
{
stSymbols = stSymbols + myreader["symbol"].ToString() + " ";
}
}
你很乐意去忽略循环中的这一行
myreader.Read();
if (myreader.HasRows)
{
while (myreader.Read())
{
stSymbols = stSymbols + myreader["symbol"].ToString() + " ";
}
}
当您在while(myreader.Read())条件下使用它时,它开始读取它。所以不要在循环中再次调用它。这就是你的错误所在
if (myreader.HasRows)
{
while (myreader.Read())
{
stSymbols = stSymbols + myreader["symbol"].ToString() + " ";
}
}
你很高兴去我想我刚听到一只手撞到额头的声音。我想我刚听到一只手撞到额头的声音。你能解释一下这是如何解决OP的问题的吗?reader.Read()如果有行要读,则返回true。然后一行一行地读。若并没有更多的行可以读取,那个么返回false,然后退出while循环。这是如何解决OP的问题的?基本上,当您在内部循环中编写myreader.Read()时,它会重置导致问题的datareader。因此,您不需要在while循环中编写myreader.Read()。希望在我对第二位读者发表评论后,现在一切都清楚了。谢谢大家!然后我还使用了stringbuilder的建议并留下了这段代码。你能解释一下这是如何解决OP问题的吗?reader.Read()如果有行要读取,则返回true。然后一行一行地读。若并没有更多的行可以读取,那个么返回false,然后退出while循环。这是如何解决OP的问题的?基本上,当您在内部循环中编写myreader.Read()时,它会重置导致问题的datareader。因此,您不需要在while循环中编写myreader.Read()。希望在我对第二位读者发表评论后,现在一切都清楚了。谢谢大家!然后我还使用了stringbuilder建议并留下了这段代码。
if (myreader.HasRows)
{
while (myreader.Read())
{
stSymbols = stSymbols + myreader["symbol"].ToString() + " ";
}
}