0

以下のコードを継承しましたが、コードが正常に動作するので困惑していますが、それが正しいとは確信していません。以前に LIKE を使用したことがないため、これを変更する必要があるかどうかを判断できません。これはあなたにはどう見えますか?

このコードは、X 値に Y 値が含まれているかどうかをチェックし、X で X* を検索し (たとえば、Match は Fun と Fan で F* になります)、X に Y が含まれていないかどうかをチェックする db のフィルター用です。

ご意見ありがとうございます。

foreach (ListViewItem item in listView1.Items)
                {
                    strStuff += item.Text;
                    object o = item.SubItems[1].Tag;
                    switch ((int)item.SubItems[1].Tag)
                    {
                        case 0:
                            strStuff += " LIKE '%" + item.SubItems[2].Text + "%'"; //contains
                            break;
                        case 1:
                            strStuff += " LIKE '" + item.SubItems[2].Text + "'"; //allows * wildcard
                            break;
                        case 2:
                            _strCriteria += " NOT LIKE '%" + item.SubItems[2].Text + "%'"; //doesn't contain
                            break;

                        default:
                            strStuff += "\"" + item.SubItems[2].Text + "\"";
                            break;
                    }
                    strStuff += " And ";
                }
4

3 に答える 3

1

これは意図した目的のために機能するように見えますが、おそらく SQL 文字列に追加されたテキストを実際にエスケープする必要があります。

于 2009-02-12T23:37:43.877 に答える
1

SQL インジェクションを避けるためにテキスト文字列をエスケープしますが、それ以外は問題ありません。SQL の LIKE は、文字列パターン マッチングを行い、"%" や "_" などのさまざまなワイルドカードを受け入れます。

詳細については、こちらこちらをご覧ください。

于 2009-02-13T00:04:51.517 に答える
0

私には正しいように見えますが、実際に正しいかどうかを言うには、より多くのコンテキストを提供する必要があります. すでに述べたように、可能性のある SQL インジェクション攻撃を探す必要があります (それは Web アプリですか)。

Sql LIKE キーワードの機能を理解するには、データベースに対して直接クエリを実行してみてください。

于 2009-02-12T23:42:23.287 に答える