2012-01-10 96 views
0

这是可能的编程?获取存储查询的名称或检查是否存在具有特定名称的查询?访问数据库 - 检索存储的查询的名称?

+0

为什么不SELECT * FROM LIMIT 1并查看它是否出错? – 2012-01-10 09:27:00

+0

当然,为什么不呢! Db newb here :) – Pantelis 2012-01-10 09:32:16

+0

@Eugen Rieck你认为这将与MS Access一起工作吗? – Fionnuala 2012-01-10 10:36:00

回答

2

使用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"]); 
} 
+1

这将只返回select查询,您需要OleDbSchemaGuid.Procedures(PROCEDURE_NAME)进行操作查询(添加,更新,追加等)。参考:http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbschemaguid.procedures.aspx – Fionnuala 2012-01-10 11:18:46

+0

我只有在我的分贝选择存储的查询,但谢谢你明确。 – Pantelis 2012-01-10 12:56:46

0

可以查询Procedures表得到的所有存储过程

ProcedureName字段包含的程序

+0

这是一个访问97'数据库(是的,我知道)。存储过程从2000年开始可用。对不起,我的第一篇文章没有说清楚。 – Pantelis 2012-01-10 09:39:13

0

您还可以使用无证但大部分使用的MSysObjects表:

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

这将包括通过组合框,列表框和子窗体Access创建的任何系统查询。他们都从一个代字号开始,所以你可以这样排除他们:

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

您经常可以发现不允许访问系统表(权限),并且找到解决方案极其繁琐。 – Fionnuala 2012-01-10 23:41:23