2009-10-13 9 views

Respuesta

3

Hay una biblioteca realmente buena llamada FileHelpers que es a) 100% gratis, b) totalmente en C#, y puede importar fácilmente cualquier tipo de archivo de texto - separado por comas, separado de pestañas, ancho fijo y tan en.

No debería tener problemas al usar esto para cargar su archivo CSV en objetos en memoria y almacenarlos en SQL Server usando ADO.NET.

En FileHelpers, primero necesita tener una clase que describa sus datos, p. una clase "Cliente" (o lo que sea que esté importando).

A continuación, puede importar un archivo usando el código de algo como esto:

FileHelperEngine<Customer> engine = new FileHelperEngine<Customer>(); 
Customer[] dataLoaded = engine.ReadFile(fileName); 

vez que tenga su gama de clientes, puede simplemente iterar a través de eso y guardar los datos (por lo general dentro de una transacción) con p.ej un procedimiento almacenado o una consulta SQL ad-hoc:

using(TransactionScope ts = new TransactionScope()) 
{ 
    foreach(Customer c in dataLoadad) 
    { 
     SaveCustomer(c); 
    } 

    ts.Complete(); 
} 

o se puede convertir la matriz de cliente a un DataTable y utilizar SqlBulkCopy a granel insertar esto en su base de datos de SQL Server - hay un montón de opciones!

ACTUALIZACIÓN:
¿Tiene una [DelimitedRecord] u otro de esos atributos en su clase BlackListDevice?

+0

Hola, gracias por la respuesta. Eché un vistazo al archivo auxiliar. Estoy usando ActiveRecord y NHibernate. Recibo este error La clase de registro no tiene registros. en esta línea FileHelperEngine engine = new FileHelperEngine (typeof (BlackListDevice)); Gracias de nuevo por su ayuda. –

+0

Sí, mi clase tiene este aspecto [DelimitedRecord (" ")] [ActiveRecord] BlackListDevice clase pública: Identificado { [propiedad] pública DeviceReference Virtual String {get; conjunto; } } –

+0

¿Y cuándo obtiene este error? Al compilar? cuando se ejecuta? ¿Su archivo realmente contiene datos y contiene datos que coinciden con su estructura de registro? –

0

Se solucionó esto al agregar una clase separada para las cargas de archivos, funciona como un encanto usando FileHelper.

Cuestiones relacionadas