如何让 Visual Studio 2015 使用 Access 2010 LIKE 通配符
Posted
技术标签:
【中文标题】如何让 Visual Studio 2015 使用 Access 2010 LIKE 通配符【英文标题】:How to get Visual Studio 2015 to work with Access 2010 LIKE wildcards 【发布时间】:2017-02-05 18:33:56 【问题描述】:我正在使用包含表和查询(“视图”)的现有 Access 2010 数据库。
当我从 Visual Studio 2015 连接数据库时,数据库资源管理器之类的工具可以查看 Access 表的内容,但对于包含带有“*”通配符的 LIKE 运算符的查询,它只看到标题标题,记录为零.
我发现,如果我在 Visual Studio 中复制那些基于 Access 的查询,但将 LIKE '*' 通配符替换为 '%',这些基于 VS 的查询就可以工作(它们返回非零记录)。
这个特定的 Access 数据库充满了带有“*”的查询,并且很难将它们全部更改(例如,更改为 ALIKE)。
有没有办法让 Visual Studio 工具与该数据库中 LIKE 查询中的“*”一起工作?可能是连接字符串上的参数,还是 VS 中的属性?或者数据库本身有什么可以改变的(全局参数)?
将 VS 中的 Provider 从 Microsoft.ACE.OLEDB.4.0 更改为 Microsoft.ACE.OLEDB.12.0 没有效果。数据库显然是 04.00.0000(连接属性)。
我希望创建一个 C# 桌面应用程序,该应用程序可以访问该数据库(及其具有那些“*”通配符的查询)。
有关通配符不兼容的背景,请参阅例如LIKE query on an Access database via C# always returns COUNT(*) of 0
感谢您的任何想法。
【问题讨论】:
【参考方案1】:Visual Studio 内置数据库工具倾向于使用System.Data.OleDb
进行数据库操作。您看到的是 Access OLEDB 提供程序的不幸限制。
对于名为 [fruits] 的 Access 表
id fruit
-- -----
1 apple
2 banana
3 cherry
4 apricot
还有一个名为 [qry_aFruits] 的 Access 保存查询
SELECT fruit
FROM fruits
WHERE fruit LIKE "a*";
以下使用 System.Data.OleDb
的 C# 代码不返回任何行
myConnectionString =
@"Provider=Microsoft.ACE.OLEDB.12.0;" +
@"Data Source=C:\Users\Public\Database1.accdb;";
using (var conn = new OleDbConnection(myConnectionString))
conn.Open();
using (var cmd = new OleDbCommand("SELECT * FROM [qry_aFruits]", conn))
using (OleDbDataReader rdr = cmd.ExecuteReader())
while (rdr.Read())
Console.WriteLine(rdr["fruit"]);
但是,使用 System.Data.Odbc
的相同代码返回两行,正如预期的那样:
myConnectionString =
@"Driver=Microsoft Access Driver (*.mdb, *.accdb);" +
@"Dbq=C:\Users\Public\Database1.accdb;";
using (var conn = new OdbcConnection(myConnectionString))
conn.Open();
using (var cmd = new OdbcCommand("SELECT * FROM [qry_aFruits]", conn))
using (OdbcDataReader rdr = cmd.ExecuteReader())
while (rdr.Read())
Console.WriteLine(rdr["fruit"]);
因此,如果您需要处理大量使用 *
作为 LIKE 通配符的已保存 Access 查询,那么您可能不得不放弃基于 System.Data.OleDb
构建的内置 Visual Studio 数据库工具(例如,数据源和表适配器)并使用 ODBC。
【讨论】:
感谢您的详尽而有帮助的回复。 对于任何未来的读者:我的数据库有密码,所以我必须在上面提到的两个连接字符串中添加以下内容:'Jet OLEDB:Database Password=xxxx'(用于 OLEDB)和' PWD=xxxx'(用于 ODBC)。【参考方案2】:不,没有这样的设置。您将不得不采取一种或另一种方式。
【讨论】:
感谢您提供的信息。我可能最终会将所有查询更改为 ALIKE(以便我可以使用 VS 工具和组件)。以上是关于如何让 Visual Studio 2015 使用 Access 2010 LIKE 通配符的主要内容,如果未能解决你的问题,请参考以下文章
如何让 qGLWidget 在 Visual Studio 中显示
如何让 Visual Studio Code linter 忽略一行?
Visual Studio 2015 / Visual Assist 自动完成行为
如何在 Visual Studio 2015 中启用 WiX 项目