IRONXLの使用

CSVファイルからデータを読み取り、データベースに格納する方法 (C#)

公開済み 2024年1月27日
共有:

今日のデジタル世界では、データの効率的な処理が重要な課題です。 ソフトウェア開発における一般的な要求の一つは、CSVファイルからデータを読み取り、それをデータベースに保存することです。 このチュートリアルでは、CSVファイルからデータを読み取り、C#を使ってそのデータを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ファイルの処理に役立ちます。

CSVファイルからデータを読み取り、C#で保存する方法

  1. Visual StudioでC#コンソールプログラムを作成します。

  2. NuGetパッケージマネージャを使用してCSVライブラリをインストールしてください。

  3. ライブラリを使用してプログラムにCSVファイルを読み込みます。

  4. データベースとの接続を作成します。

  5. ライブラリを使用してCSVファイルから内容を読み取ります。

  6. そのコンテンツをデータベースにコピーするには、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
VB   C#

「path\to\your\csv\file.csv」を実際のCSVファイルのパスに、「YourModel」をCSVデータを表すモデルに、「your_connection_string」をデータベース接続文字列に、「YourTableName」をデータベーステーブルの名前に置き換えてください。

環境の設定

前提条件

  1. Visual Studio: Visual Studioがインストールされていることを確認してください。

  2. SQL Server: SQL Serverがインストールされ、アクセス可能である必要があります。

  3. IronXLのインストール: 次のNuGetコマンドを実行してIronXLをインストールします:
Install-Package IronXL.Excel

または

dotnet add package IronXL

以下のコマンドは、IronXLをインストールしたいプロジェクトディレクトリ内で実行してください。

SQL Server テーブルの作成

データをインポートする前に、SQL Serverデータベースに宛先テーブルを作成してください。 このテーブルにはCSVデータが保存されます。

CREATE TABLE YourTableName (
    Column1 DataType,
    Column2 DataType,
    ...
);

以下の YourTableNameColumn1Column2、および DataType は、具体的な詳細に置き換えてください。

CSVデータをインポートするためのステップバイステップガイド

  1. まず、インポートしたいデータを含むCSVファイルを用意してください。

  2. Visual Studioで新しいC#コンソールアプリケーションプロジェクトを作成します。

  3. CSVファイルを読み取るために、CsvHelper NuGetパッケージをインストールします。 Visual StudioでNuGetパッケージマネージャーコンソールを開き、次のコマンドを実行することでこれを行うことができます:
    :installCmd Install-Package CsvHelper
  1. C#コードファイルの先頭に必要なusingステートメントを追加してください:
    using System;
    using System.IO;
    using CsvHelper;
    using System;
    using System.IO;
    using CsvHelper;
Imports System
	Imports System.IO
	Imports CsvHelper
VB   C#
  1. コード内で、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"
VB   C#

C:\path\to\your\csv\file.csv を実際のCSVファイルのパスに置き換えてください。

  1. CSVファイルを読み取るためにStreamReaderクラスの新しいインスタンスを作成します:
    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
VB   C#
  1. StreamReaderオブジェクトを渡して、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
    }
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#
  1. 必要に応じて、CsvReaderオブジェクトを設定します。 例えば:
    csv.Configuration.HasHeaderRecord = true;
    csv.Configuration.HasHeaderRecord = true;
csv.Configuration.HasHeaderRecord = True
VB   C#
  1. `メソッドを使って、「IronPDF for .NET」でPDFからテーブルデータを簡単に抽出できます。このメソッドは、PDF内のテーブルを解析し、各行をオブジェクトとして返します。たとえば、以下のコードスニペットはPDFファイルからデータを抽出し、それをコンソールに出力する方法を示しています:
using IronPdf;

var pdf = PdfDocument.FromFile("example.pdf");
var records = pdf.GetRecords<TableRecord>();

foreach (var record in records)
{
    Console.WriteLine($"{record.ColumnName1}, {record.ColumnName2}");
}
using IronPdf;

var pdf = PdfDocument.FromFile("example.pdf");
var records = pdf.GetRecords<TableRecord>();

foreach (var record in records)
{
    Console.WriteLine($"{record.ColumnName1}, {record.ColumnName2}");
}
Imports IronPdf

Private pdf = PdfDocument.FromFile("example.pdf")
Private records = pdf.GetRecords(Of TableRecord)()

'INSTANT VB TODO TASK: C# 'records' are not converted by Instant VB:
'foreach (var record in records)
'{
'	Console.WriteLine(string.Format("{0}, {1}", record.ColumnName1, record.ColumnName2));
'}
VB   C#

この仕組みを使えば、PDFからのデータマイニングやレポート作成が大幅に効率化されます。()CsvReaderオブジェクトのmethodを使用して、CSVデータをオブジェクトのコレクションに読み込みます。 次の内容を日本語に翻訳して下さい:

ReplaceCSVファイル内の各レコードを表すオブジェクトのタイプを指定します。例えば:

    var records = csv.GetRecords<YourModel>();
    var records = csv.GetRecords<YourModel>();
Dim records = csv.GetRecords(Of YourModel)()
VB   C#

モデルクラスの実際の名前を YourModel と置き換えてください。

  1. レコードを反復処理して、必要な処理や検証を行います。
    foreach (var record in records)
    {
        // code goes here
    }
    foreach (var record in records)
    {
        // code goes here
    }
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#
  1. オプションとして、ADO.NETまたはEntity FrameworkのようなORMツールを使用してSQL Serverデータベースに接続を確立します。

  2. 選択したデータベースアクセスメカニズムを使用して、各レコードをデータベースに挿入します。 例えば、ADO.NETを使用している場合、SqlBulkCopyクラスを活用してデータを効率的に一括挿入することができます。

  3. インポートプロセス中に発生する可能性のある例外を処理し、適切なエラーメッセージまたはログを提供します。

  4. アプリケーションを実行して、CSVデータがデータベースに正常にインポートされていることを確認してください。

    以上です! C#を使用してCSVデータをSQL Serverデータベースに正常にインポートしました。

ステップ1: CSVファイルの読み込み

CSVファイルからデータをインポートする作業を始める際の最初の重要なステップは、その内部のデータを正確に読み取ることです。 CSVファイルの各行は通常データレコードを表しており、各レコードはカンマで区切られた一つまたは複数のフィールドで構成されています。

次に、CSVファイルを扱うためにIronXLライブラリを使用します。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
VB   C#

ステップ2:データベース接続の確立

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
VB   C#

connectionString 変数には、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の機能を組み合わせて使用しています。

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
VB   C#

SQL Serverデータベースへの接続をDatabaseConnectorクラスを使用して開始し、データトランザクションの経路を確保します。 メソッドはデータベース内に「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 Class
VB   C#

path_to_your_csv_file.csv をあなたのCSVファイルのパスに置き換えてください。

プロジェクトの実行

プロジェクトを実行すると、以下の出力が表示されます。 成功メッセージは、すべての操作が正常に実行され、データがデータベースにコピーされたことを示しています。

Data imported successfully!

では、SQL Server Management Studio を開くことができます。(SSMS)データベースの下のテーブルを確認してください。 以下のデータがテーブルに表示されます。

CSVファイルからデータを読み取りデータベースに保存する方法C#: 図1 - 出力データベース

結論

このチュートリアルでは、C#を使用してCSVファイルからデータを読み取り、それをSQL Serverデータベースに格納するプロセスについて案内しました。 これらの手順に従いIronXLライブラリを利用することで、C#アプリケーションでCSVデータを効率的に管理することができます。

IronXLは、無料試用購入を決定する前に機能を体験できるように。 この完全に機能するトライアル版により、潜在的なユーザーは本番環境で透かしなしで製品をテストおよび評価することができます。 試用期間が終了した後もプロジェクトでIronXLを使用し続けることを決定した場合、製品のライセンスは$749から開始されます。

< 以前
C#でDatagridviewをExcelにエクスポートする方法
次へ >
ExcelファイルをC#でXMLに変換する方法