如何为MS Access编写区分大小写的查询?

Khi*_*yar 8 ms-access case-sensitive

我想知道区分大小写的MS Access选择查询.

我有两个VitualMonitorName值,如下所示

VCode VirtualMonitorName
Row 1 (1, 'VM1');
Row 2 (2, 'Vm1');
Run Code Online (Sandbox Code Playgroud)

这两个值都不同.

如果我写

"SELECT VCode FROM VirtualMaster WHERE VirtualMonitorName like '" + Vm1 + "'";
Run Code Online (Sandbox Code Playgroud)

它仅回复VCode = 1.

Han*_*sUp 12

您可以将该StrComp()函数vbBinaryCompare用于区分大小写的比较.以下是立即窗口中的示例,以显示如何StrComp()工作.有关详细信息,请参阅Access帮助主题.

? StrComp("a", "A", vbBinaryCompare)
 1 

? StrComp("a", "A",vbTextCompare)
0
Run Code Online (Sandbox Code Playgroud)

StrComp() 如果前两个参数计算为相等则返回0,如果它们不相等则返回1或-1,如果任一参数为Null则返回Null.

要在查询中使用该函数,请提供vbBinaryCompare常量的值(0)而不是其名称.

SELECT VCode
FROM VirtualMaster
WHERE StrComp(VirtualMonitorName, "Vm1", 0) = 0;
Run Code Online (Sandbox Code Playgroud)

如果它们使用较新的Access数据库引擎("ACE")驱动程序,则此方法也可用于其他应用程序的查询.例如,以下C#代码

string myConnectionString =
        @"Driver={Microsoft Access Driver (*.mdb, *.accdb)};" +
        @"Dbq=C:\Users\Public\Database1.accdb;";
using (OdbcConnection con = new OdbcConnection(myConnectionString))
{
    con.Open();
    using (var cmd = new OdbcCommand())
    {
        cmd.Connection = con;
        cmd.CommandText = 
                "SELECT COUNT(*) AS n FROM [VirtualMaster] " +
                "WHERE StrComp([VirtualMonitorName],?,?) = 0";
        cmd.Parameters.AddWithValue("?", "Vm1");
        cmd.Parameters.Add("?", OdbcType.Int);

        var vbCompareOptions = new Dictionary<string, int>() 
        {
            {"vbBinaryCompare", 0},
            {"vbTextCompare", 1}
        };
        string currentOption = "";

        currentOption = "vbBinaryCompare";
        cmd.Parameters[1].Value = vbCompareOptions[currentOption];
        Console.WriteLine(
                "{0} found {1} record(s)", 
                currentOption, 
                Convert.ToInt32(cmd.ExecuteScalar()));

        currentOption = "vbTextCompare";
        cmd.Parameters[1].Value = vbCompareOptions[currentOption];
        Console.WriteLine(
                "{0} found {1} record(s)",
                currentOption,
                Convert.ToInt32(cmd.ExecuteScalar()));
    }
}
Run Code Online (Sandbox Code Playgroud)

产生

vbBinaryCompare found 1 record(s)
vbTextCompare found 2 record(s)
Run Code Online (Sandbox Code Playgroud)