如何在 C# 中使用 OleDB 列出 MS Access 文件中的所有查询?

Posted

技术标签:

【中文标题】如何在 C# 中使用 OleDB 列出 MS Access 文件中的所有查询?【英文标题】:How do I list all the queries in a MS Access file using OleDB in C#? 【发布时间】:2008-12-16 14:12:27 【问题描述】:

我有一个包含 200 个查询的 Access 2003 文件,我想用 SQL 打印出它们的表示形式。我可以使用设计视图查看每个查询并将其剪切并粘贴到文件中,但这很乏味。另外,我可能需要在其他 Access 文件上再次执行此操作,所以我肯定想编写一个程序来执行此操作。

查询存储在 Access 数据库的什么位置?我找不到任何能说明如何对付它们的东西。我不熟悉Access,所以我会很感激任何指针。谢谢!

【问题讨论】:

【参考方案1】:

程序就是您要找的:

OleDbConnection conn = new OleDbConnection(connectionString);
conn.Open();

DataTable queries = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Procedures, null);

conn.Close();

这将为您提供一个包含以下列(除其他外)的 DataTable:

PROCEDURE_NAME:查询名称

PROCEDURE_DEFINITION:SQL 定义

所以你可以像这样遍历表格:

foreach(DataRow row in queries.Rows)

    // Do what you want with the values here
    queryName = row["PROCEDURE_NAME"].ToString();
    sql = row["PROCEDURE_DEFINITION"].ToString();

【讨论】:

谢谢!我只需要更改一件事 - 使用 OleDBSchemaGuid.Procedures 而不是 .Views。然后你想要的字段分别是 PROCEDURE_NAME 和 PROCEDURE_DEFINITIONS。 很高兴它有帮助!我将编辑实际答案,使其现在正确无误。 一些更正:列名是 PROCEDURE_DEFINITION(不是复数)。要获取所有查询,您必须检索过程和查询。过程是那些接受参数的过程。对于查询,列是 TABLE_NAME 和 VIEW_DEFINITION。 s/queries/views/ 关于最后一个答案 @Mark B. 是否有某些查询不会返回的原因。我正在使用这种确切的方法,但我遗漏了一些查询。【参考方案2】:

您可以使用 OleDbConnection 的 GetSchema 方法以及 Remou 发布的关于 ADO 架构的内容将这些放在一起

哎呀忘记了链接:MSDN

【讨论】:

【参考方案3】:

如果您想手动进行快速查询。

SELECT MSysObjects.Name
FROM MSysObjects
WHERE type = 5

【讨论】:

【参考方案4】:

不在 C# 中,但可能是一个不错的起点:

http://www.datastrat.com/Code/DocDatabase.txt

【讨论】:

以上是关于如何在 C# 中使用 OleDB 列出 MS Access 文件中的所有查询?的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 C# oledb 将记录插入 MS Access

如何在 C# 中获取 Ms Access 表的主键

比较c#中sql server和ms访问的数据类型

使用 OleDB 列出所有存储过程和查询时出现不明确的外部连接错误

在 C# 中更新 MS Access 表

如何在c#中使用oledb执行pl sql块