0

我试图将 DISTINCT 行(这是一个小字符串)放在一个针对文本框的字符串变量中,但它只返回列中具有不同内容的一些行。我使用了类似的代码,但针对 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;
4

3 回答 3

3

首先,不要调用myReader.Read()两次。您正在跳过每隔一行。

您表示行数不多,但您可能还想使用 aStringBuilder来提高效率。

...
var stSymbols = new StringBuilder();

while (myreader.Read())
    stSymbols.Append(myreader.GetString("symbol") + " ");

...
textBox1.Text = stSymbols.ToString();
于 2013-12-23T20:13:08.257 回答
1

只需忽略循环内的这一行

myreader.Read();

当您在 while(myreader.Read()) 的条件下使用它时,它会开始读取它。所以不要在循环中再次调用它。这就是你的错误。

if (myreader.HasRows)
{
    while (myreader.Read())
    {
        stSymbols = stSymbols +  myreader["symbol"].ToString() + " ";
    }
} 

你可以走了

于 2013-12-23T20:24:12.587 回答
0
if (myreader.HasRows)
{
    while (myreader.Read())
    {
        stSymbols = stSymbols +  myreader["symbol"].ToString() + " ";
    }
} 
于 2013-12-23T20:26:55.347 回答