【发布时间】:2019-01-17 10:12:27
【问题描述】:
使用 mysql,我正在尝试使用参数化查询获取/设置数据,但其中一些返回 null,尽管它们在不使用参数化查询的情况下工作。以下是我遇到的两个问题:
这个没有从数据库返回:
// csvFolder looks ridiculous but this is actually way it needs to look like to work
string csvFolder = "C:\\\\\\\\Users\\\\\\\\fakename\\\\\\\\Desktop\\\\\\\\csvScanner\\\\\\\\testeappfolder"
MySqlCommand deleteCheck = new MySqlCommand("SELECT * FROM email_list WHERE filepath LIKE '%@csvfolder%' AND expired IS NULL", conn);
deleteCheck.Parameters.AddWithValue("@csvfolder", csvFolder);
MySqlDataReader deleteRdr = deleteCheck.ExecuteReader();
但是,将值连接起来是可行的:
MySqlCommand deleteCheck = new MySqlCommand("SELECT * FROM email_list WHERE filepath LIKE '%" + csvFolder + "%' AND expired IS NULL", conn);
MySqlDataReader deleteRdr = deleteCheck.ExecuteReader();
这个从 ExecuteScalar 返回 null。
MySqlCommand getId = new MySqlCommand("SELECT * FROM email_list WHERE filepath = '@filepath' ORDER BY expired DESC LIMIT 1", conn);
getId.Parameters.AddWithValue("@filepath", deletedPath.Replace(@"\", "\\\\"));
int id = int.Parse(getId.ExecuteScalar().ToString());
但在连接时也可以正常工作。
我相信它必须与我正在传递的东西有关(带有 \'s 的路径会导致各种奇怪),但我无法确切地看到它是什么。对于正常工作的路径,我有许多其他参数化查询,但这两个不起作用。以前有人见过这样的东西
【问题讨论】:
-
您不需要在参数周围加上单引号。
-
对于第一个查询 - 我不相信您可以在 LIKE 子句中使用参数,至少不能这样。参考这个答案:stackoverflow.com/a/8537547/8061994 了解您如何做到这一点。
-
我尝试使用 Concat 没有成功,不过感谢您的提醒