2010-10-29 8 views
5

Ich muss Tabellen von FoxPro 8.0 auf SQL Server importieren. Wie lese ich die Tabellen & Schema aus einem FoxPro-Verzeichnis/Dateien in C#, damit ich die Tabellen in SQL Server erstellen und die Daten kopieren kann?Wie lese ich eine FoxPro 8.0-Datenbank von C#?

Antwort

1

Sie können ODBConnection verwenden. Ich weiß, FoxPro verwendet .dbf-Dateien.

OdbcConnection Conn = new OdbcConnection("Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=C:\\tbl.dbf;"); 
     String SQL = "SELECT * FROM tbl.dbf"; 
     Conn.Open(); 
     OdbcCommand MyCommand = new OdbcCommand(SQL,Conn); 
     OdbcDataReader dr = MyCommand.ExecuteReader(); 
     while (dr.Read()) 
     { 
      //your code 
     } 
+1

warum der downvote? Funktioniert das nicht? – bbqchickenrobot

+0

Ich bin nicht der Downvoter, aber richtig das würde nicht mit Versionen nach VFP6 funktionieren. –

+0

Visual FoxPro dbf ist nicht das gleiche wie dBASE – Roel

1

Mit Ausnahme der „Driver“ providd von RJ Antwort auf MS gehen und den VFP OLE DB-Provider bekommen ... Sie könnten Kompatibilitätsprobleme haben, wenn sie mit einer Datenbank-Container handelt.

7

Sie können dies mithilfe der GetSchema-Methode für die OleDb.Connection-Klasse erreichen.

OleDbConnection connection = new OleDbConnection(
    "Provider=VFPOLEDB.1;Data Source=.\\Northwind\\Northwind.dbc;" 
); 
connection.Open(); 
DataTable tables = connection.GetSchema(
    System.Data.OleDb.OleDbMetaDataCollectionNames.Tables 
); 

foreach (System.Data.DataRow rowTables in tables.Rows) 
{ 
    Console.Out.WriteLine(rowTables["table_name"].ToString()); 
    DataTable columns = connection.GetSchema(
     System.Data.OleDb.OleDbMetaDataCollectionNames.Columns, 
     new String[] { null, null, rowTables["table_name"].ToString(), null } 
    ); 
    foreach (System.Data.DataRow rowColumns in columns.Rows) 
    { 
     Console.Out.WriteLine(
      rowTables["table_name"].ToString() + "." + 
      rowColumns["column_name"].ToString() + " = " + 
      rowColumns["data_type"].ToString() 
     ); 
    } 
}