0

参考のためにMSのこのホワイトペーパーを使用しました:http: //msdn.microsoft.com/en-us/library/ms345117 (v = sql.90).aspx

ただし、次のクエリを実行しようとするとエラーが発生します。

    command = new SqlCommand(
    "SET QUOTED_IDENTIFIER ON SELECT XML FROM XMLObject WHERE" + 
    "XML.exist('//Root/ActiveRecord[" + s1 + 
    "= " + s2 + "]') = 1"
    , connection);

エラーは次のとおりです。「「。」付近の構文エラー。

「XMLObject」以降のカンマまでをすべて削除するとコマンドを実行でき、DBに要素が存在する場合は何かが返されます。

また、QUOTED_IDENTIFIER値を正しい方法で設定しているかどうかについても興味があります。

私が見るかもしれないC#/ MSSQLのプロジェクト/チュートリアルの例もありがたいです!

編集:これを見ている人のために、私はまた、存在する正しい使用方法が存在することを発見しました:

    "...exist('/Root/ActiveRecord[" + s1 + 
    "= \"" + s2 + "\"]') = 1"

「」がないと、数値比較のみが機能します。

4

2 に答える 2

0

SQLインジェクションに対して脆弱であるため、文字列を連結してSQLを構築することは避けてください。ONの後にセミコロンが必要です。列のデータ型はxmlであるか、xmlに変換する必要があります。

于 2012-05-02T17:26:43.480 に答える
0

WHEREとの間のスペースが不足していると思いますXML

command = new SqlCommand(
    "SET QUOTED_IDENTIFIER ON SELECT XML FROM XMLObject WHERE " + // Note space
    "XML.exist('//Root/ActiveRecord[" + s1 + 
    "= " + s2 + "]') = 1"
    , connection);
于 2012-05-02T17:28:03.500 に答える