2

.net で ODBC 接続を使用して LIKE ステートメントを使用する方法はありますか? 考えられることはすべて試しましたが、常に SQL 例外が発生します。

SELECT field FROM table WHERE fieldName LIKE '%SOME_STRING%';
string sql = "SELECT field FROM table WHERE fieldName like '%?%';

Sybase SQL Anywhere 11 を使用しています。

4

1 に答える 1

3

接続先のデータベースがサポートしている限り、LIKE ステートメントを使用できます。ODBC を使用するかどうかは関係ありません。

注意すべき点の 1 つは、異なるデータベースが異なるワイルドカードと異なる構文を使用することです。(たとえば、MS Access は "*" をワイルドカードとして使用しますが、SQL Server は "%" を使用します)。

http://office.microsoft.com/en-us/access-help/like-operator-HP001032253.aspx

http://msdn.microsoft.com/en-us/library/ms179859.aspx

とにかく、接続しているデータベースのドキュメントを見て、それが LIKE ステートメントと適切な構文をサポートしているかどうかを確認してください。

または、こちらの回答をご覧ください: LIKE および IN 条件を使用したパラメーター化されたクエリ

編集

LIKE 句の一部として入力パラメーターを使用しようとしているようです。これに関する Sybase 固有のドキュメントは見つかりませんが、SQL Server 側でも (残念ながら) この場合は文字列を連結する必要があります。これは SQL インジェクションの観点からは悪いことだと認識していますが、それを回避する方法があるとは思わないため、文字列のサニタイズ/エスケープに頼る必要があります。

これは、SQL Serverでそれを行う投稿です。これが、Sybase ASA で動作する何かに変換されることを願っています。 http://palisade.plynt.com/issues/2006Jun/injection-stored-procedures/

最後の手段として、これを使用できます。

string sql = "SELECT field FROM table WHERE fieldName like '%" + SOMESTRING.Replace("'", "''") + "%';
于 2011-03-01T20:34:34.683 に答える