2016-04-03 13 views
0

Ich habe wenig Problem Ich versuche, sequenzierte Zahlen vor den Daten hinzuzufügen, die ich aus einer SQL Server-Datenbank abrufen werde, wie unten gezeigt.Sequenznummer zu den Listenfeldern hinzufügen, die von SqlDataReader() abgerufen werden

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

Und das Ergebnis wird so sein:

enter image description here

TY alle

+1

Warum nicht serverseitige Sequenznummer verwenden? Es sollte Ihren Code vereinfachen und die Ergebnisse konsistenter machen. Überprüfen Sie Folgendes: [ROW_NUMBER (Transact-SQL)] (https://msdn.microsoft.com/en-CA/library/ms186734.aspx). Es ist eine Partitionsfunktion, aber Sie können die Partitionierung weglassen und nur ORDER BY angeben, siehe Beispiele. – Neolisk

Antwort

0

ich meine Server-ID-Sequenz nur das Problem so lösen:

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

Sie die Einstellung der "Sequenznummer" auf die Anzahl der Felder zurück in die Ergebnisse beim Iterieren über jede Zeile mit dem dr.Read(). Es ist unnötig für die for Schleife. Was Sie tun sollten, ist Ihre Einstellung Zählervariable außerhalb des dr.Read() und es dann in Inkrementieren ...

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

Das gibt mir die Fehler-Index außerhalb des Bereichs Ausnahme wurde nicht behandelt –

+0

Nicht sicher, wie Sie eine "IndexOutOfRange" Ausnahme von ihm bekommen würde ... – ffa

+0

Es gibt Fehler zu mir auch, weil nur ein Mal das erste Mal, wenn wir in diesem gehen While-Schleife zählt alle Daten aller Felder. also müssen wir for-Schleife innerhalb While-Schleife verwenden ... – nick

0

Add der Betrieb auf Objekte der Lage ist, nicht nur auf Saiten. Warum?

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) 

Jetzt können Sie überprüfen, was Sie wollen von Elemente, weil diese Objekte von ModelClass sind.

Code von Hand geschrieben, nicht in der IDE getestet.

Verwandte Themen