我需要在MS Access表的C#应用程序中创建一个查询。但是,此查询需要调用一个函数(将[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
}
答案 0 :(得分: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。