2016-04-03 124 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循环中使用for循环... – 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) 

现在你可以从Items中检查任何你想要的东西,因为这些都是ModelClass的对象。

手动编写代码,未在IDE中测试过。