Мы переносим серверную часть базы данных с Access на SQL Server.
Одно из имен полей - Key
. Теперь Key
является зарезервированным словом в как в Access, так и в SQL Server, поэтому временным решением в Access всегда было заключать имя поля в квадратные скобки.
При подключении к Access мы создали OleDBParameter
коллекцию для каждого OleDBCommand
. Проверяя CommandText
команды во время выполнения, она будет читать что-то вроде UPDATE Foo SET [Key]=? WHERE etc
, потому что помните, что OleDB / Access не имеет именованных параметров, только ?
. Все было нормально.
Перенесемся в сегодняшний день и, используя SQL Server, делаем то же самое с SqlCommand
и SQLParameter
. Итак, во время выполнения CommandText
читает что-то вроде UPDATE Foo SET [Key]=@Key WHERE etc
, потому что SQL не любит старый вопросительный знак, и мы должны начать использовать именованные параметры.
Проблема в том, что приложение подавляется этой командой, говоря:
Incorrect syntax near 'varchar'. Must declare the scalar variable "@Key"
Это затрагивает только таблицу с именем поля Key
. Все остальное пережило миграцию на SQL, и другие таблицы (без зарезервированных слов для имен полей) в порядке.
Я понимаю, что одно из решений - избегать использования зарезервированного слова в качестве имени поля, но я надеюсь на ответ, который позволит нам обойти зарезервированное слово, как мы всегда это делали.
@Key
необъявленной переменной / параметром или что с этим заполнителем значения ничего не связано. - person Nonym   schedule 15.11.2011