データベースバックエンドをAccessからSQL Serverに移行しています。エラーSqlParameterで予約語を使用すると、 "スカラー変数を宣言する必要があります"
フィールド名の1つはKey
です。今すぐKey
はa reserved word in both Access and SQL Serverです。そのため、Accessの回避策は、常にフィールド名の周囲に大括弧を入れることでした。
アクセスに接続すると、OleDBCommand
ごとにOleDBParameter
コレクションが生成されました。実行時にコマンドのCommandText
をチェックすると、UPDATE Foo SET [Key]=? WHERE etc
のようなものが読み取られます。これは、OleDB/Accessに名前付きパラメータがないことを覚えているため、?
のみです。それは大丈夫だった。
現在の早送りとSQLサーバーを使用して、SqlCommand
とSQLParameter
と同様のことを行います。したがって、実行時にUPDATE Foo SET [Key][email protected] WHERE etc
のようなものが読み取られるのは、SQLでは古い疑問符が気に入らず、名前付きパラメータを使用しなければならないからです。
トラブルは、アプリケーションが言って、このコマンドにチョークである:
Incorrect syntax near 'varchar'. Must declare the scalar variable "@Key"
それが影響を受けているフィールド名Key
を持つ唯一のテーブルです。他のものはすべてSQLへの移行から生き残り、他のテーブル(フィールド名の予約語なし)は問題ありません。
解決策の1つは予約語をフィールド名として使用しないようにすることですが、いつものように予約語を回避できる答えが得られることを願っています。
コマンドとパラメータバインディングに使用するコードブロックを投稿できますか? '@Key'が宣言されていない変数/パラメータであるかどうか、または値のプレースホルダに何もバインドされていないかどうかを知ることができるようにコードを見ることは素晴らしいことでしょう。 – Nonym