Лучший отвечающий
Параметры в конструкции WHERE, ADO.net

Вопрос
-
Добрый вечер. Уже какие сутки напролет переделываю код проекта под параметрические запросы. Все отлично, но есть некоторые вопросы. Можно ли указать название таблицы в качестве параметра? Почему-то не заменяется `@P0` на название таблицы. Параметры в качестве знака вопроса не воспринимаются, поэтому я использую @P* с порядковым номером.
Dim Cmd As New OleDb.OleDbCommand("UPDATE `" & TableName & "` SET " & tmpQueryData & " WHERE " & tmpQueryData2, Cnn) For i = 0 To Parameters.Length - 1 Cmd.Parameters.AddWithValue("@P" & i, Parameters(i)) Next Cmd.ExecuteNonQuery()
Второй вопрос. Почему после конструкции WHERE если указать любой параметр, например, `Код`=@P1, а в параметры передать число, то будет ругаться исключениями на малое количество параметров в запросе?17 февраля 2021 г. 20:45
Ответы
-
>В общем не работает.
Единственное, что на приведенном скриншоте кажется странным - это DbType: Byte, учитывая что вы пытаетесь передать значение 2434, которое выходит за допустимый диапазон для типа byte.
- Помечено в качестве ответа Siompc 18 февраля 2021 г. 11:35
18 февраля 2021 г. 11:11
Все ответы
-
>Можно ли указать название таблицы в качестве параметра?
Нет. Параметры для данных, не для идентификаторов.
>Почему после конструкции WHERE если указать любой параметр, например, `Код`=@P1, а в параметры передать число, то будет ругаться исключениями на малое количество параметров в запросе?
Если ругается на малое количество параметров, значит у вас мало параметров, либо с синтаксисом запроса что-то не так, благодаря чему параметр не воспринимается как параметр. В приведенном коде я вижу как минимум одну ошибку - Cmd.Parameters.AddWithValue("@P" & i, Parameters(i)) - имя параметра здесь должно передаваться без начального символа @.
18 февраля 2021 г. 3:26 -
Так. То есть в тексте запроса писать символ, а при добавлении нет. Так?
Текст запроса - "UPDATE `Таблица` SET `Значение`=@P0 WHERE `Код`=@P1"
А в параметры добавлять так - Cmd.Parameters.AddWithValue("P" & i, Parameters(i))
Проверю отпишусь.
18 февраля 2021 г. 10:08 -
В общем не работает. Строка запроса - "UPDATE `Данные` SET `Процент заполнения`=@P0 WHERE `Код`=@P1"
Два параметра есть 85 и 2434
Ошибка - необходимо 2 параметра. Стоит только вручную прописать `Код`=2434 и все работает. Что не так?
18 февраля 2021 г. 10:25 -
Я ошибся, работает и с начальным @ в AddWithValue, и без него. И, кстати, неименованные параметры ("?") также вполне работают. У вас проблема в чем-то другом. Проверьте, работает ли аналогичный запрос с константой вместо параметра. Подозреваю тут банальную ошибку, типа случайной замены латинской буквы на одинаковую по виду русскую, или что-то в этом роде.18 февраля 2021 г. 10:46
-
>В общем не работает.
Единственное, что на приведенном скриншоте кажется странным - это DbType: Byte, учитывая что вы пытаетесь передать значение 2434, которое выходит за допустимый диапазон для типа byte.
- Помечено в качестве ответа Siompc 18 февраля 2021 г. 11:35
18 февраля 2021 г. 11:11 -
Все, кажется получилось :) Да, проблема в типе была, только вот во втором типе int64 (Long). Я думал поле `Код` типа длинное целое это как раз оно. А в итоге в такие поля сохраняются только тип Integer18 февраля 2021 г. 11:34
-
Я бы хотел отблагодарить за постоянную помощь. Не нашел ваших данных. Напишите мне на почту пожалуйста
18 февраля 2021 г. 11:47 -
Хорошо. Спасибо большое18 февраля 2021 г. 12:07