powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Выборка из БД по нескольким параметрам с использованием MVS2012
23 сообщений из 23, страница 1 из 1
Выборка из БД по нескольким параметрам с использованием MVS2012
    #38467260
chezzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Возникла следующая проблема. У меня есть БД, в которой есть таблица. Как осуществить средством Microsoft Visual Studio 2012 (язык программирования VB.net) возможность выборки по нескольким столбцам записей, содержащих нужную мне информацию (информация отличается в разных полях)? Загвоздка в том, чтобы была еще реализована одновременно и выборка по одному из параметров, если остальные параметры пустые. Ниже скрин формы для отбора. Заранее спасибо!

Модератор: Тема перенесена из форума "Visual Basic".
...
Рейтинг: 0 / 0
Выборка из БД по нескольким параметрам с использованием MVS2012
    #38467857
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Выборка из БД по нескольким параметрам с использованием MVS2012
    #38468370
chezzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex Kuznetsov,
С выборкой у меня проблем нет. Я не могу сформировать ее по нескольким параметрам, чтобы была допущена такая ситуация, что один из параметров может отсутствовать. Например (исходя из предоставленной мной формы), если я выбираю "статус заявки" и "СЦ", то о мне ищет по этим критериям, а если указан "статус заявки" и больше ничего, то только по статусу
...
Рейтинг: 0 / 0
Выборка из БД по нескольким параметрам с использованием MVS2012
    #38468411
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
where (somefield = @param or @param is null) and ...
...
Рейтинг: 0 / 0
Выборка из БД по нескольким параметрам с использованием MVS2012
    #38468432
chezzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а как проще все это в коде VB реализовать?
Все на if и elseif сажать не получается. Слишком много операторов и он начинает выдавать белеберду.
...
Рейтинг: 0 / 0
Выборка из БД по нескольким параметрам с использованием MVS2012
    #38468441
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chezzz,

не надо здесь if и elseif. Пишешь запрос один на все случаи, потом просто добавляешь параметры к нему (sql.Parameteres.AddWithValue()) - значение, если пользователь выбрал параметр, и DbNull.Value, если не выбрал
...
Рейтинг: 0 / 0
Выборка из БД по нескольким параметрам с использованием MVS2012
    #38468451
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chezzzAlex Kuznetsov,
С выборкой у меня проблем нет. Я не могу сформировать ее по нескольким параметрам, чтобы была допущена такая ситуация, что один из параметров может отсутствовать. Например (исходя из предоставленной мной формы), если я выбираю "статус заявки" и "СЦ", то о мне ищет по этим критериям, а если указан "статус заявки" и больше ничего, то только по статусуА из какого такого места Вашего вопроса понятно, что Вы можете делать выборки?
Где указан сервер БД и его версия? Где указан сам текст запроса? Где кусок кода, в котором указываются параметры?

Отсюда - каков вопрос, таков ответ.

Pallaris - для разных серверов БД запросы могут быть разными в данном случае, но подход у тебя правильный.
...
Рейтинг: 0 / 0
Выборка из БД по нескольким параметрам с использованием MVS2012
    #38468453
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex Kuznetsovдля разных серверов БД запросы могут быть разными в данном случае

Я не думаю, что это наш случай :)
...
Рейтинг: 0 / 0
Выборка из БД по нескольким параметрам с использованием MVS2012
    #38468465
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallaris,
...
Рейтинг: 0 / 0
Выборка из БД по нескольким параметрам с использованием MVS2012
    #38468506
chezzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dim Con As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & My.Application.Info.DirectoryPath & "\Service.accdb") ' Переменная для подключения базы
Dim SqlCom As OleDb.OleDbCommand ' Переменная для Sql запросов
Dim DT As New Data.DataTable ' Таблица для хранения результатов запроса
Dim DA As OleDb.OleDbDataAdapter ' Адаптер для заполнения таблицы после запроса
Sub LoadAll() 'Процедура чтения всей таблицы из базы
DT.Clear() 'Очищаем таблицу
SqlCom = New OleDb.OleDbCommand("SELECT * FROM [Request]", Con) ' Указываем строку запроса и привязываем к соединению
Con.Open() ' Открываем соединение
SqlCom.ExecuteNonQuery() 'Выполняем запрос
DA = New OleDb.OleDbDataAdapter(SqlCom) 'Через адаптер получаем результаты запроса
DA.Fill(DT) ' Заполняем таблицу результатми
Me.DataGridView1.DataSource = DT ' Привязываем Грид к источнику данных
Con.Close() ' Закрываем соединение
End Sub
Sub LoadAll_74() 'Процедура чтения всей таблицы из базы
DT.Clear() 'Очищаем таблицу
SqlCom = New OleDb.OleDbCommand("SELECT * FROM Request WHERE (Склад = 74)", Con) ' Указываем строку запроса и привязываем к соединению
Con.Open() ' Открываем соединение
SqlCom.ExecuteNonQuery() 'Выполняем запрос
DA = New OleDb.OleDbDataAdapter(SqlCom) 'Через адаптер получаем результаты запроса
DA.Fill(DT) ' Заполняем таблицу результатми
Me.DataGridView1.DataSource = DT ' Привязываем Грид к источнику данных
Con.Close() ' Закрываем соединение
End Sub
Sub LoadAll_pre_trading() 'Процедура чтения всей таблицы из базы
DT.Clear() 'Очищаем таблицу
SqlCom = New OleDb.OleDbCommand("SELECT * FROM Request WHERE (Клиент = 'Медиа Маркт' and Склад <> 74)", Con) ' Указываем строку запроса и привязываем к соединению
Con.Open() ' Открываем соединение
SqlCom.ExecuteNonQuery() 'Выполняем запрос
DA = New OleDb.OleDbDataAdapter(SqlCom) 'Через адаптер получаем результаты запроса
DA.Fill(DT) ' Заполняем таблицу результатми
Me.DataGridView1.DataSource = DT ' Привязываем Грид к источнику данных
Con.Close() ' Закрываем соединение
End Sub
Sub LoadAll_sale() 'Процедура чтения всей таблицы из базы
DT.Clear() 'Очищаем таблицу
SqlCom = New OleDb.OleDbCommand("SELECT * FROM Request WHERE (Клиент <> 'Медиа Маркт')", Con) ' Указываем строку запроса и привязываем к соединению
Con.Open() ' Открываем соединение
SqlCom.ExecuteNonQuery() 'Выполняем запрос
DA = New OleDb.OleDbDataAdapter(SqlCom) 'Через адаптер получаем результаты запроса
DA.Fill(DT) ' Заполняем таблицу результатми
Me.DataGridView1.DataSource = DT ' Привязываем Грид к источнику данных
Con.Close() ' Закрываем соединение
End Sub
Sub LoadAll_3() 'Процедура чтения всей таблицы из базы
DT.Clear() 'Очищаем таблицу
SqlCom = New OleDb.OleDbCommand("SELECT * FROM Request WHERE (Склад = 3)", Con) ' Указываем строку запроса и привязываем к соединению
Con.Open() ' Открываем соединение
SqlCom.ExecuteNonQuery() 'Выполняем запрос
DA = New OleDb.OleDbDataAdapter(SqlCom) 'Через адаптер получаем результаты запроса
DA.Fill(DT) ' Заполняем таблицу результатми
Me.DataGridView1.DataSource = DT ' Привязываем Грид к источнику данных
Con.Close() ' Закрываем соединение
End Sub
Sub LoadAll_client() 'Процедура чтения всей таблицы из базы
DT.Clear() 'Очищаем таблицу
SqlCom = New OleDb.OleDbCommand("SELECT * FROM Request WHERE (Склад = 0)", Con) ' Указываем строку запроса и привязываем к соединению
Con.Open() ' Открываем соединение
SqlCom.ExecuteNonQuery() 'Выполняем запрос
DA = New OleDb.OleDbDataAdapter(SqlCom) 'Через адаптер получаем результаты запроса
DA.Fill(DT) ' Заполняем таблицу результатми
Me.DataGridView1.DataSource = DT ' Привязываем Грид к источнику данных
Con.Close() ' Закрываем соединение
End Sub
Sub checked()
If CheckBox4.Checked = True And CheckBox1.Checked = False And CheckBox2.Checked = False And CheckBox3.Checked = False Then
LoadAll_74()
ElseIf CheckBox1.Checked = True And CheckBox2.Checked = True And CheckBox3.Checked = False And CheckBox4.Checked = False Then
LoadAll_3()
ElseIf CheckBox2.Checked = True And CheckBox1.Checked = False And CheckBox3.Checked = False And CheckBox4.Checked = False Then
LoadAll_pre_trading()
ElseIf CheckBox1.Checked = True And CheckBox2.Checked = False And CheckBox3.Checked = False And CheckBox4.Checked = False Then
LoadAll_sale()
ElseIf CheckBox3.Checked = True And CheckBox1.Checked = False And CheckBox2.Checked = False And CheckBox4.Checked = False Then
LoadAll_client()
End If
End Sub
Sub value()
If TextBox1.Text <> "" Then
DT.Clear() 'Очищаем таблицу
SqlCom = New OleDb.OleDbCommand("SELECT * FROM Request WHERE ([№ заявки] = '" + TextBox1.Text + "')", Con) ' Указываем строку запроса и привязываем к соединению
Con.Open() ' Открываем соединение
SqlCom.ExecuteNonQuery() 'Выполняем запрос
DA = New OleDb.OleDbDataAdapter(SqlCom) 'Через адаптер получаем результаты запроса
DA.Fill(DT) ' Заполняем таблицу результатми
Me.DataGridView1.DataSource = DT ' Привязываем Грид к источнику данных
Con.Close() ' Закрываем соединение
End If
If TextBox2.Text <> "" Then
DT.Clear() 'Очищаем таблицу
SqlCom = New OleDb.OleDbCommand("SELECT * FROM Request WHERE ([№ артикула] = '" + TextBox2.Text + "')", Con) ' Указываем строку запроса и привязываем к соединению
Con.Open() ' Открываем соединение
SqlCom.ExecuteNonQuery() 'Выполняем запрос
DA = New OleDb.OleDbDataAdapter(SqlCom) 'Через адаптер получаем результаты запроса
DA.Fill(DT) ' Заполняем таблицу результатми
Me.DataGridView1.DataSource = DT ' Привязываем Грид к источнику данных
Con.Close() ' Закрываем соединение
End If
If ComboBox1.SelectedValue IsNot "" Then
DT.Clear() 'Очищаем таблицу
SqlCom = New OleDb.OleDbCommand("SELECT * FROM Request WHERE ([Статус заявки] = '" + ComboBox1.SelectedValue + "')", Con) ' Указываем строку запроса и привязываем к соединению
Con.Open() ' Открываем соединение
SqlCom.ExecuteNonQuery() 'Выполняем запрос
DA = New OleDb.OleDbDataAdapter(SqlCom) 'Через адаптер получаем результаты запроса
DA.Fill(DT) ' Заполняем таблицу результатми
Me.DataGridView1.DataSource = DT ' Привязываем Грид к источнику данных
Con.Close() ' Закрываем соединение
ElseIf ComboBox2.SelectedValue IsNot "" Then
DT.Clear() 'Очищаем таблицу
SqlCom = New OleDb.OleDbCommand("SELECT * FROM Request WHERE ([Производитель] = '" + ComboBox2.SelectedValue + "')", Con) ' Указываем строку запроса и привязываем к соединению
Con.Open() ' Открываем соединение
SqlCom.ExecuteNonQuery() 'Выполняем запрос
DA = New OleDb.OleDbDataAdapter(SqlCom) 'Через адаптер получаем результаты запроса
DA.Fill(DT) ' Заполняем таблицу результатми
Me.DataGridView1.DataSource = DT ' Привязываем Грид к источнику данных
Con.Close() ' Закрываем соединение
ElseIf ComboBox3.SelectedValue IsNot "" Then
DT.Clear() 'Очищаем таблицу
SqlCom = New OleDb.OleDbCommand("SELECT * FROM Request WHERE ([СЦ] = '" + ComboBox3.SelectedValue + "')", Con) ' Указываем строку запроса и привязываем к соединению
Con.Open() ' Открываем соединение
SqlCom.ExecuteNonQuery() 'Выполняем запрос
DA = New OleDb.OleDbDataAdapter(SqlCom) 'Через адаптер получаем результаты запроса
DA.Fill(DT) ' Заполняем таблицу результатми
Me.DataGridView1.DataSource = DT ' Привязываем Грид к источнику данных
Con.Close() ' Закрываем соединение
End If
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
checked()
value()


If TextBox1.Text = "" And TextBox2.Text = "" And ComboBox1.SelectedValue Is "" And ComboBox2.SelectedValue Is "" And ComboBox3.SelectedValue Is "" And CheckBox1.Checked = False And CheckBox2.Checked = False And CheckBox3.Checked = False And CheckBox4.Checked = False Then
LoadAll()
End If
End Sub
...
Рейтинг: 0 / 0
Выборка из БД по нескольким параметрам с использованием MVS2012
    #38468512
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что это за месево гавнокода?
...
Рейтинг: 0 / 0
Выборка из БД по нескольким параметрам с использованием MVS2012
    #38468515
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мой понедельник задался :)
...
Рейтинг: 0 / 0
Выборка из БД по нескольким параметрам с использованием MVS2012
    #38468522
chezzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУ,

да, месево. И из этого месева мне предложили сделать конфетку, так еще и чтобы работало, так как пожелают
...
Рейтинг: 0 / 0
Выборка из БД по нескольким параметрам с использованием MVS2012
    #38468525
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посты тэгом src научись оформлять
...
Рейтинг: 0 / 0
Выборка из БД по нескольким параметрам с использованием MVS2012
    #38468528
chezzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
Dim Con As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & My.Application.Info.DirectoryPath & "\Service.accdb") ' Переменная для подключения базы
    Dim SqlCom As OleDb.OleDbCommand ' Переменная для Sql запросов
    Dim DT As New Data.DataTable ' Таблица для хранения результатов запроса
    Dim DA As OleDb.OleDbDataAdapter ' Адаптер для заполнения таблицы после запроса
Sub LoadAll() 'Процедура чтения всей таблицы из базы 
        DT.Clear() 'Очищаем таблицу
        SqlCom = New OleDb.OleDbCommand("SELECT * FROM [Request]", Con) ' Указываем строку запроса и привязываем к соединению
        Con.Open() ' Открываем соединение
        SqlCom.ExecuteNonQuery() 'Выполняем запрос
        DA = New OleDb.OleDbDataAdapter(SqlCom) 'Через адаптер получаем результаты запроса
        DA.Fill(DT) ' Заполняем таблицу результатми
        Me.DataGridView1.DataSource = DT ' Привязываем Грид к источнику данных
        Con.Close() ' Закрываем соединение
    End Sub
    Sub LoadAll_74() 'Процедура чтения всей таблицы из базы 
        DT.Clear() 'Очищаем таблицу
        SqlCom = New OleDb.OleDbCommand("SELECT * FROM Request WHERE (Склад = 74)", Con) ' Указываем строку запроса и привязываем к соединению
        Con.Open() ' Открываем соединение
        SqlCom.ExecuteNonQuery() 'Выполняем запрос
        DA = New OleDb.OleDbDataAdapter(SqlCom) 'Через адаптер получаем результаты запроса
        DA.Fill(DT) ' Заполняем таблицу результатми
        Me.DataGridView1.DataSource = DT ' Привязываем Грид к источнику данных
        Con.Close() ' Закрываем соединение
    End Sub
    Sub LoadAll_pre_trading() 'Процедура чтения всей таблицы из базы 
        DT.Clear() 'Очищаем таблицу
        SqlCom = New OleDb.OleDbCommand("SELECT * FROM Request WHERE (Клиент = 'Медиа Маркт' and Склад <> 74)", Con) ' Указываем строку запроса и привязываем к соединению
        Con.Open() ' Открываем соединение
        SqlCom.ExecuteNonQuery() 'Выполняем запрос
        DA = New OleDb.OleDbDataAdapter(SqlCom) 'Через адаптер получаем результаты запроса
        DA.Fill(DT) ' Заполняем таблицу результатми
        Me.DataGridView1.DataSource = DT ' Привязываем Грид к источнику данных
        Con.Close() ' Закрываем соединение
    End Sub
    Sub LoadAll_sale() 'Процедура чтения всей таблицы из базы 
        DT.Clear() 'Очищаем таблицу
        SqlCom = New OleDb.OleDbCommand("SELECT * FROM Request WHERE (Клиент <> 'Медиа Маркт')", Con) ' Указываем строку запроса и привязываем к соединению
        Con.Open() ' Открываем соединение
        SqlCom.ExecuteNonQuery() 'Выполняем запрос
        DA = New OleDb.OleDbDataAdapter(SqlCom) 'Через адаптер получаем результаты запроса
        DA.Fill(DT) ' Заполняем таблицу результатми
        Me.DataGridView1.DataSource = DT ' Привязываем Грид к источнику данных
        Con.Close() ' Закрываем соединение
    End Sub
    Sub LoadAll_3() 'Процедура чтения всей таблицы из базы 
        DT.Clear() 'Очищаем таблицу
        SqlCom = New OleDb.OleDbCommand("SELECT * FROM Request WHERE (Склад = 3)", Con) ' Указываем строку запроса и привязываем к соединению
        Con.Open() ' Открываем соединение
        SqlCom.ExecuteNonQuery() 'Выполняем запрос
        DA = New OleDb.OleDbDataAdapter(SqlCom) 'Через адаптер получаем результаты запроса
        DA.Fill(DT) ' Заполняем таблицу результатми
        Me.DataGridView1.DataSource = DT ' Привязываем Грид к источнику данных
        Con.Close() ' Закрываем соединение
    End Sub
    Sub LoadAll_client() 'Процедура чтения всей таблицы из базы 
        DT.Clear() 'Очищаем таблицу
        SqlCom = New OleDb.OleDbCommand("SELECT * FROM Request WHERE (Склад = 0)", Con) ' Указываем строку запроса и привязываем к соединению
        Con.Open() ' Открываем соединение
        SqlCom.ExecuteNonQuery() 'Выполняем запрос
        DA = New OleDb.OleDbDataAdapter(SqlCom) 'Через адаптер получаем результаты запроса
        DA.Fill(DT) ' Заполняем таблицу результатми
        Me.DataGridView1.DataSource = DT ' Привязываем Грид к источнику данных
        Con.Close() ' Закрываем соединение
    End Sub
    Sub checked()
        If CheckBox4.Checked = True And CheckBox1.Checked = False And CheckBox2.Checked = False And CheckBox3.Checked = False Then
            LoadAll_74()
        ElseIf CheckBox1.Checked = True And CheckBox2.Checked = True And CheckBox3.Checked = False And CheckBox4.Checked = False Then
            LoadAll_3()
        ElseIf CheckBox2.Checked = True And CheckBox1.Checked = False And CheckBox3.Checked = False And CheckBox4.Checked = False Then
            LoadAll_pre_trading()
        ElseIf CheckBox1.Checked = True And CheckBox2.Checked = False And CheckBox3.Checked = False And CheckBox4.Checked = False Then
            LoadAll_sale()
        ElseIf CheckBox3.Checked = True And CheckBox1.Checked = False And CheckBox2.Checked = False And CheckBox4.Checked = False Then
            LoadAll_client()
        End If
    End Sub
    Sub value()
        If TextBox1.Text <> "" Then
            DT.Clear() 'Очищаем таблицу
            SqlCom = New OleDb.OleDbCommand("SELECT * FROM Request WHERE ([№ заявки] = '" + TextBox1.Text + "')", Con) ' Указываем строку запроса и привязываем к соединению
            Con.Open() ' Открываем соединение
            SqlCom.ExecuteNonQuery() 'Выполняем запрос
            DA = New OleDb.OleDbDataAdapter(SqlCom) 'Через адаптер получаем результаты запроса
            DA.Fill(DT) ' Заполняем таблицу результатми
            Me.DataGridView1.DataSource = DT ' Привязываем Грид к источнику данных
            Con.Close() ' Закрываем соединение
        End If
        If TextBox2.Text <> "" Then
            DT.Clear() 'Очищаем таблицу
            SqlCom = New OleDb.OleDbCommand("SELECT * FROM Request WHERE ([№ артикула] = '" + TextBox2.Text + "')", Con) ' Указываем строку запроса и привязываем к соединению
            Con.Open() ' Открываем соединение
            SqlCom.ExecuteNonQuery() 'Выполняем запрос
            DA = New OleDb.OleDbDataAdapter(SqlCom) 'Через адаптер получаем результаты запроса
            DA.Fill(DT) ' Заполняем таблицу результатми
            Me.DataGridView1.DataSource = DT ' Привязываем Грид к источнику данных
            Con.Close() ' Закрываем соединение
        End If
        If ComboBox1.SelectedValue IsNot "" Then
            DT.Clear() 'Очищаем таблицу
            SqlCom = New OleDb.OleDbCommand("SELECT * FROM Request WHERE ([Статус заявки] = '" + ComboBox1.SelectedValue + "')", Con) ' Указываем строку запроса и привязываем к соединению
            Con.Open() ' Открываем соединение
            SqlCom.ExecuteNonQuery() 'Выполняем запрос
            DA = New OleDb.OleDbDataAdapter(SqlCom) 'Через адаптер получаем результаты запроса
            DA.Fill(DT) ' Заполняем таблицу результатми
            Me.DataGridView1.DataSource = DT ' Привязываем Грид к источнику данных
            Con.Close() ' Закрываем соединение
        ElseIf ComboBox2.SelectedValue IsNot "" Then
            DT.Clear() 'Очищаем таблицу
            SqlCom = New OleDb.OleDbCommand("SELECT * FROM Request WHERE ([Производитель] = '" + ComboBox2.SelectedValue + "')", Con) ' Указываем строку запроса и привязываем к соединению
            Con.Open() ' Открываем соединение
            SqlCom.ExecuteNonQuery() 'Выполняем запрос
            DA = New OleDb.OleDbDataAdapter(SqlCom) 'Через адаптер получаем результаты запроса
            DA.Fill(DT) ' Заполняем таблицу результатми
            Me.DataGridView1.DataSource = DT ' Привязываем Грид к источнику данных
            Con.Close() ' Закрываем соединение
        ElseIf ComboBox3.SelectedValue IsNot "" Then
            DT.Clear() 'Очищаем таблицу
            SqlCom = New OleDb.OleDbCommand("SELECT * FROM Request WHERE ([СЦ] = '" + ComboBox3.SelectedValue + "')", Con) ' Указываем строку запроса и привязываем к соединению
            Con.Open() ' Открываем соединение
            SqlCom.ExecuteNonQuery() 'Выполняем запрос
            DA = New OleDb.OleDbDataAdapter(SqlCom) 'Через адаптер получаем результаты запроса
            DA.Fill(DT) ' Заполняем таблицу результатми
            Me.DataGridView1.DataSource = DT ' Привязываем Грид к источнику данных
            Con.Close() ' Закрываем соединение
        End If
    End Sub
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        checked()
        value()


        If TextBox1.Text = "" And TextBox2.Text = "" And ComboBox1.SelectedValue Is "" And ComboBox2.SelectedValue Is "" And ComboBox3.SelectedValue Is "" And CheckBox1.Checked = False And CheckBox2.Checked = False And CheckBox3.Checked = False And CheckBox4.Checked = False Then
            LoadAll()
        End If
    End Sub
...
Рейтинг: 0 / 0
Выборка из БД по нескольким параметрам с использованием MVS2012
    #38468530
chezzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так лучше?
...
Рейтинг: 0 / 0
Выборка из БД по нескольким параметрам с использованием MVS2012
    #38468532
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну а сам-то как думаешь? Правда, все равно лень читать, все нужные советы тебе уже дали
...
Рейтинг: 0 / 0
Выборка из БД по нескольким параметрам с использованием MVS2012
    #38468551
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallaris
Код: c#
1.
where (somefield = @param or @param is null) and ...


Такие варианты очень больно бьют по производительности запроса, добавляя ненужные конкатенации в плане исполнения. Надо просто динамически формировать текст запроса.
...
Рейтинг: 0 / 0
Выборка из БД по нескольким параметрам с использованием MVS2012
    #38468582
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныPallaris
Код: c#
1.
where (somefield = @param or @param is null) and ...



Такие варианты очень больно бьют по производительности запроса, добавляя ненужные конкатенации в плане исполнения. Надо просто динамически формировать текст запроса.

Все правда, но в большинстве случаев такой вариант вполне приемлем. Если учесть, что в форуме Delphi меня серьезно убеждали, что открыть транзакцию и ждать окончания пользовательского ввода - это нормально, то на этом фоне падение производительности заметно не будет.
...
Рейтинг: 0 / 0
Выборка из БД по нескольким параметрам с использованием MVS2012
    #38468638
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныТакие варианты очень больно бьют по производительности запроса, добавляя ненужные конкатенации в плане исполнения. Надо просто динамически формировать текст запроса.

Ну если будет работать медленно - тогда да, надо что-то решать. Но я думаю, планировщик с конструкцией where (null is null or ...) должен нормально справиться.
...
Рейтинг: 0 / 0
Выборка из БД по нескольким параметрам с использованием MVS2012
    #38468651
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chezzzтак лучше?Шедеврально...
Автора говнокода на кол...

Всё делается ОДНИМ запросом с динамическим формированием выражения WHERE, либо использованием параметров в сравнении их с NULL...

И к тому-же вот это меня сильно удивило и заставило призадуматься...
Код: c#
1.
2.
3.
4.
...
        SqlCom.ExecuteNonQuery() 'Выполняем запрос <- Вот здесь я уже поплыл...
        DA = New OleDb.OleDbDataAdapter(SqlCom) 'Через адаптер получаем результаты запроса <- А здесь у меня мозг начал взрываться
...



PS. Херасе, и не лень же кому-то было копипастить столько г0внища...
...
Рейтинг: 0 / 0
Выборка из БД по нескольким параметрам с использованием MVS2012
    #38469154
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Pallaris
Код: c#
1.
where (somefield = @param or @param is null)



Так быстрее работает
Код: c#
1.
where (somefield = IsNull(@param,somefield)



http://www.sql.ru/faq/faq_topic.aspx?fid=114
...
Рейтинг: 0 / 0
Выборка из БД по нескольким параметрам с использованием MVS2012
    #38469336
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Так быстрее работает
Код: c#
1.
where (somefield = IsNull(@param,somefield)


Не сработет, если значение в поле будет равно null:
Код: sql
1.
2.
3.
4.
5.
6.
declare
  @t table (n int);
declare
  @n int;
insert into @t values(1),(null),(2);
select n from @t where n=isnull(@n,n)


Код: plaintext
1.
2.
3.
4.
5.
n
-----------
1
2

(2 row(s) affected)

Да и запрос от такого трюка может и не стать легче:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
use tempdb
go
if OBJECT_ID(N'dbo.T') is not null
  drop table dbo.T;
create table dbo.T (
  n int,
  name varchar(10)
);
create index idx$T on dbo.T(n) include(name);
insert into dbo.T select number, 'ROW_'+convert(varchar,number)
from master..spt_values where type='P';

SET SHOWPLAN_ALL ON
GO
SET STATISTICS PROFILE ON
GO


Код: sql
1.
2.
3.
4.
declare
  @n int;
set @n=1000;
select n, name from dbo.T where n=@n or @n is null


Код: plaintext
1.
2.
3.
4.
StmtText                                                                                           EstimateIO    TotalSubtreeCost 
-------------------------------------------------------------------------------------------------- ------------- ---------------- 
select n, name from dbo.T where n=@n or @n is null                                                 NULL          0,009979244      
  |--Table Scan(OBJECT:([tempdb].[dbo].[T]), WHERE:([tempdb].[dbo].[T].[n]=[@n] OR [@n] IS NULL))  0,007569444   0,009979244      

- Table Scan в плане запроса, индекс игнорируется;
Код: sql
1.
select n, name from dbo.T where n=isnull(@n, n)


Код: plaintext
1.
2.
3.
4.
StmtText                                                                                                          EstimateIO    TotalSubtreeCost
----------------------------------------------------------------------------------------------------------------- ------------- ----------------
select n, name from dbo.T where n=isnull(@n, n)                                                                   NULL          0,009979244     
  |--Table Scan(OBJECT:([tempdb].[dbo].[T]), WHERE:([tempdb].[dbo].[T].[n]=isnull([@n],[tempdb].[dbo].[T].[n])))  0,007569444   0,009979244     

- абсолютно то же самое.

Если попробовать вот так:
Код: sql
1.
select n, name from dbo.T with(index(idx$T)) where n=isnull(@n, n)


то будет вот так:

Код: plaintext
1.
2.
3.
4.
StmtText                                                                                                                  EstimateIO    TotalSubtreeCost
--------------------------------------------------------------------------------------------------------------------------------------- ----------------
select n, name from dbo.T with(index(idx$T)) where n=isnull(@n, n)                                                        NULL          0,01071998      
  |--Index Scan(OBJECT:([tempdb].[dbo].[T].[idx$T]),  WHERE:([tempdb].[dbo].[T].[n]=isnull([@n],[tempdb].[dbo].[T].[n]))) 0,008310185   0,01071998      

- index scan, и результат по стоимости не намного лучше.

Ну и, наконец,
Код: sql
1.
select n, name from dbo.T where n=@n


Код: plaintext
1.
2.
3.
4.
StmtText                                                                                                  EstimateIO    TotalSubtreeCost
--------------------------------------------------------------------------------------------------------- ------------- ----------------
select n, name from dbo.T where n=@n                                                                      NULL          0,0032831       
  |--Index Seek(OBJECT:([tempdb].[dbo].[T].[idx$T]), SEEK:([tempdb].[dbo].[T].[n]=[@n]) ORDERED FORWARD)  0,003125      0,0032831       

Комментарии, думаю, не нужны. В случае вопроса данной темы самый оптимальный вариант - динамическое формирование текста запроса.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Выборка из БД по нескольким параметрам с использованием MVS2012
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]