2010-11-07 64 views
0

我寫了一個代碼,從數據庫表中搜索特定的字符串。我想要實現的搜索就像我們在Facebook上搜索朋友時的搜索意味着它返回與給定輸入匹配的結果,即使它例如是部分 如果我想只要我進入單字符結果應開始,如果我輸入出現在搜索ANDREW「一個」像 安迪 安德魯 和....執行從數據庫搜索字母輸入

這裏是我的文本框代碼文字改變方法

table = new DataTable(); 
    table.Columns.Add("Name"); 
    table.Columns.Add("Type"); 
    table.Columns.Add("Status"); 
    table.Columns.Add("Date Created"); 
    table.Columns.Add("Action"); 

    SqlCommand cmd = new SqlCommand(); 
    cmd.Connection = con; 
    cmd.Parameters.Add("@username", SqlDbType.VarChar).Value = textBoxSearch.Text; 
    cmd.CommandText = "SELECT id,uName,uType,uStatus,uDate from users WHERE [email protected] "; 

    SqlDataReader dr = cmd.ExecuteReader(); 
    if (dr.HasRows == true) 
    { 
     while (dr.Read()) 
     { 
      MessageBox.Show(dr["uName"].ToString() + dr["uType"].ToString() + dr["uStatus"].ToString()); 
      row = table.NewRow(); 
      row["Name"] = dr["uName"].ToString(); 
      row["Type"] = dr["uType"].ToString(); 
      row["Status"] = dr["uStatus"].ToString(); 
      row["Date Created"] = dr["uDate"].ToString(); 
      // row["Action"] = new Button(); 
      table.Rows.Add(row); 
      UsersView.DataSource = table; 
     }//End While for entering peresent amount of data     
    }//End If to check wether or not users exist 
    dr.Close();//Close Datareader 
} 

回答

1

當你使用C#時,爲什麼不去找更多的LINQ-y?

設置你的LINQ數據庫上下文文件,並使用下面的代碼來實現你想要什麼(快速打字,對不起,如果有任何錯誤):

table = new DataTable(); 
table.Columns.Add("Name"); 
table.Columns.Add("Type"); 
table.Columns.Add("Status"); 
table.Columns.Add("Date Created"); 
table.Columns.Add("Action"); 

var db = new DbDataContext(); 
var users = (from u in db.users 
      where u.Contains(textBoxSearch.Text) 
      select u).ToList(); 
foreach(var user in users) 
{ 
    MessageBox.Show(user.uName + user.uType + user.uStatus); 
      row = table.NewRow(); 
      row["Name"] = user.uName; 
      row["Type"] = duser.uType; 
      row["Status"] = user.uStatus; 
      row["Date Created"] = user.uDate.ToShortDateString(); 
      table.Rows.Add(row); 
} 

UsersView.DataSource = table; 
+0

有我們一個錯誤DbDataContext不在上下文中。我不知道如何使用LINQ – 2010-11-08 18:54:09

+0

你準備好了dbml文件嗎? DbDataContext將引用該dbml文件的名稱。如果您需要了解絕對的基本知識,請使用以下視頻:http://www.asp.net/linq/videos/how-do-i-linq-to-sql-overview,或者如果您想真正瞭解它-depth,我會推薦一本書或LINQ在這裏的整個系列:http://www.asp.net/linq/videos – 2010-11-08 19:49:33

1

若要回撥到數據庫時,CommandText成爲

... WHERE uName LIKE @username + '%' 

不過,我不會再打到數據庫的每個時間:我會使用自動完成控制。 Winforms有幾個autocomplete controlsAnd this SO answer too

+0

多大劑量+「%」是?? – 2010-11-07 20:47:09

+0

這將給出一個基於你的例子 – gbn 2010-11-07 20:52:11

+0

「an%」,但它不工作說在@username – 2010-11-07 21:15:03