sql >> Base de Datos >  >> RDS >> Sqlserver

Subir archivo CSV al servidor SQL

En primer lugar, no necesitas cosas de programación. Puede cargar archivos CSV directamente en SQL Database con herramientas de administración de SQL. Sin embargo, si realmente necesita hacerlo a través de la programación, simplemente lea a continuación.

Personalmente, creo que este enfoque es la forma más eficiente y sencilla de hacerlo a través de la programación.

En general, puedes lograrlo en dos pasos

El paso es leer el archivo CSV y mantener los registros como una DataTable .
2do el paso es almacenar la DataTable recuperada en la tabla de la base de datos SQL como una entrada masiva

Esta es una función que devuelve datos de archivo CSV como un DataTable . Llámalo y guárdalo en la memoria y podrás hacer lo que quieras con él.

Esta función devolverá el archivo de lectura CSV a DataTable.

private static DataTable GetDataTabletFromCSVFile(string csv_file_path)
    {
        DataTable csvData = new DataTable();
        try
        {
          using(TextFieldParser csvReader = new TextFieldParser(csv_file_path))
             {
                csvReader.SetDelimiters(new string[] { "," });
                csvReader.HasFieldsEnclosedInQuotes = true;
                string[] colFields = csvReader.ReadFields();
                foreach (string column in colFields)
                {
                    DataColumn datecolumn = new DataColumn(column);
                    datecolumn.AllowDBNull = true;
                    csvData.Columns.Add(datecolumn);
                }
                while (!csvReader.EndOfData)
                {
                    string[] fieldData = csvReader.ReadFields();
                    //Making empty value as null
                    for (int i = 0; i < fieldData.Length; i++)
                    {
                        if (fieldData[i] == "")
                        {
                            fieldData[i] = null;
                        }
                    }
                    csvData.Rows.Add(fieldData);
                }
            }
        }
        catch (Exception ex)
        {
           return null;
        }
        return csvData;
    }
  }

SQLBulkCopy:use esta función para insertar la tabla de datos recuperada en la tabla Sql

static void InsertDataIntoSQLServerUsingSQLBulkCopy(DataTable csvFileData)
{
    using(SqlConnection dbConnection = new SqlConnection("Data Source=ProductHost;Initial Catalog=yourDB;Integrated Security=SSPI;"))
    {
         dbConnection.Open();
         using (SqlBulkCopy s = new SqlBulkCopy(dbConnection))
         {
             s.DestinationTableName = "Your table name";
             foreach (var column in csvFileData.Columns)
                 s.ColumnMappings.Add(column.ToString(), column.ToString());
             s.WriteToServer(csvFileData);
         }
     }

Fuente