2013-03-01 53 views
0

我的程序中有一个搜索按钮。我想要的是每次搜索时我都会输入lastname,并且当lastname等于数据库中的任何lastname时,该人的firstnamelastname将显示在listbox中,并且每当我单击listbox中的结果该人的详细信息将显示在textboxes中。问题是,当有姓氏相同的人,他们的名字是唯一列出的,但是当我点击姓名时,相同的细节出现在textboxesOleDB Select Statement

请帮忙。

这里是我的代码:

connection.Open(); 
    OleDbCommand select = new OleDbCommand(); 
    select.Connection = connection; 
    select.CommandText = "Select * From Accounts Where Lastname = '" + searchtb.Text + "'"; 
    OleDbDataReader reader = select.ExecuteReader(); 
    while (reader.Read()) 
    { 
     listBox1.Items.Add(reader[1].ToString() + "," + reader[2].ToString()); 
    } 
    connection.Close(); 
+3

有一件事是对的,这是错的。它对** SQL注入攻击**是开放式的。 *认真*考虑参数化该输入。 – WhozCraig 2013-03-01 02:18:25

+0

除了SQL注入容易。如果你想找到只有部分姓氏的人,你应该使用“Select * From Accounts Where Lastname Like'”+ searchtb.Text +“%'” – echavez 2013-03-01 07:16:11

回答

2

您不要在这段代码有任何错误,你的错误都不可能对你listbox_events。

显示列表框部分的代码。

0
cFat_items2 = new OleDbDataAdapter(" 
     SELECT COUNT(Fat_Items.i_num) AS Count_i_num, Fat_Items.i_num, g.i_num 
     FROM Fat_Items INNER JOIN Fat_Items AS g ON Fat_Items.fat_nr = g.fat_nr 
     WHERE Fat_Items.i_num = '" + this.kLDataSet.Fat_Items.Rows[i].ItemArray[0].ToString() + "' 
     AND g.i_num = '" + this.kLDataSet.Fat_Items.Rows[j].ItemArray[0].ToString() + "' 
     GROUP BY Fat_Items.i_num, g.i_num HAVING COUNT(Fat_Items.i_num)>='" + Support + "'", con); 

cFat_items2.Fill(dFat_items2);