2011-08-10 14 views
0

ストレージとしてSQL 2005 Expressを使用しています。エラー[42000] [Microsoft] [SQLネイティブクライアント] [SQL Server]キーワード 'SET'の近くの構文が正しくありません

私はODBCCommandを使用してテーブルの一部の値を更新していますが、以下のエラーが表示されます。テーブルにはすべての有効な列があります。

 
ERROR [42000] [Microsoft][SQL Native Client][SQL Server] Incorrect syntax near the keyword 'SET'. 

SQLブラウザーで正常に動作している問題は、私に教えてください。

マイコード:

cmd = new OdbcCommand("UPDATE Transaction_Details SET SubscriptionCancelled=? WHERE SubscriptionID=?", conn); 
cmd.Parameters.Add("@SubscriptionCancelled", OdbcType.VarChar, 255).Value = "Subscription Cancelled on " + DateTime.Now; 
cmd.Parameters.Add("@SubscriptionID", OdbcType.VarChar, 255).Value = sSubscriptionID; 
+0

ODBCCommandオブジェクトのCommandTypeとは何ですか? –

+1

なぜSqlCommandではなくOdbcCommandを使用していますか? –

+0

SubscriptionCanceled列に格納されているデータの一部として「Subscription Cancelled on」を設定する必要はないようです。列が既にSubscriptionCancelled(既にその名前に意味がある)と呼ばれている場合は、その列をdatetime列にして日付を格納します。それ以外の場合は、将来サブスクリプションがキャンセルされた日付のクエリを実行するのが困難な場合があります。ちょうど提案。 – Icarus

答えて

1

私は前たOdbcCommand使用していないが、私はあなたがコマンド文では、単一引用符を使用して文字列の区切りに使用する必要があります推測しています。

に変更してみてください:

cmd = new OdbcCommand("UPDATE Transaction_Details SET SubscriptionCancelled='?' WHERE SubscriptionID='?'", conn); 
+0

私はあなたが更新しようとしている列がvarcharであり、それが通常のT-SQLの一重引用符である必要があるので、これが正解であることを確かめてください。 –

0

あなたはTを構築しているので、SQLは、あなたのパラメータの種類を認識していないことを考えると

UPDATE Transaction_Details SET [email protected] WHERE [email protected] 
+0

私はもともと考えていたものですが、パラメータ '?' order ... –

+0

BTW:SSMSを使用していて、Mladen PrajdicのSSMS Tools Packをダウンロードしていない人は、強くお勧めします。 –

0

に変更

UPDATE Transaction_Details SET SubscriptionCancelled=? WHERE SubscriptionID=? 

パラメータ化されたクエリを使用するのではなく、-SQL文を使用すると、おそらくあなたの文字列の周りに引用符が必要でしょうか?

私はこれをテストする機会がありませんでしたが、試してみることをおすすめします。

関連する問題