2013-12-23 2 views
0

Я пытаюсь поместить строки DISTINCT (которая является небольшой строкой) в строковой переменной, нацеленной на текстовое поле, но возвращает только некоторые строки с различным содержимым в столбце. Я использовал аналогичный код, но нацелился на datagridview и работает нормально. Я пробовал разные подходы, где я ошибаюсь?C# mysql-запрос с выделенным отдельным столбцом

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; 

ответ

3

Не называть myReader.Read() дважды, для начала. Вы пропускаете все остальные строки.

Вы указали, что не так много строк, но вы также можете использовать StringBuilder для эффективности.

... 
var stSymbols = new StringBuilder(); 

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

... 
textBox1.Text = stSymbols.ToString(); 
+3

Я думаю, что я только что услышал звук удара рукой лоб. –

1

Просто игнорируйте эту строку внутри цикла

myreader.Read(); 

, когда вы используете это в состоянии время (myreader.Read()) он начинает читать. поэтому не вызывайте его снова в цикле. это ваша ошибка.

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

И вы хорошо идти

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

Можете ли вы включить некоторое объяснение того, как это решает проблему OP? – Hannele

+0

reader.Read() возвращает true, если есть строки для чтения. а затем читать строки один за другим. если больше нет строки для чтения, она возвращает false, и вы выходите из цикла while. теперь как это решает проблему OP? в основном, когда вы пишете myreader.Read() во внутреннем цикле, он перезапускает datareader, который вызывает проблему. Поэтому вам не нужно писать myreader.Read() внутри цикла while. Надеюсь, теперь это ясно @Hannele –

+0

действительно, как только я прокомментировал второй reader.read(), он отлично работал. Спасибо вам всем! Затем я также использовал советник по строительству и оставил этот код. – user3130592

 Смежные вопросы

  • Нет связанных вопросов^_^