gpt4 book ai didi

winforms - 如何查询 "string ends with ' 字符串'"SQLite

转载 作者:行者123 更新时间:2023-12-02 10:29:54 27 4
gpt4 key购买 nike

我有一个包含文件名列的数据库。我希望我的用户能够选择扩展名,并提取具有该扩展名的所有文件名。

已经有一些关于如何执行此操作的线程,并且我遵循了几个不同的示例,但我不知道为什么我的查询不起作用。

    private void button1_Click(object sender, EventArgs e)
{
string query = "SELECT * FROM " + tableName + " WHERE ";

//string ext = "'%*" + comboBox1.Text + "%'";

query += "filename LIKE '*.rtf';";

queryDB(query);

}

comboBox1 是进行选择的地方,但是我停止尝试使其工作,直到我弄清楚为什么硬编码的“文件名 LIKE .rtf”不起作用。

如何检查以 .rtf 结尾的文件?我究竟做错了什么?

谢谢!!

编辑:我知道我的 queryDB 函数可以工作,我可以运行“SELECT * from tablename”并且工作正常。还值得注意的是,我在屏幕上显示了我的数据库。它默认显示全部,但您可以修剪结果。当我尝试运行此查询时,所有条目都显示在数据网格中。

最佳答案

构造此特定查询的正确方法是使用以下语法:

LIKE '%.rtf'

您不应在字符串中使用 * 进行匹配,因为这是操作系统通配符而不是 SQL 通配符,这意味着除非您有一个实际的文件名为 *.rtf(即名称确实包含星号),那么它将不匹配。

但是,这是一个糟糕的解决方案,因为“以字符串结尾”的匹配不能使用索引。它总是会进行全表扫描。这很糟糕。

在数据库中执行此操作的正确方法是执行以下操作:

  1. 在表格中添加一个额外的列,将其称为“扩展”或类似的名称
  2. 为此列添加索引
  3. 插入或更新行时,使用您的编程语言提取文件扩展名(它通常具有执行此操作的例程,这样您就不必寻找点)并将其放入这个新列中。
  4. 对此列进行查询,而不是在文件名上使用 LIKE,那么您可以简单地使用以下条件:

    WHERE extension = '.dbf'

从长远来看,这通常会快得多

关于winforms - 如何查询 "string ends with ' 字符串'"SQLite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38429209/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com