Po pierwsze, nie potrzebujesz programowania. Możesz bezpośrednio przesyłać pliki CSV do bazy danych SQL za pomocą narzędzi do zarządzania SQL. Jeśli jednak naprawdę potrzebujesz zrobić to poprzez programowanie, po prostu przeczytaj poniżej.
Osobiście uważam, że to podejście jest najskuteczniejszym i najłatwiejszym sposobem na wykonanie poprzez programowanie.
Ogólnie rzecz biorąc, możesz to osiągnąć w dwóch krokach
Pierwszy krok to odczytanie pliku CSV i przechowywanie rekordów jako DataTable
.
Drugi krokiem jest zapisanie pobranych danych DataTable
do tabeli bazy danych SQL jako wpis zbiorczy
Jest to funkcja, która zwraca dane pliku CSV jako DataTable
. Zadzwoń i zachowaj go w pamięci, a będziesz mógł z nim robić, co chcesz.
Ta funkcja zwróci plik CSV Read do 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 — użyj tej funkcji, aby wstawić pobraną tabelę danych do tabeli 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);
}
}
Źródło