2009-05-19 12 views
2

私はコード内の単一引用符のバグを修正しようとしている:誤警報:SqlCommandオブジェクト、SqlParameterおよび単一引用符

std::string Index; 

connection->Open(); 
String^ sTableName = gcnew String(TableName.c_str()); 
String^ insertstring = String::Format("INSERT INTO {0} (idx, rec, date) VALUES (@idx, @rec, getdate())", sTableName); 
SqlCommand^ command = gcnew SqlCommand(insertstring, connection); 
String^ idx = gcnew String(Index.c_str()); 
command->Parameters->Add("@idx", SqlDbType::VarChar)->Value = idx; 

バグがIDXは=「ことだ」と、SQLがあると言って失敗したということです構文エラーです。明らかに、問題は引用にあります。 しかし、いくつかのグーグルでは、パラメータを使用すると引用符を使用する方法が示されています。 typeがTEXTでVARCHARでない場合、SqlParameterはうまく動作します。

文字列内の手動で引用符の数を2倍にする以外の解決策はありますか?

更新:SQL Management Studioでこのフィールドを手動で編集しようとしましたが、VARCHARフィールドに単一引用符を使用できませんでした。それはSQLのこの通常のですか?

+1

一重引用符は間違いありませんか?実際のエラーメッセージは何ですか? – Steven

+0

はい。エラーメッセージ "S 'の近くの構文が間違っています。" –

答えて

2

問題は、テーブル名を引用するか、idxが文字タイプ以外の数字タイプの名前に似ていると思われます。


アップデートに基づいて、管理スタジオのテーブルに余分な制約がないかチェックすることをおすすめします。

+0

いいえ、私はテーブルをチェックしました---それはVARCHARです –

+0

ありがとう!それが問題を解決しました!そのSQLテーブルに対してトリガが発生しました。 –

0

あなたはそのAがPROB引用確信している場合は、

C#コード:

idx = idx.Replace("'", "''"); 

が問題を解決するだろう。

+0

これはSqlParameterによって自動的に行われます –

+0

はい、それは問題を解決しますが、これは解決する最もクリーンな方法ですか? データ型がVARCHARではなくTEXT(別のフィールド)である場合、エラーは発生しません。 –

0

申し訳ありません。

問題はSQLトリガーのコードにあります。それらを取り除いた後、すべて正常に動作しました。

関連する問題