将序列号添加到 SqlDataReader() 检索的列表框项中
Add sequence number to the listbox items retrieved by SqlDataReader ()
我没有什么问题,我正在尝试在将从 SQL 服务器数据库检索的数据前面添加序列号,如下所示。
public partial class Form1 : Form
{
SqlConnection con = new SqlConnection(@"Server=.;database=test;integrated security=false;user id=sa;pwd=@admin00");
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();
}
结果会是这样的:
TY全部
您将 "sequence number" 设置为结果中返回的 字段数 ,同时使用 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;
}
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.
中测试
我只是使用我的服务器 ID 序列来解决这样的问题:
SqlConnection con = new SqlConnection(@"server=.;database=test;integrated security=false;user id=sa;pwd=@admin00");
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());
}
我没有什么问题,我正在尝试在将从 SQL 服务器数据库检索的数据前面添加序列号,如下所示。
public partial class Form1 : Form
{
SqlConnection con = new SqlConnection(@"Server=.;database=test;integrated security=false;user id=sa;pwd=@admin00");
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();
}
结果会是这样的:
TY全部
您将 "sequence number" 设置为结果中返回的 字段数 ,同时使用 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;
}
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.
中测试我只是使用我的服务器 ID 序列来解决这样的问题:
SqlConnection con = new SqlConnection(@"server=.;database=test;integrated security=false;user id=sa;pwd=@admin00");
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());
}