2010-11-07 3 views
0

Я написал код, который ищет определенную строку из таблицы базы данных. Что я хочу реализовать, это поиск, например, когда мы ищем друзей на facebook означает, что он возвращает результаты, соответствующие дате ввода, даже если это частичный , например, если я хочу найти Эндрю, как только я вхожу одиночные результаты символов начнут появляться, если я вхожу «ЭН» как AnDy Первозванный и ....Осуществить Поиск из базы данных по алфавиту вводятся

вот мой код для текстового поля текст изменен метод

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 Context Database файл и использовать следующий код, чтобы добиться того, что вы пытаетесь (быстро печатаю это, извините, если есть какая-либо ошибка):

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 не в контексте. Я не знаю, как использовать USE linq –

+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 –

1

Для того, чтобы позвонить в базу данных, то CommandText становится

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

Однако, я бы не назвал обратно в базу данных каждый раз, когда: Я хотел бы использовать авто полный контроль. Есть несколько autocomplete controls для Winforms. And this SO answer too.

+0

, что доза + «%» является для ?? –

+0

Это даст «%» на основе вашего примера – gbn

+0

, но он не работает, говорит неправильный santax около @username –

Смежные вопросы