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

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

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

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

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

Я не думаю, что это наш случай :)
...
Рейтинг: 0 / 0
18.11.2013, 13:10
    #38468465
Alex Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД по нескольким параметрам с использованием MVS2012
Pallaris,
...
Рейтинг: 0 / 0
18.11.2013, 13:31
    #38468506
chezzz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД по нескольким параметрам с использованием MVS2012
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
18.11.2013, 13:34
    #38468512
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД по нескольким параметрам с использованием MVS2012
Что это за месево гавнокода?
...
Рейтинг: 0 / 0
18.11.2013, 13:36
    #38468515
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД по нескольким параметрам с использованием MVS2012
Мой понедельник задался :)
...
Рейтинг: 0 / 0
18.11.2013, 13:37
    #38468522
chezzz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД по нескольким параметрам с использованием MVS2012
МСУ,

да, месево. И из этого месева мне предложили сделать конфетку, так еще и чтобы работало, так как пожелают
...
Рейтинг: 0 / 0
18.11.2013, 13:42
    #38468525
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД по нескольким параметрам с использованием MVS2012
посты тэгом src научись оформлять
...
Рейтинг: 0 / 0
18.11.2013, 13:45
    #38468528
chezzz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД по нескольким параметрам с использованием MVS2012
Код: 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
18.11.2013, 13:45
    #38468530
chezzz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД по нескольким параметрам с использованием MVS2012
так лучше?
...
Рейтинг: 0 / 0
18.11.2013, 13:47
    #38468532
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД по нескольким параметрам с использованием MVS2012
ну а сам-то как думаешь? Правда, все равно лень читать, все нужные советы тебе уже дали
...
Рейтинг: 0 / 0
18.11.2013, 13:58
    #38468551
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД по нескольким параметрам с использованием MVS2012
Pallaris
Код: c#
1.
where (somefield = @param or @param is null) and ...


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



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

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

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

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

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



PS. Херасе, и не лень же кому-то было копипастить столько г0внища...
...
Рейтинг: 0 / 0
18.11.2013, 20:42
    #38469154
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД по нескольким параметрам с использованием MVS2012
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
19.11.2013, 06:49
    #38469336
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД по нескольким параметрам с использованием MVS2012
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
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Выборка из БД по нескольким параметрам с использованием MVS2012 / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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