0

データベース バックエンドを Access から SQL Server に移行しています。

フィールド名の 1 つがKey. NowKeyAccess と SQL Server の両方で予約語であるため、Access での回避策は常にフィールド名を角かっこで囲むことでした。

Access に接続するとOleDBParameter、それぞれのコレクションが生成されますOleDBCommandCommandText実行時にコマンドを確認すると、 UPDATE Foo SET [Key]=? WHERE etcOleDB/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 つは予約語をフィールド名として使用しないことだと理解していますが、いつものように予約語を回避できるような回答を期待しています。

4

2 に答える 2

2

このエラーは Key がキーワードであることとは何の関係もないと思います。@Key の値を教えてほしいのです。

したがって、コマンドを取得したら、パラメーターを定義します。

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

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

于 2011-11-15T18:13:15.133 に答える