2011-11-15 6 views
0

データベースバックエンドをAccessからSQL Serverに移行しています。エラーSqlParameterで予約語を使用すると、 "スカラー変数を宣言する必要があります"

フィールド名の1つはKeyです。今すぐKeya reserved word in both Access and SQL Serverです。そのため、Accessの回避策は、常にフィールド名の周囲に大括弧を入れることでした。

アクセスに接続すると、OleDBCommandごとにOleDBParameterコレクションが生成されました。実行時にコマンドのCommandTextをチェックすると、UPDATE Foo SET [Key]=? WHERE etcのようなものが読み取られます。これは、OleDB/Accessに名前付きパラメータがないことを覚えているため、?のみです。それは大丈夫だった。

現在の早送りとSQLサーバーを使用して、SqlCommandSQLParameterと同様のことを行います。したがって、実行時にUPDATE Foo SET [Key][email protected] WHERE etcのようなものが読み取られるのは、SQLでは古い疑問符が気に入らず、名前付きパラメータを使用しなければならないからです。

トラブルは、アプリケーションが言って、このコマンドにチョークである:

Incorrect syntax near 'varchar'. Must declare the scalar variable "@Key"

それが影響を受けているフィールド名Keyを持つ唯一のテーブルです。他のものはすべてSQLへの移行から生き残り、他のテーブル(フィールド名の予約語なし)は問題ありません。

解決策の1つは予約語をフィールド名として使用しないようにすることですが、いつものように予約語を回避できる答えが得られることを願っています。

+1

コマンドとパラメータバインディングに使用するコードブロックを投稿できますか? '@Key'が宣言されていない変数/パラメータであるかどうか、または値のプレースホルダに何もバインドされていないかどうかを知ることができるようにコードを見ることは素晴らしいことでしょう。 – Nonym

答えて

2

Keyはキーワードであるとは何の関係もありません。 @Keyの値が何であるかを教えてください。

つまり、あなたのコマンドを持っている、とあなたは、パラメータを定義します。

Dim cmd As New Sqlcommand("Update Foo SET [Key][email protected]", connection) 
cmd.Parameters.AddWithValue("@Key", SomeValue) 
cmd.ExecuteNonQuery() 

私は実際にパラメータを定義するのを忘れたので、私は通常、そのエラーが発生しました。

+0

あなたは正しく動作します。 .mmしかし、なぜ私のより長い風味のバージョン( 'AddWithValue'を使用していない)が私の編集を参照していないのかわかりません。私はそれを把握しようとしているつもりです – hawbsl

+0

あなたは@あなたの名前にパラメータを持っていない、またあなたはコマンドのパラメータにそれを追加していない。 – Jay

+0

もう一度、あなたは正しい:私はコマンドのパラメータに追加することを省略したので、stackoverflowへのコピーを簡略化することにした。しかし、これはオリジナルの問題ではありません。まだそれを見ている。 – hawbsl

0

ソート済みです。我々はパラメータのリストからCommandTextを自動的に生成するいくつかのコードを持っていました。パラメータが予約語である場合、CommandTextは、フィールド名の前後に大括弧が必要ですが、パラメータ自体に角括弧は使用できません。もちろん

、良いで|アクセスとのOleDBの悪い昔、それだけだった。

大丈夫だった
... SET [Key]=? 

当社更新のSqlClientコードはどちらか生成していました:

... SET [Key][email protected][Key] 

または他の(私たちは括弧を削除した場合):私たちが必要なものから、仕事に行くされて

... SET [email protected] 

どちらも(感謝@D ..)は次のとおりです。

... SET [Key][email protected] 

私たちのCommandTextの自動生成コードには、少しのリエンジニアリングが必要です。いずれか、または予約語をすべて削除します。

関連する問題