0

我继承了下面的代码,但我很困惑,因为代码工作得很好,但我不相信它是正确的。我以前没有使用过 LIKE,所以我无法决定是否应该费心改变它。这在你看来如何?

该代码用于 db 中的过滤器,它检查 X 值是否包含 Y 值,在 X 中找到 X*(例如,匹配将是 Fun 和 Fan 中的 F*),并且 X 不包含 Y。

感谢您的意见。

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 注入攻击(是网络应用程序)

要了解 Sql LIKE 关键字的功能,只需直接尝试对数据库进行一些查询。

于 2009-02-12T23:42:23.287 回答