データベース バックエンドを Access から SQL Server に移行しています。
フィールド名の 1 つがKey
. NowKey
はAccess と SQL Server の両方で予約語であるため、Access での回避策は常にフィールド名を角かっこで囲むことでした。
Access に接続するとOleDBParameter
、それぞれのコレクションが生成されますOleDBCommand
。CommandText
実行時にコマンドを確認すると、 UPDATE Foo SET [Key]=? WHERE etc
OleDB/Access には名前付きパラメーターがなく、?
. それはすべて大丈夫でした。
現在に戻ると、SQL Server を使用して と で同様のことをSqlCommand
行いSQLParameter
ます。したがって、SQL は古い疑問符のようなものを好まず、名前付きパラメーターの使用を開始する必要があるため、実行時に は次のようにCommandText
読み取ります。UPDATE Foo SET [Key]=@Key WHERE etc
問題は、アプリケーションがこのコマンドでチョークして、次のように言っていることです。
Incorrect syntax near 'varchar'. Must declare the scalar variable "@Key"
影響を受けるのは、フィールド名Key
を持つテーブルのみです。他のすべては SQL への移行を生き延びており、他のテーブル (フィールド名の予約語がない) は問題ありません。
解決策の 1 つは予約語をフィールド名として使用しないことだと理解していますが、いつものように予約語を回避できるような回答を期待しています。