2011-02-08 224 views
9

Estoy tratando de escribir un archivo DBF desde cero en mi programa. Quiero crearlo, agregar algunas columnas y luego agregar datos a las columnas X cantidad de veces. Mi programa no necesitará leerlo nuevamente, pero otros programas lo harán.¿Cómo crear un archivo DBF desde cero en C#?

He buscado una solución para esto, pero todos parecen suponer un archivo DBF existente, mientras que quiero crear uno nuevo.

El propósito de esto es hacer que el DBF sea parte de un ESRI ShapeFile.

¿Alguien sabe cómo hacer esto?

+0

La única opción que veo sería emitir un comando 'create table' directamente usando el proveedor vfpoledb. Es engorroso, pero podría funcionar. – alex

+0

Acabo de descubrir que necesita el archivo DBF en un formato ** dBase IV **, así que he editado mi respuesta. Pruébelo, debería funcionar con el SIG (aunque no está seguro si lo abre con MS Access). –

Respuesta

9

Descargar Microsoft OLE DB Provider for Visual FoxPro 9.0 y uso:

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(); 
} 

Editar: El PO no quiere un formato FoxPro DBF pero 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

¿Cómo cree que el "Proveedor Microsoft OLE DB para Visual FoxPro 9.0" está integrado en .NET Framework? Eso no está más incorporado que mi sugerencia de usar Microsoft Excel para hacer el trabajo pesado. (Pero sí, +1, sigue siendo una mejor sugerencia que la mía.) –

+0

Nota: El comando 'ExecScript' se puede usar para copiar el archivo de tabla a otros formatos también. @Cody: Gracias. Bueno, la interfaz está incorporada, es posible que el proveedor no lo esté. Lo teníamos preinstalado, agregué el enlace de descarga de todos modos. –

+0

Gracias. Lo he intentado pero cuando intento abrirlo en Access, dice "La tabla externa no está en el formato esperado". ¿Algunas ideas? – Greg

1

Si desea eliminar por completo las dependencias externas, deberá recurrir a la creación manual del archivo. Y para hacerlo, necesitará pasar algún tiempo de calidad con el documento técnico que describe las especificaciones del formato de archivo para comprender los campos que necesita implementar y lo que deberían contener. Puede encontrarlo en línea aquí: http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf

Por supuesto, esto no es realmente una empresa para los débiles de corazón. Asegúrese de comprender el trabajo que implica aquí antes de embarcarse en el viaje.

+0

-1: de hecho hay un apoyo para ello. –

+0

@Jaroslav: Esperamos ansiosamente su inminente respuesta en sentido contrario. –

+0

He eliminado el -1. –

2

No sé nada sobre ESRI ShapeFile ... pero puede crear un dbf usando OleDb.

Aquí hay un ejemplo usando el proveedor 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(); 
    } 
Cuestiones relacionadas