2015-04-06 65 views
1

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

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); 
+1

您可以使用'System.Data.Odbc'或'System.Data.OleDb'执行相同的SQL查询(并且如果您不希望再次使用它,则不会将查询保存到QueryDefs集合中)。你是否尝试过这些替代方案? –

+0

你有什么理由来创建这些查询?你只是想执行查询,还是试图将查询添加到.mdb文件? –

+0

@JohnSaunders - 我想创建并保存访问数据库中的查询。试图将查询添加到.mdb文件。 – user2676140

回答

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毫秒。

您的要求是什么?

1

您可以执行此CREATE VIEW Statement

CREATE VIEW Total_Count AS SELECT Count(*) FROM table14 

如果您尝试从DAO执行它,访问将抛出一个语法错误。因此改为从OleDb连接执行它。

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