2008-11-13 17 views
6

Estoy buscando las mejores prácticas o ideas sobre cómo crearía una interfaz con un DB desde una aplicación web .NET para cargar datos de archivos de Excel ¿Debo usar un mecanismo que permita todo los registros que se cargarán y señala los errores o debería usar un mecanismo que detiene la carga cuando ocurre un error.Mejores prácticas para cargar archivos en la base de datos

Nunca antes tuve que lidiar con este tipo de requisitos, ¡así que cualquier ayuda sería excelente!

Gracias

Respuesta

1

Si integridad de los datos en su base de datos es importante, no permita que los datos sean importados que tiene errores o no cumpla con los requisitos de validación de su base de datos.

Dado que estos son archivos de Excel, debería ser lo suficientemente fácil para que el usuario corrija los datos en el archivo de Excel, en lugar de intentar usar otra interfaz para arreglar los datos. Solo asegúrese de que los mensajes de error dirijan al usuario a qué campo se encuentra el problema y explique claramente qué es lo que está mal.

+0

Aunque la validación es buena, asegúrese de que está almacenando en un formato tan crudo como sea posible. Terminas haciendo conversiones miles de veces en mil lugares que no esperarías, y tener la versión sin procesar en un estado no convertido es una gran ganancia. – aronchick

0

hacen que desea poner los archivos de Excel en la base de datos como una burbuja? o ¿desea analizar los archivos y poner los registros en los archivos en el DB?

Supongo que es lo último.

Como usuario, me gustaría tener la opción de saber cuáles son los errores para poder solucionarlos y volver a intentarlo. Creo que la forma en que intento de nuevo depende de la cantidad de datos que estoy cargando.

Intentaré hacer una solución híbrida ... si solo hay unos pocos errores, muestra una pantalla para corregir esos errores para que el usuario pueda avanzar rápidamente. Si hay un montón de errores, debería hacerlo y hacer que el usuario intente de nuevo.

En cuanto a la base de datos. O bien, tenga una tabla por separado que cargue hasta que se comprueben y obtengan sus datos "reales", o tenga una columna UploadUniqueId para que pueda deshacer cualquier carga sin mucho alboroto.

nombreTabla borrar según sea UploadUniqueId = 'GUID'

2

Debe cargar los datos y marcarlos si falla las comprobaciones de validación. Para cargar los datos de hecho, tiene algunas opciones:

  • El ADO.Net API mayor carga - utilizar la API de carga mayor para ponerlo en un tabla provisional. El siguiente fragmento muestra un proceso para abrir un archivo .CSV y cargarlo programáticamente en una tabla de etapas .

.

public void Load() { 
     bool OK = File.Exists(_filename); 
     if (OK) { 
      string sql = String.Format("Select * from {0}", FileName); 
      OleDbConnection csv = new OleDbConnection(); 
      OleDbCommand cmd = new OleDbCommand(sql, csv); 
      OleDbDataReader rs = null; 
      SqlConnection db = null; 
      SqlCommand clear = null; 

      SqlBulkCopy bulk_load = null; 
      try { 
        // Note two connections: one from the csv file 
        // and one to the database; 
        csv = new OleDbConnection(); 
        csv.ConnectionString = ConnectionString; 
        csv.Open(); 
        cmd = new OleDbCommand(sql, csv); 
        rs = cmd.ExecuteReader(); 

        // Dung out the staging table 
        db = // [Create A DB conneciton Here] 
        clear = new SqlCommand("Truncate table Staging", db); // Left to the reader 
        clear.ExecuteNonQuery(); 

        // Import into the staging table 
        bulk_load = new SqlBulkCopy(db); 
        bulk_load.DestinationTableName = Destination; // Actually an instance var 
        bulk_load.WriteToServer(rs); 
       } catch (Exception ee) { 
        string summary = ee.Message; 
        string detail = ee.StackTrace; 
        //Notify(DisplayType.error, summary, detail); 
       } finally { 
        if (rs != null) rs.Close(); 
        if (csv != null) csv.Close(); 
        if (bulk_load != null) bulk_load.Close(); 
       } 
      } 
     } 
  • Uso BCP o SSIS para importar, ya sea directamente desde la hoja de cálculo o desde un archivo CSV.
4

Me gustaría probar el siguiente enfoque que funcionó bien en el pasado.

  1. Permitir que el usuario cargue el archivo, colóquelo en algún lugar del disco.
  2. Enlaza los resultados del archivo a alguna grilla (puedes conectarte a archivos de Excel usando ODBC/OLE DB utilizando los objetos tradicionales de Conexión/Comando).
  3. Aplique la validación a las filas en la cuadrícula en función de un conjunto de reglas comerciales (los datos de Excel suelen ser bastante sucios).
  4. Permitir al usuario actualizar los valores en la cuadrícula y corregir los problemas de validación.
  5. Cuando todos los datos son kosher y el usuario está satisfecho con realizar una inserción masiva en una transacción.
  6. Si ocurre algo "malo", se produce una reversión y se presentan algunos comentarios de los usuarios.
Cuestiones relacionadas