我有一个具有文件名列的数据库。我希望我的用户能够选择一个扩展名,并拉出具有该扩展名的所有文件名。
有关于如何执行此操作的线程,我已经遵循了一些不同的示例,但我不知道为什么我的查询不起作用。
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”,它运行正常。值得注意的是,我在屏幕上显示我的数据库。它默认显示所有内容,但您可以修剪结果。当我尝试运行此查询时,所有条目都显示在数据网格中。
答案 0 :(得分:2)
构造此特定查询的正确方法是使用以下语法:
LIKE '%.rtf'
您不应该在字符串中使用*
来匹配,因为这是操作系统通配符而不是SQL通配符,这意味着除非您有一个实际文件名为 {{1 (即名称确实包含该asterix)然后它将不匹配。
然而,这是一个糟糕的解决方案,因为“以字符串结尾”的匹配不能使用索引。它总是会进行全表扫描。这很糟糕。
在数据库中执行此操作的正确方法是执行以下操作:
查询此列而不是在文件名上使用*.rtf
,然后您只需使用此条件:
LIKE
从长远来看,这通常会很多。
答案 1 :(得分:0)
“*”字符不是LIKE的有效通配符。请改用%。
即。 LIKE '%.rtf'