一定有一些非常明显的答案,但我只是看不到它,也无法从网络上找到解决方案。
我尝试从数据库表中计算有多少行包含文件路径(如“路径”)。
在 Access 设置表中,我有一些行,其中路径字段(短文本类型)包含字符串:
\\server\dir\something\
我想计算字段以“\server\dir..”开头的行。
在使用 MS Access 失败后,我开始使用 mariaDB 和 heidiSQL 进行测试,并进行了一些尝试和错误,然后才通过此查询获得有效答案:
SELECT COUNT(*) FROM `Settings` WHERE `path` LIKE "%\\\\\\\\server\\\\dir\\\\%"
-> returns Count(*) = 3
在 C# 中,我得到了与此相同的返回值(通过反复试验再次发现):
string query = @"SELECT COUNT(*) FROM Settings WHERE path LIKE '%\\\\\\\\server\\\\dir\\\\%'";
var Test = MySqlHelper.ExecuteScalar(connString, query);
-> returns Count(*) = 3
现在我无法使用 OleDb 库使用 C# 和 Access 获得相同的工作:
string query = @"SELECT COUNT(*) FROM Settings WHERE path LIKE '*\\\\\\\\server\\\\dir\\\\*'";
OleDbConnection connection = new OleDbConnection(databsefile);
OleDbCommand command = new OleDbCommand(query, connection);
connection.Open();
var Test = command.ExecuteScalar();
-> returns Count(*) = 0
我还尝试过查询(使用 C# 和使用 OleDb 库的 Access):
string query = @"SELECT COUNT(*) FROM Settings WHERE path LIKE '*\\\\server\\dir\\*'";
-> return count(*) = 0
string query = @"SELECT COUNT(*) FROM Settings WHERE path LIKE '*\\server\dir\*'";
-> return count(*) = 0
这适用于 MS Access 2013,给出有效结果:
SELECT COUNT(*) FROM Settings WHERE path LIKE '*\\server\dir\*'
->returns Count(*) = 3
编辑:更改了数据库表名称表 -> 设置
最佳答案
当在字符串前使用@时,不需要再次转义反斜杠。 LIKE 的占位符是 %,而不是 *。
所以尝试一下:
string query = @"SELECT COUNT(*) FROM table WHERE path LIKE '%\\\\server\\dir\\%'";
为了避免所有转义,请考虑使用 SQL 参数。
PS:table是保留关键字。您不应该命名表 table,这总是会导致问题。
关于c# - OleDb连接到 MS Access : SQL query like clause with escape characters and wildcards,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30804557/