In primo luogo, non hai bisogno di materiale di programmazione. Puoi caricare direttamente i file CSV nel database SQL con gli strumenti di gestione SQL. Tuttavia, se hai davvero bisogno di farlo attraverso la programmazione, leggi di seguito.
Personalmente, penso che questo approccio sia il modo più efficiente e più semplice per eseguire la programmazione.
In generale, puoi ottenerlo in due passaggi
1° il passaggio consiste nel leggere il file CSV e conservare i record come DataTable
.
2° il passaggio è memorizzare il DataTable
recuperato nella tabella del database SQL come voce in blocco
Questa è una funzione che restituisce i dati del file CSV come DataTable
. Chiamalo e tienilo in memoria e puoi fare quello che vuoi con esso.
Questa funzione restituirà il file CSV Read in 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:utilizzare questa funzione per inserire la tabella dati recuperata nella tabella 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