2010-08-25 64 views
2

LANGUE: C#, Système: Windows7, Excel 2007Créer .DBF dans le code C# qui est lisible à partir d'Excel (VFP ou non)

Je veux créer un DBF à partir des données, et je veux l'ouvrir à partir d'Excel 2007. Il peut s'agir de dBase ou de foxpro. Je suis actuellement en FoxPro9 (BTW ce code est de l'Internet):

OleDbConnection con = new OleDbConnection("Provider=VFPOLEDB.1;Data Source=C:\\Temp\\;"); 
      con.Open(); 
      OleDbCommand cmd1 = new OleDbCommand("Create Table TestDBF (Field1 I, Field2 C(10))", con); 
      OleDbCommand cmd2 = new OleDbCommand("Insert Into TestDBF Values (1, 'Hello')", con); 
      OleDbCommand cmd3 = new OleDbCommand("Insert Into TestDBF Values (2, 'World')", con); 
      cmd1.ExecuteNonQuery(); 
      cmd2.ExecuteNonQuery(); 
      cmd3.ExecuteNonQuery(); 
      con.Close(); 

Cela génère le fichier, que je peux ouvrir dans DBFViewer, cependant, je ne peux pas l'ouvrir dans Excel 2007 ni utiliser dans certaines applications i avoir. Je peux convertir manuellement le fichier .dbf de FoxPro en un dbf dbaseIII en utilisant le DbfViwer, mais je veux que ce soit automatique.

Des idées?

Merci à l'avance

Répondre

5

Voici une application petite console qui va créer un DBF en utilisant l'instruction CREATE TABLE syntaxe SQL et copiez-le à une version précédente du format de fichier FoxPro DBF qui peut être ouvert dans Excel.

static void Main(string[] args) 
{ 
    Console.WriteLine("Starting program execution..."); 

    string connectionString = @"Provider=VFPOLEDB.1;Data Source=C:\YourDirectory\"; 

    using (OleDbConnection connection = new OleDbConnection(connectionString)) 
    { 
     using (OleDbCommand scriptCommand = connection.CreateCommand()) 
     { 
      connection.Open(); 

      string vfpScript = @"Create Table TestDBF (Field1 I, Field2 C(10)) 
           USE TestDBF 
           COPY TO OpensWithExcel TYPE Fox2x 
           USE"; 

      scriptCommand.CommandType = CommandType.StoredProcedure; 
      scriptCommand.CommandText = "ExecScript"; 
      scriptCommand.Parameters.Add("myScript", OleDbType.Char).Value = vfpScript; 
      scriptCommand.ExecuteNonQuery(); 
     } 
    } 

    Console.WriteLine("End program execution..."); 
    Console.WriteLine("Press any key to continue"); 
    Console.ReadLine(); 
} 

}

+0

Excellent, merci l'homme –

0

De VFP directement, il est facile ...

use YourTable 
Copy To SomeFile type XLS 
+0

Que voulez-vous dire de VFP directement? Je ne comprends pas votre code. Je connais très peu de VFP. –

+0

type XLS ne crée pas un DBF – stuartd

+0

Ouais, sans blague ... mais s'il voulait les résultats dans Excel, il est facile de vider FROM un DBF dans quelque chose Excel peut facilement lire. Si vous voulez vraiment le reprendre un peu, vous pouvez créer une connexion ODBC à une table ou une base de données libre, puis Excel peut ouvrir via cette connexion une requête sur les données. Son résultat final était d'avoir accès à via Excel, et en raison de la sagesse de Microsoft et de supprimer un tel accès, vous devez passer par des cerceaux. – DRapp

-1
 OleDbConnection con = new OleDbConnection("Provider=VFPOLEDB.1;Data Source=C:\\Temp\\;"); 
     con.Open(); 
     OleDbCommand cmd1 = new OleDbCommand("Create Table TestDBF (Field1 I, Field2 C(10))", con); 
     OleDbCommand cmd2 = new OleDbCommand("Insert Into TestDBF Values (1, 'Hello')", con); 
     OleDbCommand cmd3 = new OleDbCommand("Insert Into TestDBF Values (2, 'World')", con);