2009-09-22 34 views
0

我想以编程方式检索存储在访问数据库中的每个查询的查询文本。我想使用OleDbConnection.GetSchema或OleDbConnection.GetOleDbSchemaTable甚至ADOX来获取所需的信息。我精通C#。如何以编程方式检索所有查询的查询文本

可以这样做吗?

您能否提供一个示例或指向好例子的链接?

回答

3

如果你的目的是要在代码中使用VBA这个你可以尝试这样的事情

Dim qdef As QueryDef 
Dim qdefs As QueryDefs 
Dim i As Integer 
Dim name As String 
Dim qSql As String 

    Set qdefs = Application.CodeDb.QueryDefs 
    For Each qdef In qdefs 
     qname = qdef.name 
     qSql = qdef.SQL 
    Next qdef 

的qdef对象也会给你关于查询了很多详细信息。

为C#,你将不得不裁判添加到项目的接入互操作(的Microsoft Access ##对象库)

,并使用

private void QueryValues() 
     { 
      Microsoft.Office.Interop.Access.Application app = new Application(); 
      app.OpenCurrentDatabase(@"C:\Tests\C#\MS Access\WindowsApplication1\New Microsoft Office Access 2007 Database.accdb", false,""); 
      QueryDefs qdefs = app.CurrentDb().QueryDefs; 
      foreach (QueryDef qdef in qdefs) 
      { 
       string qname = qdef.Name; 
       string qSql = qdef.SQL; 
      } 
      app.Quit(AcQuitOption.acQuitSaveNone); 
     } 
+0

你知道我将如何从C#访问这个吗?我需要使用ADOX吗? – IanT8

2

我有一个非常类似的问题,解决最后一一周,我想在那里extract view commands from a SQL server。我的第一个想法是使用ADOX,但最终无法与SQL Server一起使用(并且我没有使用Access对其进行测试)。该理论认为ADOX有一个'views'集合,每个视图都有一个'command'属性。该属性保存与该视图对应的SQL字符串。代码应该是(在声明工具列表中的ADOX库之后)

'corrected after @HansUp comments' 

Dim cat as ADOX.catalog, _ 
    vue as ADOX.view 

Set cat = New ADOX.catalog 
Set cat.activeconnection = myActiveADODBconnection 

For each vue in cat.views 
    debug.print vue.command.commandText 
Next vue 

Set vue = nothing 
Set cat = nothing 
+0

嗯,它是写在'飞'...我会更新代码谢谢! –

相关问题