Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Carregar arquivo CSV para o servidor SQL


1º off, você não precisa de coisas de programação. Você pode carregar arquivos CSV diretamente no Banco de Dados SQL com ferramentas de gerenciamento SQL. No entanto, se você realmente precisa fazer isso por meio de programação, basta ler abaixo.

Pessoalmente, acho que essa abordagem é a maneira mais eficiente e fácil de fazer através da programação.

Em geral, você pode alcançá-lo em duas etapas

passo é ler o arquivo CSV e manter os registros como um DataTable .
passo é armazenar o DataTable recuperado na tabela de banco de dados SQL como uma entrada em massa

Esta é uma função que retorna os dados do arquivo CSV como um DataTable . Ligue e guarde na memória e você pode fazer o que quiser com ele.

Esta função retornará o arquivo CSV Read em 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 função para inserir a tabela de dados recuperada na tabela 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);
         }
     }

Fonte