2012-01-10 6 views
0

これはプログラムで可能ですか?ストアド・クエリーの名前を取得するか、特定の名前のクエリーが存在するかどうかを確認します。データベースにアクセス - ストアドクエリの名前を取得しますか?

+0

SELECT * FROM LIMIT 1ではエラーが発生しますか? –

+0

確かにそうではありません! Db newb here :) – Pantelis

+0

@Eugen RieckあなたはMS Accessで動作すると思いますか? – Fionnuala

答えて

2

利用OleDbConnection.GetOleDbSchemaTableメソッドの名前が含まれているすべてのストアドプロシージャを取得するためにProceduresテーブルを照会することができます。

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

これは選択クエリのみを返します。アクションクエリ(追加、更新、追加など)にはOleDbSchemaGuid.Procedures(PROCEDURE_NAME)が必要です。 Ref:http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbschemaguid.procedures.aspx – Fionnuala

+0

私はデータベース内の選択されたストアド・クエリーしか持っていませんが、そのことを明確にしてくれてありがとうございます。 – Pantelis

0

あなたは

ProcedureNameフィールドが手順

+0

アクセス97 'のデータベースです(わかっています)。ストアドプロシージャは2000年以降利用可能です。私の最初の投稿でそれを明確にしていないのは申し訳ありません。 – Pantelis

0

また、文書化されていないが、はるか-使用MSysObjectsテーブルを使用することができます。

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

これは、コンボボックス、リストボックス、およびサブフォームのアクセスによって作成されたすべてのシステムクエリが含まれます。これらはすべてチルダで始まるので、次のように除外することができます。

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

多くの場合、システムテーブルへのアクセスは許可されていません(権限)。極端な場合、解決策を見つけるのは面倒です。 – Fionnuala

関連する問題