【问题标题】:Access database - Retrieve names of stored queries?Access 数据库 - 检索存储查询的名称?
【发布时间】:2012-01-10 09:25:08
【问题描述】:

这可以通过编程方式实现吗?获取存储查询的名称或检查是否存在具有特定名称的查询?

【问题讨论】:

  • 为什么不 SELECT * FROM LIMIT 1 看看是否出错?
  • 当然为什么不!数据库新手在这里:)
  • @Eugen Rieck 您认为这将与 MS Access 一起使用?
  • @Remou 为什么不应该呢?
  • @Eugene Access 没有 LIMIT 1 并且您无法从操作查询中进行选择,所以我看不到它是如何工作的。

标签: c# vb.net ms-access database-schema


【解决方案1】:

使用OleDbConnection.GetOleDbSchemaTable 方法。

OleDbConnection connection = new OleDbConnection(@"connection_string");
connection.Open();
DataTable schemaTable = connection.GetOleDbSchemaTable(
         OleDbSchemaGuid.Tables,
           new object[] { null, null, null, "VIEW" });
foreach (DataRow row in schemaTable.Rows )
{
    Console.WriteLine(row["TABLE_NAME"]);
}

【讨论】:

  • 这将只返回选择查询,您将需要 OleDbSchemaGuid.Procedures (PROCEDURE_NAME) 用于操作查询(添加、更新、追加等)。参考:msdn.microsoft.com/en-us/library/…
  • 我的数据库中只有选择存储的查询,但感谢您说清楚。
【解决方案2】:

可以查询Procedures表获取所有存储过程

ProcedureName 字段包含过程的名称

【讨论】:

  • 这是一个 access 97' 数据库(是的,我知道)。存储过程从 2000 年及以后开始可用。很抱歉在我的第一篇文章中没有说清楚。
【解决方案3】:

您还可以使用未记录但经常使用的MSysObjects 表:

SELECT [Name]
FROM [MSysObjects]
WHERE [Type] = 5

这将包括 Access 为组合框、列表框和子表单创建的任何系统查询。它们都以波浪号开头,因此您可以像这样排除它们:

SELECT [Name]
FROM [MSysObjects]
WHERE [Type] = 5
    AND [Name] NOT LIKE "~*"

【讨论】:

  • 你经常会发现访问系统表是不允许的(权限),找解决方法是极其繁琐的。
猜你喜欢
  • 2018-06-22
  • 2012-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多