2012-01-10 49 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