如何使Visual Studio 2015与Access 2010 LIKE通配符一起使用

时间:2017-02-05 18:33:56

标签: c# visual-studio ms-access ms-access-2010 oledb

我正在使用包含表格和查询的现有Access 2010数据库(' views')。

当我从Visual Studio 2015连接数据库时,像Database Explorer这样的工具可以看到Access表的内容,但对于包含LIKE运算符的查询,可以看到' *'通配符,它​​只看到标题标题,没有记录。

我发现如果我在Visual Studio中复制那些基于访问的查询但是替换了LIKE' *'带有'%'的通配符,这些基于VS的查询有效(它们返回非零记录)。

这个特定的Access数据库充满了查询' *'并且很难将它们全部改变(例如,改为ALIKE)。

有没有办法让Visual Studio工具与' *'在该数据库中的LIKE查询?也许连接字符串上的参数或VS中的属性?或者也许有些东西可以在数据库本身中更改(全局参数)?

将VS中的提供程序从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

感谢任何想法。

2 个答案:

答案 0 :(得分:1)

不,没有这样的设置。你必须采用这种或那种方式。

答案 1 :(得分: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查询,那么您可能不得不放弃构建在顶部的内置Visual Studio数据库工具System.Data.OleDb(例如,数据源和TableAdapter)并使用ODBC。