WebMatrixでデータベースにクエリを実行しようとしていますが、これは何度か実行しましたが、今回だけ、ベンダー列の一部のフィールドにアンパサンドが含まれていることがわかりました。私はいくつかの記事を調べましたが、WebMatrixの観点からこのソリューションを攻撃するものはありません(実際には、直接的な問題を実際に解決するものはなく、代わりにその特定の環境の回避策です)。
また、C#のReplaceメソッド(ただし、適切な代替として存在する場合は、アンパサンドを何に置き換える必要があるかについて明確な例を得ることができませんでした)や、バックスラッシュでアンパサンドをエスケープするなど、いくつかのことを試しました。 (明らかにこれは機能しませんでした)。
理想的なのはSQL環境自体のエスケープ文字ですが、afaik、そのようなエスケープ文字は存在しません。次のクエリを次のように置き換えると、フィールドにアンパサンドが含まれる行が返されます。
SELECT vendor_id FROM vendors WHERE vendor_name = 'J & H Equipment'
上記のクエリは、vendor_name列に正確に「J&H Equipment」である値(文字列)が含まれていても、行を返しません。
クエリをパラメータ化していることは言うまでもありません。したがって、実際のクエリは次のようになります。
string selectQueryString = "SELECT ap_vendor_id FROM ap_vendors WHERE ap_vendor_name = @0";
var code = db.QueryValue(selectQueryString, searchString);
このコードの後、これはAJAX呼び出しであるため、値をページに書き込むだけです(かみそりを使用し、はい、Html.Raw(code)と@codeを試しました)。
また、以下は実際のクエリの前に実行しようとした置換関数です。
searchString = searchString.Replace("&", "\\&");
'\'文字はC#ではエスケープ文字であるため、二重の円記号が必要であることに注意してください。したがって、C#では2つの'\'は1つの'\'に相当します。
--------------------------私の解決策---------------------- -----
私にとっての解決策は、AJAX呼び出しの前にjavascriptでencodeURIComponentを使用することでした(今では、AJAXを長い間使用していないことは明らかです)。