在生產環境中測試,無水印。
在任何需要的地方都能運行。
獲得 30 天的全功能產品。
在幾分鐘內上手運行。
試用產品期間完全訪問我們的支援工程團隊
在當今的數位世界中,有效地處理資料是一項重要的任務。 在軟體開發中,一個常見的需求是從CSV文件中讀取資料並將其存儲到資料庫中。 本教程涵蓋使用 C# 從 CSV 文件讀取數據並將其存儲到 SQL Server 資料庫的步驟,具體使用 IronXL library。 本指南專為初學者設計,並將以簡單、有趣的方式進行解釋。
CSV(逗號分隔值)文件是一種純文字文件,其中包含以逗號分隔的數據。 由於其簡單性和與各種應用程式(如 Excel)的相容性,它是一種流行的數據傳輸格式。
SQL Server 是 Microsoft 的資料庫管理系統。 它用於以結構化方式存儲和管理數據。 在我們的情況下,我們會將 CSV 資料存儲在 SQL Server 資料表中。
IronXL 是一個專為 .NET 應用程式量身打造的 Excel 函式庫,特別設計讓開發人員能夠在不需要 Microsoft Office Interop 的情況下讀取、生成和編輯 Excel 文件。此函式庫以其對各種 .NET 版本和平台的相容性而著稱,包括 .NET Core、.NET Standard 和 .NET Framework,以及支援不同作業系統如 Windows、Linux 和 macOS。 這是一個強大的庫,用於導入數據,特別適合處理 CSV 文件。
在 Visual Studio 中創建一個 C# 控制台程式。
使用 NuGet 套件管理器安裝 CSV 函式庫。
使用該程式庫在程序中載入CSV檔案。
建立與資料庫的連接。
使用庫從 CSV 文件讀取內容。
使用SqlBulkCopy方法將該內容複製到資料庫中。
這是一個範例程式碼片段:
using System;
using System.Data;
using System.Data.SqlClient;
using CsvHelper;
namespace CsvReader
{
class Program
{
static void Main(string [] args)
{
string csvPath = @"path\to\your\csv\file.csv";
using (var reader = new StreamReader(csvPath))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
var records = csv.GetRecords<YourModel>();
using (var sqlBulkCopy = new SqlBulkCopy("your_connection_string"))
{
sqlBulkCopy.DestinationTableName = "YourTableName";
sqlBulkCopy.WriteToServer(records.AsDataReader());
}
Console.WriteLine("Data imported successfully!");
}
}
}
}
using System;
using System.Data;
using System.Data.SqlClient;
using CsvHelper;
namespace CsvReader
{
class Program
{
static void Main(string [] args)
{
string csvPath = @"path\to\your\csv\file.csv";
using (var reader = new StreamReader(csvPath))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
var records = csv.GetRecords<YourModel>();
using (var sqlBulkCopy = new SqlBulkCopy("your_connection_string"))
{
sqlBulkCopy.DestinationTableName = "YourTableName";
sqlBulkCopy.WriteToServer(records.AsDataReader());
}
Console.WriteLine("Data imported successfully!");
}
}
}
}
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports CsvHelper
Namespace CsvReader
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim csvPath As String = "path\to\your\csv\file.csv"
Using reader = New StreamReader(csvPath)
Using csv = New CsvReader(reader, CultureInfo.InvariantCulture)
Dim records = csv.GetRecords(Of YourModel)()
Using sqlBulkCopy As New SqlBulkCopy("your_connection_string")
sqlBulkCopy.DestinationTableName = "YourTableName"
sqlBulkCopy.WriteToServer(records.AsDataReader())
End Using
Console.WriteLine("Data imported successfully!")
End Using
End Using
End Sub
End Class
End Namespace
請確保將「path\to\your\csv\file.csv」替換為您的 CSV 文件的實際路徑,將「YourModel」替換為表示您 CSV 數據的模型,將「your_connection_string」替換為您的資料庫連接字符串,並將「YourTableName」替換為您的資料庫表名稱。
Visual Studio:確保您已安裝 Visual Studio。
SQL Server:您應該安裝並能夠存取 SQL Server。
Install-Package IronXL.Excel
或
dotnet add package IronXL
請確保在您希望安裝 IronXL 的項目目錄中運行這些命令。
在匯入資料之前,請在您的 SQL Server 資料庫中建立目標表。 此表格將儲存 CSV 資料。
CREATE TABLE YourTableName (
Column1 DataType,
Column2 DataType,
...
);
將YourTableName、Column1、Column2和DataType替換為您的具體詳細資訊。
首先,確保您擁有一個包含您想要匯入的數據的 CSV 文件。
在 Visual Studio 中創建一個新的 C# 控制台應用程式專案。
:installCmd Install-Package CsvHelper
using System;
using System.IO;
using CsvHelper;
using System;
using System.IO;
using CsvHelper;
Imports System
Imports System.IO
Imports CsvHelper
string csvFilePath = @"C:\path\to\your\csv\file.csv";
string csvFilePath = @"C:\path\to\your\csv\file.csv";
Dim csvFilePath As String = "C:\path\to\your\csv\file.csv"
確保將C:\path\to\your\csv\file.csv
替換為您的 CSV 文件的實際路徑。
StreamReader
類別的新實例以讀取 CSV 文件: using (var reader = new StreamReader(csvFilePath))
{
// code goes here
}
using (var reader = new StreamReader(csvFilePath))
{
// code goes here
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
CsvReader
類的實例,傳入StreamReader
物件: using (var reader = new StreamReader(csvFilePath))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
// code goes here
}
using (var reader = new StreamReader(csvFilePath))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
// code goes here
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
CsvReader
物件。 例如: csv.Configuration.HasHeaderRecord = true;
csv.Configuration.HasHeaderRecord = true;
csv.Configuration.HasHeaderRecord = True
CsvReader
物件的GetRecords<T>()
方法將CSV資料讀取到物件集合中。 將<T>
替換為表示 CSV 文件中每個記錄的物件類型。例如: var records = csv.GetRecords<YourModel>();
var records = csv.GetRecords<YourModel>();
Dim records = csv.GetRecords(Of YourModel)()
確保將YourModel
替換為您的模型類的實際名稱。
foreach (var record in records)
{
// code goes here
}
foreach (var record in records)
{
// code goes here
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
(選擇性)使用 ADO.NET 或像 Entity Framework 這樣的 ORM 工具建立與 SQL Server 資料庫的連接。
使用您選擇的資料庫訪問機制將每個記錄插入資料庫。 例如,如果您使用 ADO.NET,您可以利用SqlBulkCopy
類別來有效地批量插入數據。
在匯入過程中,處理可能發生的任何例外情況,並提供適當的錯誤信息或日誌記錄。
通過運行您的應用程式並驗證 CSV 數據是否成功導入到您的資料庫中來測試您的應用程式。
就是這樣! 您現在已經成功地使用 C# 將 CSV 數據導入到 SQL Server 資料庫中。
在開始從 CSV 文件中導入數據的任務時,第一個關鍵步驟是準確地讀取其中的數據。 CSV 檔案中的每一行通常代表一個資料記錄,每個記錄由一個或多個以逗號分隔的欄位組成。
接著,我們使用 IronXL 庫來處理 CSV 文件。為了使用 IronXL 讀取 CSV 文件,您將使用其 WorkBook 和 WorkSheet 類別。 WorkBook 類別代表整個試算表,它可以是 Excel 文件或是在我們的情況下,一個 CSV 文件。當您將 CSV 文件路徑加載到 WorkBook 對象時,IronXL 將 CSV 文件視為試算表/數據表。
using IronXL;
public class CSVReader
{
public DataTable ReadCSV(string filePath)
{
WorkBook workbook = WorkBook.Load(filePath);
WorkSheet sheet = workbook.DefaultWorkSheet;
// Convert to DataTable for easier processing
DataTable dataTable = sheet.ToDataTable(true); // Set to 'true' if your CSV has a header row
return dataTable;
}
}
using IronXL;
public class CSVReader
{
public DataTable ReadCSV(string filePath)
{
WorkBook workbook = WorkBook.Load(filePath);
WorkSheet sheet = workbook.DefaultWorkSheet;
// Convert to DataTable for easier processing
DataTable dataTable = sheet.ToDataTable(true); // Set to 'true' if your CSV has a header row
return dataTable;
}
}
Imports IronXL
Public Class CSVReader
Public Function ReadCSV(ByVal filePath As String) As DataTable
Dim workbook As WorkBook = WorkBook.Load(filePath)
Dim sheet As WorkSheet = workbook.DefaultWorkSheet
' Convert to DataTable for easier processing
Dim dataTable As DataTable = sheet.ToDataTable(True) ' Set to 'true' if your CSV has a header row
Return dataTable
End Function
End Class
建立與您的 SQL Server 資料庫的連接是儲存 CSV 數據過程中的基本步驟。 此步驟涉及建立您的應用程式與資料庫伺服器之間的通訊連結。 成功的連接至關重要,因為沒有它,將數據傳輸到數據庫是不可能的。
此步驟著重於使用連接字串在 C# 中建立和開啟連接。 連接字串是一個重要的組件,因為它包含建立連接所需的信息。 這就像是一把打開資料庫大門的鑰匙。
public class DatabaseConnector
{
private string connectionString = "your_connection_string_here";
public SqlConnection ConnectToDatabase()
{
SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
return connection;
}
}
public class DatabaseConnector
{
private string connectionString = "your_connection_string_here";
public SqlConnection ConnectToDatabase()
{
SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
return connection;
}
}
Public Class DatabaseConnector
Private connectionString As String = "your_connection_string_here"
Public Function ConnectToDatabase() As SqlConnection
Dim connection As New SqlConnection(connectionString)
connection.Open()
Return connection
End Function
End Class
connectionString
變量包含連接至 SQL Server 所需的所有資料。 通常包括伺服器名稱、資料庫名稱、使用者ID和密碼。 一個範例連接字串如下所示:Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;
。 務必將這些佔位符替換為您的實際伺服器詳細信息。
在與 SQL Server 資料庫建立連線後,接下來的關鍵步驟是將 CSV 數據儲存在資料庫中。 此步驟涉及將您已讀取和處理的數據傳輸到您的 SQL Server 表中。 這是數據處理過程中的關鍵部分,因為它涉及將實際數據從本地文件遷移到資料庫伺服器。
在此步驟中,我們將專注於如何將現在存儲於DataTable中的 CSV 數據轉移到 SQL Server 數據庫。 我們使用 C# 和 SQL Server 的功能組合來高效地完成此任務。
public class DataImporter
{
public void ImportData(DataTable dataTable)
{
using (SqlConnection connection = new DatabaseConnector().ConnectToDatabase())
{
// Check if the table exists and create it if it does not.
string tableName = "CSVData"; // Use a valid SQL table name format
string checkTable = $"IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '{tableName}') BEGIN ";
string createTable = "CREATE TABLE " + tableName + " (";
for (int i = 0; i < dataTable.Columns.Count; i++)
{
createTable += $"[{dataTable.Columns [i].ColumnName}] NVARCHAR(MAX)";
if (i < dataTable.Columns.Count - 1)
createTable += ", ";
}
createTable += ") END";
SqlCommand createTableCommand = new SqlCommand(checkTable + createTable, connection);
createTableCommand.ExecuteNonQuery();
// Now we use SqlBulkCopy to import the data
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
{
bulkCopy.DestinationTableName = tableName;
try
{
bulkCopy.WriteToServer(dataTable);
Console.WriteLine("Data imported successfully!");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
}
public class DataImporter
{
public void ImportData(DataTable dataTable)
{
using (SqlConnection connection = new DatabaseConnector().ConnectToDatabase())
{
// Check if the table exists and create it if it does not.
string tableName = "CSVData"; // Use a valid SQL table name format
string checkTable = $"IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '{tableName}') BEGIN ";
string createTable = "CREATE TABLE " + tableName + " (";
for (int i = 0; i < dataTable.Columns.Count; i++)
{
createTable += $"[{dataTable.Columns [i].ColumnName}] NVARCHAR(MAX)";
if (i < dataTable.Columns.Count - 1)
createTable += ", ";
}
createTable += ") END";
SqlCommand createTableCommand = new SqlCommand(checkTable + createTable, connection);
createTableCommand.ExecuteNonQuery();
// Now we use SqlBulkCopy to import the data
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
{
bulkCopy.DestinationTableName = tableName;
try
{
bulkCopy.WriteToServer(dataTable);
Console.WriteLine("Data imported successfully!");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
}
Public Class DataImporter
Public Sub ImportData(ByVal dataTable As DataTable)
Using connection As SqlConnection = (New DatabaseConnector()).ConnectToDatabase()
' Check if the table exists and create it if it does not.
Dim tableName As String = "CSVData" ' Use a valid SQL table name format
Dim checkTable As String = $"IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '{tableName}') BEGIN "
Dim createTable As String = "CREATE TABLE " & tableName & " ("
For i As Integer = 0 To dataTable.Columns.Count - 1
createTable &= $"[{dataTable.Columns (i).ColumnName}] NVARCHAR(MAX)"
If i < dataTable.Columns.Count - 1 Then
createTable &= ", "
End If
Next i
createTable &= ") END"
Dim createTableCommand As New SqlCommand(checkTable & createTable, connection)
createTableCommand.ExecuteNonQuery()
' Now we use SqlBulkCopy to import the data
Using bulkCopy As New SqlBulkCopy(connection)
bulkCopy.DestinationTableName = tableName
Try
bulkCopy.WriteToServer(dataTable)
Console.WriteLine("Data imported successfully!")
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Using
End Using
End Sub
End Class
它開始通過使用DatabaseConnector類打開與 SQL Server 數據庫的連接,確保數據交易的通路。 該方法檢查資料庫中名為「CSVData」的表是否存在。
如果找不到表格,它會繼續創建。 此資料表的架構是根據傳遞給方法的DataTable架構構建的,所有欄位均設定為NVARCHAR(MAX)以容納任何文字資料。 這是一種通用的方法,可能需要進一步調整以更緊密地匹配特定的數據類型。
接著,SQL 命令會被構建並執行,以驗證該表格的存在或創建該表格。 這確保後續的大量複製操作有一個準備好用於數據插入的目標表。 準備好表格後,使用 SqlBulkCopy 類別將資料從 DataTable 直接傳輸到 SQL Server 表格中。 此操作專為高性能的大量數據傳輸而設計,適合高效處理大量數據。
在細心完成了閱讀 CSV 資料、建立資料庫連接和準備資料傳輸的早期步驟之後,我們到達了最後且最關鍵的階段:將這些單獨的元件整合成一個連貫的流程。
此整合在 C# 應用程式的 Main
方法中完成,將所有內容匯聚在一起,從而實現從 CSV 文件到 SQL Server 資料庫的實際數據導入執行。
class Program
{
static void Main(string [] args)
{
string filePath = "path_to_your_csv_file.csv";
CSVReader reader = new CSVReader();
DataTable dataTable = reader.ReadCSV(filePath);
DataImporter importer = new DataImporter();
importer.ImportData(dataTable);
Console.WriteLine("Data imported successfully!");
}
}
class Program
{
static void Main(string [] args)
{
string filePath = "path_to_your_csv_file.csv";
CSVReader reader = new CSVReader();
DataTable dataTable = reader.ReadCSV(filePath);
DataImporter importer = new DataImporter();
importer.ImportData(dataTable);
Console.WriteLine("Data imported successfully!");
}
}
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim filePath As String = "path_to_your_csv_file.csv"
Dim reader As New CSVReader()
Dim dataTable As DataTable = reader.ReadCSV(filePath)
Dim importer As New DataImporter()
importer.ImportData(dataTable)
Console.WriteLine("Data imported successfully!")
End Sub
End Class
將path_to_your_csv_file.csv
替換為您CSV檔案的路徑。
當您運行專案時,您將看到以下輸出。 成功訊息表示所有操作已成功執行,數據已複製到資料庫中。
Data imported successfully!
現在,您可以打開 SQL Server Management Studio (SSMS) 並檢查資料庫下的表格。 您將在表格中看到以下數據。
本教程指導您如何使用C#從CSV文件讀取數據並將其存儲到SQL Server數據庫中。 透過遵循這些步驟並利用 IronXL 庫,您可以在 C# 應用程式中高效管理 CSV 資料。
IronXL 提供免費試用,讓用戶在購買前體驗其功能。 這個完全功能的試用版本允許潛在用戶在實際環境中測試和評估產品,而生產中不會有水印。 試用期結束後,如果您決定繼續將 IronXL 用於您的專案,產品授權價格從$749開始。