2016-04-03 15 views
0

У меня мало проблем. Я пытаюсь добавить упорядоченные числа перед данными, которые я буду извлекать из базы данных SQL Server, как показано ниже.Добавить порядковый номер в элементы списка, полученные SqlDataReader()

public partial class Form1 : Form 
{ 
    SqlConnection con = new SqlConnection(@"Server=.;database=test;integrated security=false;user id=sa;[email protected]"); 
    SqlCommand com = new SqlCommand(); 

    SqlDataReader dr; 

    public Form1() 
    { 
     InitializeComponent(); 
     com.CommandText = "select book_name from Table_book"; 
     com.Connection = con; 
     con.Open(); 

     dr = com.ExecuteReader(); 

     while (dr.Read()) 
     { 
      for (int i = 1; i <= dr.FieldCount; i++) 
      { 
       listBox1.Items.Add(i+"-"+dr[0].ToString()); 
       i += i; 
      } 
     } 

     if (listBox1.Items.Count == 0) 
     { 
      MessageBox.Show("No Data Found");    
     } 

     dr.Close(); 
     con.Close(); 
    } 

И результат будет так:

enter image description here

TY все

+1

Почему бы не использовать на стороне сервера, порядковый номер? Он должен упростить ваш код и сделать результаты более согласованными. Проверьте это: [ROW_NUMBER (Transact-SQL)] (https://msdn.microsoft.com/en-CA/library/ms186734.aspx). Это функция разбиения, но вы можете опустить разделение и просто указать ORDER BY, см. Примеры. – Neolisk

ответ

0

Я просто использовать мой сервер последовательности Id, чтобы решить эту проблему так:

SqlConnection con = new SqlConnection(@"server=.;database=test;integrated security=false;user id=sa;[email protected]"); 
     con.Open(); 
     SqlCommand sqlcom = new SqlCommand("select book_id,book_name from Table_book", con); 
     SqlDataReader sqlDR=sqlcom.ExecuteReader(); 
     while(sqlDR.Read()) 
     { 
     listBox1.Items.Add(sqlDR["book_id"].ToString()+"-"+sqlDR["book_name"].ToString()); 
     } 
-1

Вы установки "порядковый номер" к числу полей возвращаемых в результаты, итерации по каждой строке с помощью dr.Read(). Это не нужно для цикла for. То, что вы должны делать настройки вашей переменной счетчика вне dr.Read(), а затем увеличивая его внутри ...

int i = 1; 
while (dr.Read()) 
{ 
    // set listbox item text 
    listBox1.Items.Add(i.ToString() + "-" + dr[0].ToString()); 
    i+=1; 
} 
+0

Это дает мне Это исключение ошибки за пределами диапазона было необработанным –

+0

Не знаете, как вы могли бы получить из него исключение «IndexOutOfRange» ... – ffa

+0

Это дает мне ошибку, потому что только один раз, когда мы входим в это while зацикливаем все данные всех полей. поэтому нам нужно использовать для цикла внутри цикла while ... – nick

0

Add способен работать на объектах, а не только на струнах. Почему?

class ModelClass { 

    // for use in algorithm, may be presented in GUI or not 
    int Sequence { get; set; } 

    string Description { get ; set ;} 
    // ... what You want, is is typical model class 

    override string ToString() { 
    // return what you want, is presented in GUI 
    return Descrition; 
    } 
    ModelClass(string n, int i) ... 
} 
... 

    listBox.Items.Add(new ModelClass(i.ToString(), dr[...] // sequence) 

Теперь вы можете проверить все, что хотите, от предметов, потому что это объекты ModelClass.

Код, написанный вручную, не тестировался в IDE.

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

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