2011-02-08 30 views
9

Sto provando a scrivere un file DBF da zero nel mio programma. Voglio crearlo, aggiungere alcune colonne e quindi aggiungere dati alle colonne X un numero di volte. Il mio programma non avrà bisogno di leggerlo di nuovo, ma altri programmi lo faranno.Come creare un file DBF da zero in C#?

Ho cercato una soluzione a questo, ma tutti sembrano presupporre un file DBF esistente, mentre io voglio crearne uno nuovo.

Lo scopo di questo è rendere la parte DBF di un ShapeFile ESRI.

Qualcuno sa come fare?

+0

L'unica opzione che vedo sarebbe di pubblicare un comando 'create table' direttamente usando il provider vfpoledb. È ingombrante, ma potrebbe funzionare. – alex

+0

Ho appena scoperto che è necessario il file DBF in un formato ** dBase IV **, quindi ho modificato la mia risposta. Provalo, dovrebbe funzionare con il GIS (non è sicuro se lo apri con MS Access, però). –

risposta

9

Scarica Microsoft OLE DB Provider for Visual FoxPro 9.0 ed impiego:

string connectionString = @"Provider=VFPOLEDB.1;Data Source=D:\temp"; 
using (OleDbConnection connection = new OleDbConnection(connectionString)) 
using (OleDbCommand command = connection.CreateCommand()) 
{ 
    connection.Open(); 

    OleDbParameter script = new OleDbParameter("script", @"CREATE TABLE Test (Id I, Changed D, Name C(100))"); 

    command.CommandType = CommandType.StoredProcedure; 
    command.CommandText = "ExecScript"; 
    command.Parameters.Add(script); 
    command.ExecuteNonQuery(); 
} 

Edit: Il PO non vuole un formato FoxPro DBF ma dBase IV formato:

string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\temp;Extended Properties=dBase IV"; 

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

    command.CommandText = "CREATE TABLE Test (Id Integer, Changed Double, Name Text)"; 
    command.ExecuteNonQuery(); 
} 
+0

Come si calcola che "Microsoft OLE DB Provider per Visual FoxPro 9.0" sia incorporato in .NET Framework? Non è più integrato del mio suggerimento di usare Microsoft Excel per fare il lavoro pesante. (Ma sì, +1, ancora un suggerimento migliore del mio.) –

+0

Nota: il comando 'ExecScript' può essere usato per copiare il file di tabella anche in altri formati. @Cody: Grazie. Bene, l'interfaccia è integrata, il provider potrebbe non esserlo. L'avevamo preinstallato, ho comunque aggiunto il link per il download. –

+0

Grazie. Ho provato questo, ma quando provo ad aprirlo in Access dice "La tabella esterna non è nel formato previsto". Qualche idea? – Greg

1

Se si desidera eliminare completamente le dipendenze esterne, sarà necessario ricorrere alla creazione manuale del file. E per farlo, dovrai trascorrere del tempo di qualità con il whitepaper che descrive le specifiche del formato del file per capire i campi che devi implementare e cosa dovrebbero contenere. Potete trovarlo online qui: http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf

Naturalmente, questo non è davvero un impegno per i deboli di cuore. Assicurati di comprendere il lavoro che è qui coinvolto prima di intraprendere il viaggio.

+0

-1: in realtà c'è un supporto per questo. –

+0

@Jaroslav: Attendiamo con ansia la tua imminente risposta al contrario. –

+0

Ho rimosso il -1. –

2

Non so nulla di ESRI ShapeFile ... ma è possibile creare un dbf utilizzando OleDb.

Ecco un esempio utilizzando il provider VFP OleDb:

string dbfDirectory = @"c:\"; 
    string connectionString = "Provider=VFPOLEDB;Data Source=" + dbfDirectory; 
    using (OleDbConnection connection = new OleDbConnection(connectionString)) { 
     connection.Open(); 
     OleDbCommand command = connection.CreateCommand(); 

     command.CommandText = "create table Customer(CustId int, CustName v(250))"; 
     command.ExecuteNonQuery(); 
     connection.Close(); 
    } 
Problemi correlati