在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
在當今的數位世界中,高效地處理數據是一項重要的任務。軟體開發中的常見需求之一是從 CSV 文件中讀取數據並將其存儲到數據庫中。本教程涵蓋了使用 C# 從 CSV 文件中讀取數據並將其存儲到 SQL Server 數據庫中的步驟,特別是利用 IronXL library本指南專為初學者設計,將以簡單、有趣的方式進行講解。
CSV (逗號分隔值) 文件是一個純文字文件,包含以逗號分隔的數據。由於其簡單性和與各種應用程式(如 Excel)的相容性,這是一種流行的數據傳輸格式。
SQL Server 是由微軟開發的資料庫管理系統。它用來以結構化的方式存儲和管理資料。在我們的案例中,我們會將 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 文件中讀取內容。
這是一段範例代碼:
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」替換為您的資料庫表名稱。
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
GetRecords<T>()將
CsvReader物件的方法用於將 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
類來高效地批量插入數據。
在導入過程中處理任何可能發生的異常,並提供適當的錯誤信息或日誌。
就是這樣。! 您現在已成功使用 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。(最大)**以適應任何文本數據。這是一種通用的方法,可能需要進一步細化以更貼近特定數據類型。
之後,會制定並執行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。