DAO 是创建查询的途径吗

Posted

技术标签:

【中文标题】DAO 是创建查询的途径吗【英文标题】:Is DAO the Route To Go For Query Creation 【发布时间】:2015-06-11 10:25:49 【问题描述】:

这对我来说似乎有点健壮(并且需要一些时间才能完成)是否有更快的方法来使用C# 创建访问查询?这是我一直在使用的代码:

DAO.Database dd;
DAO.DBEngine db = new DAO.DBEngine();
var qd8 = new DAO.QueryDef();
String queryName = String.Format("SELECT Count(*) from table14");
string path = @"E:\\Databases\\database123.mdb";
dd = db.OpenDatabase(path);
qd8.Name = String.Format("Total_Count");
qd8.SQL = String.Format(queryName);
dd.QueryDefs.Append(qd8);

【问题讨论】:

您可以使用System.Data.OdbcSystem.Data.OleDb 执行相同的SQL 查询(如果您不希望再次使用它,请不要将查询保存到QueryDefs 集合)。您是否尝试过其中任何一种选择? 您创建这些查询的原因是什么?您只是尝试执行查询,还是尝试将查询添加到 .mdb 文件? @JohnSaunders - 我想在访问数据库中创建和保存查询。尝试将查询添加到 .mdb 文件中。 @GordThompson - 我需要保存 querydef,因为我将再次使用。 【参考方案1】:

“更快”对您意味着什么?

我在我的测试数据库上运行了这个:

DAO.DBEngine de = new DAO.DBEngine();
DAO.Database dd;
DAO.QueryDef qd8 = new DAO.QueryDef();
string path = @"c:\test\testdb.mdb";
string queryName = @"TotalCountX";
string querySql = @"Select Count(*) From TableOne";

dd = de.OpenDatabase(path);
qd8.Name = queryName;
qd8.SQL = querySql;
dd.QueryDefs.Append(qd8);

执行时间为 85 毫秒。

添加两个查询:

DAO.DBEngine de = new DAO.DBEngine();
DAO.Database dd;
DAO.QueryDef qd8 = new DAO.QueryDef();
string path = @"c:\test\testdb.mdb";
string queryName = @"TotalCountY";
string querySql = @"Select Count(*) From TableOne";

dd = de.OpenDatabase(path);
qd8.Name = queryName;
qd8.SQL = querySql;
dd.QueryDefs.Append(qd8);

qd8 = new DAO.QueryDef();
queryName = @"TotalCountZ";
querySql = @"Select Count(*) From TableTwo";
qd8.Name = queryName;
qd8.SQL = querySql;
dd.QueryDefs.Append(qd8);

执行时间为 89 毫秒,因此添加一个查询大约需要 4 毫秒。

你的要求是什么?

【讨论】:

【参考方案2】:

你可以执行这个CREATE VIEW Statement:

CREATE VIEW Total_Count AS SELECT Count(*) FROM table14

如果您尝试从 DAO 执行它,Access 将引发语法错误。因此,请改为从 OleDb 连接执行它。

但是,我不确定这种方法是否会明显快于您当前的代码。

【讨论】:

以上是关于DAO 是创建查询的途径吗的主要内容,如果未能解决你的问题,请参考以下文章

创建具有多个一对多关系的 DAO 查询?

尝试通过 VBA 创建查询,但即使我引用了 MS Access 15.0 对象库,也无法使用任何 DAO

springboot在实际开发中如何实现多表查询?

dao 作为 servlet 的成员 - 正常吗?

Yii2中DAO

有没有好的通用 JPA DAO 实现?