2017-02-02 5 views
2

Kann mir jemand sagen, wie man eine Liste der Tabellen in einer Visual FoxPro-Datenbank aus C# erhalten?Get Liste der Tabellen aus der Datenbank

Ich versuchte mit der GetSchema, aber die Informationen, die zurückkommt scheint nur zählt (und nicht genau zählt, dass). Hier

ist, was ich habe ...

string connSrc = @"Provider=VFPOLEDB.1;Data Source=myvfpdb.dbc"; 
using (var cmdSrc = new OleDbCommand()) 
using (var dbconnSrc = new OleDbConnection(connSrc)) 
{ 
    dbconnSrc.Open(); 
    DataTable schema = dbconnSrc.GetSchema(); 
} 

Ich dachte, es könnte eine Möglichkeit sein, die ich die DBC-Datei direkt öffnen konnte und eine SELECT dagegen laufen, aber das Problem ist die Datenbank in dem Pfad befindet zu der Verbindungszeichenfolge. Ich konnte keinen OleDb-Befehl finden, der die Schemainformationen extrahieren würde.

EDIT:

fand ich einen Weg, der funktioniert, aber es scheint ein wenig klobig. Kennt jemand einen besseren Weg?

string connSrc = @"Provider=VFPOLEDB.1;Data Source=myvfpdb.dbc"; 
using (var conn = new OleDbConnection(connSrc)) 
    dbc = conn.DataSource; 

string path = Path.GetDirectoryName(dbc); 
string database = Path.GetFileName(dbc); 

using (var conn = new OleDbConnection(@"Provider=VFPOLEDB.1;Data Source=" + path)) 
{ 
    conn.Open(); 
    using (var cmd = conn.CreateCommand()) 
    { 
     cmd.CommandText = "SELECT * FROM " + database; 
     DbDataReader reader = cmd.ExecuteReader(); 

    } 
} 

EDIT:

Mit Tamar Vorschlag geändert, um die Abfrage-Anweisung dazu ...

cmd.CommandText = $"SELECT ObjectName FROM {database} WHERE ObjectType = \"Table\""; 
+1

Sie können natürlich auch eine WHERE-Klausel der Abfrage hinzufügen: WHERE Objecttype = "Table" –

+0

@ TamarE.Granor Guter Fang! Ich werde das hinzufügen. –

+0

Und? Hat das dein Problem gelöst? Wenn ja, poste es einfach als Antwort. –

Antwort

3

Ich denke, mit OleDbConnection.GetSchema() ist der Weg zu gehen. Wie Sie es tun, gibt es nur die verfügbaren Metadaten Informationen zurück. Sie müssen auswählen, welche Metadaten Sie möchten. Die Informationen, die Sie sehen, sind die Anzahl der verfügbaren Restriktionen und die Anzahl der ID-Teile. Um nur eine Liste von Tabellen zu sehen (mit zusätzlichen Informationen wie Table_type - Ansicht oder Tabellen-, Beschreibungs-, Änderungs- und Erstellungsdaten), müssen Sie 'Tabellen' als Parameter an GetSchema übergeben. d.h .:

void Main() 
{ 
    string strCon = 
      @"Provider=vfpoledb;Data Source=C:\PROGRAM FILES (x86)\MICROSOFT VISUAL FOXPRO 9\SAMPLES\data\testdata.dbc"; 
    DataTable tableInfo; 
    using (OleDbConnection con = new OleDbConnection(strCon)) 
    { 
     con.Open(); 
     tableInfo = con.GetSchema("Tables"); 

     // or get TABLES only 
     // tableInfo = con.GetSchema("Tables", new string[] {null,null,null,"TABLE"}); 

     con.Close(); 
    } 
    foreach (DataRow row in tableInfo.Rows) 
    { 
     Console.WriteLine(@"Name:[{0}] Type:[{1}]", 
      row["TABLE_NAME"], 
      row["TABLE_TYPE"]); 
    } 
} 
+0

Awesome ... Ich weiß nicht, wie ich verpasst habe, dass 'GetSchema' einen Parameter übergeben kann. Ihr Code gibt genau die gleichen Ergebnisse zurück wie mein Code und es ist der ** richtige ** Weg, dies zu tun. Vielen Dank. –

Verwandte Themen