jreypalars Ответов: 2

Vb.net | в SQL, как выбрать значение из data_table в колонну, получим значение


Привет Кодеры,

Не могли бы вы помочь, у меня есть SQL data_table(datagrid), и мне нужно получить значение из одного столбца(часы).

Таблица данных SQL
ID	Name	Hours
1	Name1	8
2	Name2	9
3	Name3	8



Txt_Name.Text: Name1
Txt_BusinessDays.Txt = 20

Txt_Name.Text: Name2
Txt_BusinessDays.Txt = 21



Ожидаемый Результат:
Txt_Name.Text: Name1
Txt_BusinessHours.Txt = 160


Что я уже пробовал:

Попробовал этот код, но ничего не вышло.

con.ConnectionString = "Server=.

\SQLEXPRESS; Database=test_Db; Integrated 

Security=True"
                    con.Open()
                    cmd.Connection = con
                    cmd.CommandText = 

"SELECT b_days FROM  hours_table WHERE 

(Name = '" & DataGridView1.Rows(i).Cells

(0).Value & "' )"
                    Dim lrd As 

SqlDataReader = cmd.ExecuteReader()

                    If lrd.HasRows Then
                        While lrd.Read
                            

Txt_BusinessHours.Text = lrd

("Hours").ToString()
                        End While
                    End If

2 Ответов

Рейтинг:
1

OriginalGriff

Во-первых, укажите нужные вам столбцы:

SELECT Name, Hours FROM hours_table WHERE ...

Вам также лучше не использовать имя в качестве "ключа" для выбора строк, так как оно, скорее всего, будет неуникальным: имена часто повторяются, а столбец ID-это то, что должно различать строки, а не имена.

Но ... не делай этого так! Никогда не объединяйте строки для построения команды SQL. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого всегда используйте параметризованные запросы.

Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:
SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку в том, что касается SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x';DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?


Рейтинг:
1

codejet

Как насчет фильтрации с помощью фильтра строк dataview Что-то из codeproject