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.Odbc
或System.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 是创建查询的途径吗的主要内容,如果未能解决你的问题,请参考以下文章