7

最近、アポストロフィを含むフィールドで LINQ select を実行すると、アプリケーションで例外がスローされることがわかりました。

DataRow[] newDr = this.ds.Tables["TableName"].Select("Name = '" + drData["Name"].ToString() + "'");

If drData["Name"] = "ビジネスのお金"

I got an exception of "Syntax error: Missing operand after 'S' operator "

誰かがそれを保存し、交換したり削除したりしない方法を教えてもらえますか?

4

2 に答える 2

20

一重引用符を 2 つの一重引用符にエスケープする必要があります。他の特殊文字が含まれている可能性があるため、それらに注意する必要があります。

DataRow[] newDr = this.ds.Tables["TableName"]
                         .Select(string.Format("Name ='{0}'",drData["Name"].ToString().Replace("'","''")));

フィルター文字列内の特殊文字をエスケープするその他の例 (Selectメソッドで使用): 行フィルター文字列の例

于 2013-09-06T17:49:46.740 に答える
7

LINQ Select ではなく、DataTable.Selectメソッドです。あなたが得ているエラーは character によるものです。 double でエスケープする必要があり'ます。簡単な方法は、次のように置き換えることです。' '

DataRow[] newDr = this.ds.Tables["TableName"]
                     .Select("Name = '" + drData["Name"].ToString().Replace("'", "''" + "'");

DataTable.Select で文字をエスケープする方法について、この質問が表示される場合があります。

于 2013-09-06T17:49:59.020 に答える