Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/14: Рейтинг темы: голосов - 14, средняя оценка - 4.71
IsRiot
9 / 9 / 2
Регистрация: 05.07.2013
Сообщений: 86
1

Поиск по таблице С#

05.07.2013, 09:40. Просмотров 2684. Ответов 16
Метки нет (Все метки)

Всем привет!
У меня вопрос...
Есть у меня БД Access, не буду подробно, там есть
Таблица с Фамилиями, таблица с Именами, таблица с Отчествами и собственно таблица с Людьми (которая хранит код фамилии, имени и т.д).

Создав подключение, я создал в графическом дизайнере в DataSet еще один DataTable и заполнил его с помощью запроса (объединившего все таблицы). Перетащив из "Источники данных" эту таблицу на форму, авт. сгенерировались bindingSource, Navigator, Adapter, AdapterManager...

Теперь grid все красиво выводит, но я в тупике... Как сделать поиск???
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2013, 09:40
Ответы с готовыми решениями:

Поиск в таблице
Есть ли в С# методы поиска, аналогичные методу Locate в Delphi? То есть, мне нужно просто...

Поиск по таблице
Здравствуйте. кто сможет помочь? сижу читаю никак не могу понять . МОЕ ЗАДАНИЕ. ГАИ. Разработать...

Поиск в таблице
На форме есть datagridview в которой отображается таблица с акцесс, необходимо произвести поиск по...

Поиск записей в таблице
всем добрый день проблема в следующем не могу сделать поиск в базе данных записей нужно чтобы...

Поиск по таблице по параметрам
Здравствуйте, дали задание для шарпа, раньше с ним дела не имел, поставил на форму datagridview,...

16
Tonoyankar
8 / 8 / 2
Регистрация: 15.05.2013
Сообщений: 32
05.07.2013, 14:58 2
http://msdn.microsoft.com/ru-ru/library/way3dy9w.aspx
0
IsRiot
9 / 9 / 2
Регистрация: 05.07.2013
Сообщений: 86
07.07.2013, 20:40  [ТС] 3
у меня бд из 169 тысяч записей, подскажите как сделать поиск?
по строкам искать очень долго?
запросом будет быстрее?
0
Tonoyankar
8 / 8 / 2
Регистрация: 15.05.2013
Сообщений: 32
07.07.2013, 20:43 4
Намного быстрее!
0
07.07.2013, 20:43
IsRiot
9 / 9 / 2
Регистрация: 05.07.2013
Сообщений: 86
08.07.2013, 07:56  [ТС] 5
а запросом каким?
DataTable.Select к таблице полученной с помощью запроса к БД
или нужно сделать отдельный запрос к БД?
простите, нуб в БД
0
Tonoyankar
8 / 8 / 2
Регистрация: 15.05.2013
Сообщений: 32
08.07.2013, 10:15 6
Прямым запросом к базе.
0
BigOblom
121 / 121 / 17
Регистрация: 30.06.2010
Сообщений: 457
08.07.2013, 12:45 7
IsRiot, просто модифицируйте свой начальный запрос на выборку, добавив к нему условие where.
Небольшой пример на SQL Server Compact. Пишем функцию, которая принимает текст запроса и возвращает заполненный данными DataSet.
C#
1
2
3
4
5
6
7
8
9
10
11
private DataSet Query(string queryString)
{
    SqlCeEngine engine = new SqlCeEngine(pathDB);
    SqlCeConnection connection = new SqlCeConnection(engine.LocalConnectionString);
    SqlCeDataAdapter da = new SqlCeDataAdapter(queryString, connection);
    DataSet ds = new DataSet();
    connection.Open();
    da.Fill(ds);
    connection.Close();
    return ds;
}
И собственно юзаем.
C#
1
2
3
4
5
dataGrid1.AutoGenerateColumns = true;
string queryString = "select n.firstname, n.middlename, n.lastname from names where n.lastname like \"\"";
dataGrid1.ItemsSource = Query(queryString).Tables[0].DefaultView;
dataGrid1.DataContext = Query(queryString).Tables[0];
dataGrid1.IsReadOnly = true;
1
IsRiot
9 / 9 / 2
Регистрация: 05.07.2013
Сообщений: 86
10.07.2013, 08:46  [ТС] 8
Благодарю, именно так я и сделал.
Но теперь у меня возник еще один вопрос...
Обрабатывая событие TextChange, можно ли сделать задержку перед тем как выполнится запрос.
Допустим, сначала пользователь вводит текст а спустя какое то время создается запрос...
0
Tonoyankar
8 / 8 / 2
Регистрация: 15.05.2013
Сообщений: 32
10.07.2013, 09:36 9
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 private void txtMyTextBox_KeyDown(object sender, KeyEventArgs e)
        {
 
            if (e.KeyCode == Keys.Enter)
            {
                try
                {
                    //myquery
                }
                catch (Exception ex)
                {
                   
                }
                
            }
        }
запрос создастся после нажатия пользователем Enter в текст боксе.
0
BigOblom
121 / 121 / 17
Регистрация: 30.06.2010
Сообщений: 457
10.07.2013, 09:41 10
Кликните здесь для просмотра всего текста
Цитата Сообщение от Tonoyankar Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 private void txtMyTextBox_KeyDown(object sender, KeyEventArgs e)
        {
 
            if (e.KeyCode == Keys.Enter)
            {
                try
                {
                    //myquery
                }
                catch (Exception ex)
                {
                   
                }
                
            }
        }
запрос создастся после нажатия пользователем Enter в текст боксе.


На KeyDown вешать не рекомендую. Лучше KeyPress либо KeyUp.
0
IsRiot
9 / 9 / 2
Регистрация: 05.07.2013
Сообщений: 86
10.07.2013, 09:59  [ТС] 11
По клавише Enter это другой разговор, а можно ли сделать без нажатия кнопок?
Может быть можно использовать Timer???
0
nio
5973 / 3379 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
10.07.2013, 09:59 12
Цитата Сообщение от IsRiot Посмотреть сообщение
подскажите как сделать поиск?
по строкам искать очень долго?
запросом будет быстрее?
Тут зависит от ситуации, если клиент грузит сначала все данные, а затем нужен фильтр для поиска чего либо, то я бы сделал при помощи Linq на стороне клиента выборку из уже загруженных данных. Также в этом случае можно использовать свойство BindingSource.Filter
Если же клиент сначала определяет фильтр, а затем выполняет выборку, то тут данные нужно получать из БД.

Следует учитывать, что каждый запрос к БД имеет накладные расходы на очистку таблицы, создание, открытие, закрытие соединения и выборку данных. И они могут превысить время фильтрации на клиентской стороне. Одним из обоснований постоянных обращений к БД является то, что данные могут изменяться другими клиентами, но в данном случае используется локальная БД Access.
1
Tonoyankar
8 / 8 / 2
Регистрация: 15.05.2013
Сообщений: 32
10.07.2013, 10:18 13
Цитата Сообщение от IsRiot Посмотреть сообщение
По клавише Enter это другой разговор, а можно ли сделать без нажатия кнопок?
Может быть можно использовать Timer???
можно, если определена логика завершил ли пользователь набор своего текста?
0
IsRiot
9 / 9 / 2
Регистрация: 05.07.2013
Сообщений: 86
10.07.2013, 10:21  [ТС] 14
допустим если прошло какое то время (допустим 3 сек.) когда пользователь перестал что то вводить
0
Tonoyankar
8 / 8 / 2
Регистрация: 15.05.2013
Сообщений: 32
10.07.2013, 10:55 15
Цитата Сообщение от IsRiot Посмотреть сообщение
допустим если прошло какое то время (допустим 3 сек.) когда пользователь перестал что то вводить
Если тебе так угодно...
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
DateTime LastChange;
        bool flag = true;
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            
                LastChange = DateTime.Now;
                flag = !flag;
            
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (flag)
                return;
            TimeSpan tsp = DateTime.Now.Subtract(LastChange);
            if (tsp.Seconds >= 3)
            {
                timer1.Stop();
 
                MessageBox.Show("Ok");
            }
 
        }
1
IsRiot
9 / 9 / 2
Регистрация: 05.07.2013
Сообщений: 86
12.07.2013, 10:58  [ТС] 16
тема закрыта, короче
сделал поиск с кнопки! уж слишком много костылей нужно прикрутить
0
BigOblom
121 / 121 / 17
Регистрация: 30.06.2010
Сообщений: 457
12.07.2013, 12:02 17
На KeyUp бы повешал запрос. И при отпускании кнопки выдавались все подходящие варианты.
Примерно такой запрос:
Delphi
1
2
3
4
5
6
{ поиск по ФИО, происходит при каждом нажатии }
procedure TMainForm.edtSearchFioKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  SearchFio('SELECT * FROM Fio WHERE Fio LIKE "' + edtSearchFio.text + '%"');
end;
0
12.07.2013, 12:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2013, 12:02

поиск записей в таблице
В Access сделал небольшую БД и импортировал ее в проект на C# через DataSet. На форму...

Поиск данных в таблице
Ребят объясните как сделать поиск в таблице базы данных ? Есть поток который будет возобновлять...

Поиск записи в таблице DataSet
Есть таблица пожаров в БД firebird , по ней нужно создать и постоянно обновлять данные в таблице ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru