2012-11-28 46 views
0

嗨我想創建一個搜索ListView的搜索框我設法做到這一點,它的工作原理,如果我讓它只能通過用戶名搜索。只要我用一個用戶名替換用戶名參數代碼不起作用anymore.Here是我的代碼:用於listview的搜索框不能正常工作

string searchSelectBox = SearchSelectDropDown.SelectedItem.Text; 

GetAllUsersFromDb.SelectCommand = 
    "SELECT aspnet_Users.UserName, aspnet_Roles.RoleName, " 
    + "aspnet_Membership.Email, aspnet_Membership.LastLoginDate " 
    + "FROM aspnet_Users " 
    + "INNER JOIN aspnet_UsersInRoles " 
    + "ON aspnet_Users.UserId = aspnet_UsersInRoles.UserId " 
    + "INNER JOIN aspnet_Roles " 
    + "ON aspnet_UsersInRoles.RoleId = aspnet_Roles.RoleId " 
    + "INNER JOIN aspnet_Membership " 
    + "ON aspnet_Users.UserId = aspnet_Membership.UserId " 
    + "WHERE @SelectField LiKE @Param"; 
GetAllUsersFromDb.SelectParameters.Clear(); 
GetAllUsersFromDb.SelectParameters.Add("SelectField" , searchSelectBox); 
GetAllUsersFromDb.SelectParameters.Add("Param" , SearchBox.Text); 
GetAllUsersFromDb.DataBind(); 
textListView.DataBind();  

的searchSelectBox可以採取的值是用戶名,角色名和電子郵件

如果我更換用戶名@SelectField並鍵入用戶名corect該搜索的作品,但事實並非如此。

這裏有什麼問題?

+0

當你把一個破發點中有什麼SearchSelectDropDown.SelectedItem.Text的價值?如何添加該控件中的ListItems - 硬編碼?動態添加? –

+0

不應該是這樣的:WHERE UserName like @ Param' - 或 - WHERE UserName like @ SelectField'。您必須將數據庫中的某些內容與輸入進行比較,而不是將兩個輸入進行比較。哦,我看到'UserName'像@Param vs UserName像@Param – 2012-11-28 21:30:41

+0

你不能使用參數作爲列名。參數僅用於數據值 –

回答

2

試試這個

string searchSelectBox = SearchSelectDropDown.SelectedItem.Text; 

    GetAllUsersFromDb.SelectCommand = 
     string.Format("SELECT aspnet_Users.UserName, aspnet_Roles.RoleName, 
         aspnet_Membership.Email, aspnet_Membership.LastLoginDate 
         FROM aspnet_Users 
         INNER JOIN aspnet_UsersInRoles ON aspnet_Users.UserId = aspnet_UsersInRoles.UserId 
         INNER JOIN aspnet_Roles ON aspnet_UsersInRoles.RoleId = aspnet_Roles.RoleId 
         INNER JOIN aspnet_Membership ON aspnet_Users.UserId = aspnet_Membership.UserId 
         WHERE {0} LiKE @Param", searchSelectBox); 
    GetAllUsersFromDb.SelectParameters.Clear(); 

    GetAllUsersFromDb.SelectParameters.Add("Param" , SearchBox.Text); 
    GetAllUsersFromDb.DataBind(); 
    textListView.DataBind(); 
+0

看起來好像可以工作,但我建議確保searchSelectBox位於預期的3個字符串列表中以避免SQL注入攻擊...... – 2012-11-28 21:34:59

+0

當然,您必須驗證searchSelectBox是預期值。 –