在 C# 中为 Access 数据库创建查询(带函数)

Posted

技术标签:

【中文标题】在 C# 中为 Access 数据库创建查询(带函数)【英文标题】:Creating a query (with function) in C# for an Access database 【发布时间】:2013-11-04 09:55:14 【问题描述】:

我需要在我的 C# 应用程序中的 MS Access 表上创建一个查询。但是,此查询将需要调用一个函数(将 [Employees] 数字字段转换为称为 [Employee Band] 的文本字段 - 1 到 5、5 到 10 等)。最初,我在 Access 中创建了查询(使用适当的函数),但如果不向应用程序添加额外的加载项,就无法从 C# 调用它(我真的不想这样做)。

我不知道如何执行此操作(使用 c# 函数进行转换),因此将不胜感激。

我添加了一些粗略的代码(尽管我知道它不正确),但它应该让您对我正在尝试做的事情有所了解:

private void EmployeeTest()

    using (var con = new OleDbConnection())
    
        //Removing any existing data
        con.ConnectionString = DBConnections.ConnStringCO;
        con.Open();
        using (var cmd = new OleDbCommand())
        
            cmd.Connection = con;
            cmd.CommandType = System.Data.CommandType.Text;
            cmd.CommandText = @"INSERT INTO [Report data] ( [Employee band] ) IN 'C:\\Users\\Dev\\Reporting-System.mdb' SELECT repEmployeeBand([Employees]) AS ExprExmployeeBanding FROM [tblSource Dat];";
            cmd.ExecuteNonQuery();
        
        con.Close();
    


private string ExprExmployeeBanding(Variables varEmployees) as long

     //Do converstion

【问题讨论】:

您能否提供原始值的图形示例以及转换后的最终输出应该是什么? 当然,所以您可以将任何数值(员工人数)导出到: 1-4, 5-9, 9-25, 25-49, 50+ 实际数据上面有破折号-和逗号,?或者它只是数字范围,也没有逗号? 破折号 - 本质上,如果有 7 名员工,我希望值返回“5-9” 【参考方案1】:

我认为您无需费心在 C# 中进行转换;您应该能够在 Access 中创建一个保存的查询来进行转换。对于名为 [Companies] 的表:

ID  CompanyName  Employees
--  -----------  ---------
 1  GordCo               3
 2  SampleCo             7
 3  BigCo            10000

名为 [qryCompanyInfo] 的已保存查询

SELECT 
    Companies.*, 
    Switch([Employees] Between 1 And 4, "1-4", [Employees] Between 5 And 9, "5-9", True, "10 or more") AS EmployeeBand
FROM Companies;

会回来

ID  CompanyName  Employees  EmployeeBand
--  -----------  ---------  ------------
 1  GordCo               3  1-4         
 2  SampleCo             7  5-9         
 3  BigCo            10000  10 or more  

我刚刚检查过,当使用 Microsoft.ACE.OLEDB.12.0 直接从 C# 应用程序调用时,该查询工作正常。

关于Switch()函数的更多信息可以在here找到。

【讨论】:

@AndyDB 不客气。你显然必须充实它,当你这样做时,你可能还想检查 IsNull() 和

以上是关于在 C# 中为 Access 数据库创建查询(带函数)的主要内容,如果未能解决你的问题,请参考以下文章

c# 委托 delegate

在 VBA 中为 MS Access 中的用户携带一个变量

使用带有日期的 C# 在 MS Access 97 数据库中清除查询

C#如何创建一张access 表格

在 Java 中为 MS Access 创建无 DSN 连接

如何使用 C# 在 access 数据库中实现“右外连接”查询?