2009-05-28 8 views
5

Quiero usar ADO.net para extraer algunos datos de un archivo de Excel. Este proceso está bastante bien documentado en internet. Mi problema es que mi archivo ha sido cargado por un usuario y, por lo tanto, existe solo como una matriz de bytes en la memoria. Por motivos de seguridad y rendimiento, preferiría no escribir este archivo en el disco.¿Leyó un archivo de Excel en la memoria (matriz de bytes) con ADO.NET?

¿Hay alguna forma de construir una cadena de conexión que se conecte a una matriz de bytes? ¿O tal vez exponer esa matriz como un archivo que realmente está almacenado en la memoria (como un disco RAM, supongo)?

+0

¿Qué tipo de NET-objeto que mantiene en memoria Excel- ¿archivo? –

+0

Es una matriz de bytes. Actualizaré la pregunta. –

Respuesta

5

No se puede conectar si solo existe en la memoria. OLE también se descarta (aunque el uso de Office Automation para una aplicación de servidor es un diseño deficiente para empezar).

La única manera que se me ocurre es leer los datos de Excel binarios sí mismo - por ejemplo usar SpreadSheetGear.Net con algo como:

SpreadsheetGear.Factory.GetWorkbookSet().Workbooks.OpenFromStream(*stream*); 
+0

SpreadsheetGear también tiene un método IWorkbooks.OpenFromMemory (byte [] data) para que pueda leer directamente desde una matriz de bytes, así como desde una secuencia como lo sugiere David. –

2

Como Rich B dijo en su respuesta, no creo que es posible conectar en un preámbulos estándar. camino neto a un archivo de Excel que simplemente se queda en la memoria. El trabajo más simple probablemente sea guardar el archivo de Excel en el disco, conectarse a él usando el motor Jet con su cadena de conexión y luego, cuando termine de realizar todas sus tareas, deshágase del archivo. Puede que este no sea el ideal en términos de rendimiento, pero le falta cierto WTFiness que le haría arrancarse el pelo.

Cuestiones relacionadas