C#でCSVファイルからデータを読み取ってデータベースに保存する方法
今日のデジタル世界では、データを効率的に処理することが重要なタスクです。 ソフトウェア開発において一般的な要件は、CSVファイルからデータを読み取り、それをデータベースに保存することです。 このチュートリアルでは、C#を使用してCSVファイルからデータを読み取り、SQL Serverデータベースに保存する手順を、IronXLライブラリを用いて説明します。 このガイドは初心者向けに設計されており、シンプルで興味深い方法で説明されます。
基本を理解する
CSV ファイルとは何ですか?
CSV(コンマ区切り値)ファイルは、コンマで区切られたデータを含むプレーンテキストファイルです。 そのシンプルさと、Excelなどのさまざまなアプリケーションとの互換性のため、データ転送の一般的なフォーマットです。
SQL Serverとデータベースの役割
SQL ServerはMicrosoftによるデータベース管理システムです。 それはデータを構造化方式で保存および管理するために使用されます。 ここでは、CSVデータをSQL Serverテーブルに保存します。
IronXLの紹介
IronXLは、.NETアプリケーション向けに設計されたExcelライブラリで、開発者がMicrosoft Office Interopを必要とせずにExcelファイルを読み取り、生成し、編集できるように特別に設計されています。このライブラリは、.NET Core、.NET Standard、および.NET Frameworkを含むさまざまな.NETバージョンとプラットフォーム、およびWindows、Linux、macOSなど、さまざまなオペレーティングシステムとの互換性で際立っています。 これは、特にCSVファイルを扱うための、データインポートに強力なライブラリです。
C#でCSVファイルからデータを読み取り保存する方法
- Visual StudioでC#コンソールプログラムを作成します。
- NuGetパッケージマネージャーを使用してCSVライブラリをインストールします。
- ライブラリを使用してプログラムにCSVファイルをロードします。
- データベースとの接続を作成します。
- ライブラリを使用してCSVファイルからコンテンツを読み取ります。
- そのコンテンツを
SqlBulkCopyメソッドを使用してデータベースにコピーします。
以下は例のコードスニペットです:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Globalization;
using System.IO;
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))
{
// Mapping the CSV data to the corresponding model
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!");
}
}
}
// Define your model that maps to the CSV columns
public class YourModel
{
// Define properties here representing the CSV columns
}
}using System;
using System.Data;
using System.Data.SqlClient;
using System.Globalization;
using System.IO;
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))
{
// Mapping the CSV data to the corresponding model
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!");
}
}
}
// Define your model that maps to the CSV columns
public class YourModel
{
// Define properties here representing the CSV columns
}
}Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Globalization
Imports System.IO
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)
' Mapping the CSV data to the corresponding model
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
' Define your model that maps to the CSV columns
Public Class YourModel
' Define properties here representing the CSV columns
End Class
End NamespaceCSVファイルの実際のパス、CSVデータを表すモデルであるYourModel、データベース接続文字列である"your_connection_string"、およびデータベーステーブルの名前である"YourTableName"と置き換えてください。
環境の設定
前提条件
- Visual Studio: Visual Studioがインストールされていることを確認してください。
- SQL Server: SQL Serverがインストールされてアクセス可能であることを確認してください。
- IronXLインストール: 次のNuGetコマンドを実行してIronXLをインストールします:
dotnet add package IronXL
IronXLをインストールしたいプロジェクトディレクトリ内でこれらのコマンドを実行することを確認してください。
データをインポートする前に、SQL Serverデータベースに宛先テーブルを作成してください。
データをインポートする前に、SQL Serverデータベースに宛先テーブルを作成します。 このテーブルがCSVデータを保存します。
CREATE TABLE YourTableName (
Column1 DataType,
Column2 DataType,
...
);YourTableName、Column1、Column2、およびDataTypeを特定の詳細で置き換えてください。
CSVデータをインポートするためのステップバイステップガイド
- まず、インポートしたいデータを含むCSVファイルを用意します。
- Visual Studioで新しいC#コンソールアプリケーションプロジェクトを作成します。
CSVファイルを読み取るためにCsvHelper NuGetパッケージをインストールします。 Visual StudioのNuGetパッケージマネージャーコンソールを開いて、次のコマンドを実行することでこれを行うことができます:
Install-Package CsvHelperInstall-Package CsvHelperSHELL必要なusingステートメントをC#コードファイルの上部に追加します:
using System; using System.IO; using System.Globalization; using CsvHelper; using System.Data.SqlClient;using System; using System.IO; using System.Globalization; using CsvHelper; using System.Data.SqlClient;Imports System Imports System.IO Imports System.Globalization Imports CsvHelper Imports System.Data.SqlClient$vbLabelText $csharpLabelコード内でCSVファイルのパスを指定します。例:
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"$vbLabelText $csharpLabelC:\path\to\your\csv\file.csvをCSVファイルへの実際のパスに置き換えることを確認してください。CSVファイルを読み取るために
StreamReaderクラスの新しいインスタンスを作成します:using (var reader = new StreamReader(csvFilePath)) { // code goes here }using (var reader = new StreamReader(csvFilePath)) { // code goes here }Using reader = New StreamReader(csvFilePath) ' code goes here End Using$vbLabelText $csharpLabelStreamReaderオブジェクトを渡してCsvReaderクラスの新しいインスタンスを作成します: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 }Using reader = New StreamReader(csvFilePath) Using csv = New CsvReader(reader, CultureInfo.InvariantCulture) ' code goes here End Using End Using$vbLabelText $csharpLabel必要に応じて
CsvReaderオブジェクトを任意の設定で構成します。 例えば:csv.Configuration.HasHeaderRecord = true;csv.Configuration.HasHeaderRecord = true;csv.Configuration.HasHeaderRecord = True$vbLabelText $csharpLabelCsvReaderオブジェクトのGetRecords()メソッドを使用してCSVデータをオブジェクトのコレクションに読み込みます。 ``をCSVファイルの各レコードを表すオブジェクトの型に置き換えてください。例:var records = csv.GetRecords<YourModel>();var records = csv.GetRecords<YourModel>();Dim records = csv.GetRecords(Of YourModel)()$vbLabelText $csharpLabelモデルクラスの実際の名前で
YourModelを置き換えてください。レコードを反復し、必要な処理や検証を実行します。
foreach (var record in records) { // Process each record as needed }foreach (var record in records) { // Process each record as needed }For Each record In records ' Process each record as needed Next record$vbLabelText $csharpLabel- ADO.NETまたはEntity FrameworkなどのORMツールを使用して、SQL Serverデータベースへの接続をオプションで確立します。
- 選択したデータベースアクセスメカニズムを使用して、各レコードをデータベースに挿入します。 例えば、ADO.NETを使用する場合、と
SqlBulkCopyクラスを利用してデータを効率的に一括挿入できます。 - インポートプロセス中に発生する可能性のある例外を処理し、適切なエラーメッセージやログを提供します。
- アプリケーションを実行し、CSVデータがデータベースに正常にインポートされていることを確認することでテストします。
それだけです! これで、C#を使用してCSVデータをSQL Serverデータベースに正常にインポートしました。
ステップ1: CSVファイルを読み取る
CSVファイルからデータをインポートするタスクを開始する際には、最初に重要なステップはそのデータを正確に読み取ることです。 通常、CSVファイル内の各行はデータレコードを表し、各レコードはコンマで区切られた1つ以上のフィールドで構成されます。
その後、CSVファイルを処理するためにIronXLライブラリを使用します。IronXLを使用してCSVファイルを読み取るには、WorkBookとWorkSheetクラスを使用します。 WorkBookクラスはスプレッドシート全体を表し、これはExcelファイルや、ここではCSVファイルである可能性があります。CSVファイルパスをWorkBookオブジェクトにロードすると、IronXLはCSVファイルをスプレッドシート/データテーブルとして処理します。
using IronXL;
using System.Data;
public class CSVReader
{
// Reads a CSV file and converts it to a DataTable
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;
using System.Data;
public class CSVReader
{
// Reads a CSV file and converts it to a DataTable
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
Imports System.Data
Public Class CSVReader
' Reads a CSV file and converts it to a DataTable
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ステップ2: データベース接続の確立
SQL Serverデータベースへの接続を確立することは、CSVデータを保存するプロセスの基本的なステップです。 このステップでは、アプリケーションとデータベースサーバー間の通信リンクを設定します。 成功した接続は重要です、なぜなら、それがなければデータベースへのデータ転送が不可能になるからです。
このステップは、C#で接続文字列を使用して接続を作成して開くことに焦点を当てています。 接続文字列は接続を確立するために必要な情報を含む重要なコンポーネントです。 それはデータベースへのドアを開けるキーのようなものです。
using System.Data.SqlClient;
public class DatabaseConnector
{
// Connection string to connect to the database
private string connectionString = "your_connection_string_here";
public SqlConnection ConnectToDatabase()
{
SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
return connection;
}
}using System.Data.SqlClient;
public class DatabaseConnector
{
// Connection string to connect to the database
private string connectionString = "your_connection_string_here";
public SqlConnection ConnectToDatabase()
{
SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
return connection;
}
}Imports System.Data.SqlClient
Public Class DatabaseConnector
' Connection string to connect to the database
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 ClassconnectionString変数にはSQL Serverに接続するために必要なすべての詳細が含まれています。 通常、サーバー名、データベース名、ユーザーID、およびパスワードが含まれています。 例としての接続文字列は次のようになります:Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;。 これらのプレースホルダーを実際のサーバーの詳細で置き換えることが重要です。
ステップ3: データをデータベースに保存する
SQL Serverデータベースへの接続を確立した後、次に重要なステップはCSVデータをデータベースに保存することです。 このステップでは、読み取られて処理されたデータをSQL Serverテーブルに転送します。 これはデータ処理プロセスの重要な部分であり、ローカルファイルからデータベースサーバーへの実際のデータ移行が関与します。
このステップでは、DataTableに現在収納されているCSVデータをSQL Serverデータベースに転送する方法に焦点を当てます。 これを効率的に達成するために、C#とSQL Serverの機能を組み合わせて使用します。
using System;
using System.Data;
using System.Data.SqlClient;
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);
}
}
}
}
}using System;
using System.Data;
using System.Data.SqlClient;
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);
}
}
}
}
}Imports System
Imports System.Data
Imports System.Data.SqlClient
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テーブルにデータを転送します。 この操作は、大量のデータを効率的に扱うための大規模なデータ転送に対応できるように設計されています。
ステップ4: すべてをまとめる
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 Classpath_to_your_csv_file.csvをCSVファイルへのパスで置き換えてください。
プロジェクトを実行する
プロジェクトを実行すると、次の出力が表示されます。 成功のメッセージは、すべての操作が正常に実行され、データがデータベースにコピーされたことを表します。
Data imported successfully!SQL Server Management Studio (SSMS)を開いて、データベースの下のテーブルを確認できます。 テーブルには次のデータが表示されます。

結論
このチュートリアルでは、C#を使用してCSVファイルからデータを読み取り、SQL Serverデータベースに保存するプロセスを案内しました。 これらの手順に従い、IronXLライブラリを利用することで、C#アプリケーションでCSVデータを効率的に管理できます。
IronXLは、購入を決定する前にその機能を体験するための無料トライアルをユーザーに提供しています。 この完全な機能を備えたトライアルにより、潜在的なユーザーは、本番環境で透かし無しで製品をテストして評価することができます。 試用期間後、プロジェクトでIronXLを使い続けることを決定した場合、製品のライセンスは$799から始まります。
よくある質問
C#でCSVファイルからデータを読み取る方法は?
C#でCSVファイルからデータを読み取るには、IronXLライブラリを使用できます。IronXLは、CSVファイルをExcelスプレッドシートのように読み取り、操作できる `WorkBook` および `WorkSheet` クラスを提供しています。
C#を使用してCSVデータをSQL Serverデータベースに保存する手順は?
C#を使用してCSVデータをSQL Serverデータベースに保存するには、まずIronXLでCSVを読み取り、データを `DataTable` にロードし、`SqlBulkCopy` を使用してデータをSQL Serverテーブルに効率的に挿入します。
私のC#プロジェクトでIronXLを使用するためにインストールする方法は?
NuGetパッケージマネージャーを使用して、Visual StudioでIronXLをインストールできます。NuGetパッケージマネージャーで'IronXL'を検索し、プロジェクトに追加してください。
C#でCSVファイルを扱うためにIronXLを使用する主な利点は何ですか?
C#でCSVファイルを扱うためにIronXLを使用する主な利点は、.NETアプリケーション内でCSVとExcelファイルをシームレスに管理および操作できることであり、さまざまな.NETバージョンとオペレーティングシステムに互換性を提供することです。
IronXLを使用してCSVファイルだけでなくExcelファイルも扱うことはできますか?
はい、IronXLはExcelおよびCSVファイルの処理用に設計されており、.NETアプリケーション内でスプレッドシートデータを管理するための多用途なツールです。
IronXLを使用してCSVファイルを読み取る際にエラーが発生した場合、どうすればよいですか?
IronXLを使用してCSVファイルを読み取る際にエラーが発生した場合は、CSVファイルが正しくフォーマットされていること、IronXLがプロジェクトに正しくインストールされていることを確認してください。トラブルシューティングのヒントは、IronXLのドキュメントを参照してください。
購入を決定する前にIronXLの機能をテストする方法は?
IronXLは、使用制限なしで製品をテストおよび評価できる完全機能の無料トライアルを提供しています。
IronXLを使用してデータベースにCSVデータを保存するための前提条件は何ですか?
前提条件には、Visual Studioのインストール、SQL Serverへのアクセス、そしてNuGet経由でのIronXLのインストールが含まれます。また、CSVデータを保存するためのSQL Serverテーブルを設定する必要があります。






