带有select distinct列的c#mysql查询

带有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

我试图将不同的行(一个小字符串)放在一个字符串变量中,该变量以文本框为目标,但它只返回列中具有不同内容的一些行。我使用了类似的代码,但目标是datagridview,工作正常。我尝试了不同的方法,我错在哪里

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() + " ";
    }
}