jmavrix Ответов: 1

Как передать значение даты в хранимой процедуре с помощью VB.NET


Привет,

при передаче значения даты из сборщика datetime в vb.net для хранимой процедуры я получаю следующую ошибку.

Необработанное исключение типа ' System. Data.Oledb. OleDbException ' произошло в System.Data.dll

Дополнительная информация: неправильный синтаксис рядом с '/'.

vb.net код
Dim cmd как OleDbCommand

СП = "SP_ExpEntry @OperationId =" Стр + (Вал(1)) + ", @ИД= " + Стр(меня.TxtEXid.Текст) + ",@ExDt= " + Меня.PKREXdt.Значение + ",@EnDT= " + Меня.PkrEntryDt.Значение + ""

cmd = New OleDbCommand(SP, con)
УМК.Метод executenonquery()

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

пробовал проходить в определенном формате
Формат(Мне.PkrEntryDt.Значение, "ДД/ММ/гггг")
преобразование в дату и время

1 Ответов

Рейтинг:
10

CHill60

Используйте параметризованный запрос, и он должен преодолеть проблему.
Объект oledbcommand.Параметров Собственность (Системы.Данных.Для oledb)[^]

Пример: (непроверенные)

cmd = New OleDbCommand("SP_ExpEntry", con)
cmd.CommandType = CommandType.StoredProcedure

cmd.Parameters.AddWithValue("@OperationId", 1)
cmd.Parameters.AddWithValue("@Eid", TxtEXid.Text)
cmd.Parameters.AddWithValue("@ExDt", PKREXdt.Value)
cmd.Parameters.AddWithValue("@EnDT", PkrEntryDt.Value)
[Edit] как предложил @losmac, вот некоторые ресурсы о SQL-инъекции и о том, почему параметризованные запросы лучше всего подходят...
SQL-инъекция-OWASP[^]
Шпаргалка по предотвращению инъекций SQL-OWASP[^]
bobby-tables.com: руководство по предотвращению SQL-инъекций[^]


Maciej Los

5ед!
Несколько слов о sql инъекции будут приветствоваться ;)

CHill60

Лучшая идея ... Я обновил решение с помощью некоторых соответствующих ссылок. Спасибо

jmavrix

Большое спасибо за ваше решение, оно помогло мне решить мою проблему.