如何在 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 文件中的所有查询?的主要内容,如果未能解决你的问题,请参考以下文章