"},スプレッドシートデータの可視化,Office Interop なしの Excel,ExcelとSQL Serverの統合"> フッターコンテンツにスキップ
IRONXLの使用

C#でCSVファイルをDataTableに読み込む方法

.NETの開発者にとって、CSVファイルを扱うことは一般的な作業です。販売レポートのインポート、在庫処理、または顧客記録の同期を行う場合にも同様です。 CSVファイルをDataTableに変換することで、簡単に操作、分析、またはデータベーステーブルに挿入することができます。

C#でCSVファイルを読むのは難しいことがあります。大きなファイル、異なる区切り文字、埋め込まれたカンマは、しばしば複雑な解析やExcelを必要とします。 IronXLはこの問題を簡素化します。ほんの数行のコードで、任意のファイルパスからCSVファイルを読み込み、正しい列ヘッダーを持つDataTableに変換し、Excelなしで一括データベース操作の準備をすることができます。

このガイドでは、次のことを学びます:

  • C#でCSVファイルをDataTableにロードする
  • カンマ、タブ、またはセミコロンのような異なる区切り文字を扱う
  • DataTableを直接SQL Serverに効率的にインポートする
  • 大量のデータセットをメモリ問題なく信頼性を持って管理する

最後には、.NETアプリケーションでIronXLを使用して、CSVデータを実用的な情報に変換する完全かつ実践的なワークフローを持つことができます。

なぜCSVからDataTableへの変換が必要なのか?

CSVからDataTableへの変換により、開発者はカンマ区切り値(CSVデータ)を、データをさらに処理するための構造化オブジェクトであるDataTableに変換することができます。 在庫データ、顧客記録、取引記録を扱う場合に、CSVを新しいDataTableに効率的に変換できることは重要です。 最初の行を列ヘッダーとして使用することで、DataTableの列がデータベーステーブルのスキーマと整合することを確認できます。

従来のアプローチは、しばしば大きなファイル、異なる区切り文字、またはメモリ管理に苦慮します。 IronXLはこれらの課題を排除し、異なる区切り文字、引用されたフィールド、埋め込まれたカンマをスムーズに処理します。 IronXLのCSV読み取り機能は、これらの一般的な問題点を排除します。

IronXLのインストール方法?

IronXLを使用するには、シンプルなNuGetパッケージインストールが必要です。 Visual StudioのNuGetパッケージマネージャーコンソールを開き、実行します:

Install-Package IronXL.Excel

インストールが完了したら、IronXL名前空間をプロジェクトに追加します:

using IronXL;
using System.Data;
using IronXL;
using System.Data;
Imports IronXL
Imports System.Data
$vbLabelText   $csharpLabel

これにより、Excelの依存関係なしに強力なCSV処理機能にアクセスできます。 IronXLの広範なAPIの詳細については、APIリファレンスドキュメントを参照してください。

NuGet 購入の準備ができていませんか?

PM >  Install-Package IronXL.Excel

IronXLNuGet でチェックしてください。1000万回以上のダウンロードで、C#によるPDF開発を変革しています。 また、DLLをダウンロードできます。

CSVをDataTableに変換する方法?

IronXLの美しさはそのシンプルさにあります。 ここに、CSVファイルを読み取ってDataTableに変換する方法があります。

// Load CSV file into a WorkBook object
WorkBook workbook = WorkBook.LoadCSV("sales_data.csv", 
    fileFormat: ExcelFileFormat.XLSX);
// Access the default worksheet
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Convert to DataTable with headers
DataTable dataTable = worksheet.ToDataTable(true);
// Display the data
foreach (DataRow row in dataTable.Rows)
{
    foreach (var item in row.ItemArray)
    {
        Console.Write($"{item}\t");
    }
    Console.WriteLine();
}
// Load CSV file into a WorkBook object
WorkBook workbook = WorkBook.LoadCSV("sales_data.csv", 
    fileFormat: ExcelFileFormat.XLSX);
// Access the default worksheet
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Convert to DataTable with headers
DataTable dataTable = worksheet.ToDataTable(true);
// Display the data
foreach (DataRow row in dataTable.Rows)
{
    foreach (var item in row.ItemArray)
    {
        Console.Write($"{item}\t");
    }
    Console.WriteLine();
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

LoadCSVメソッドは、あなたのCSVファイルを賢く解析し、引用されたフィールドや埋め込まれたカンマなどの一般的なケースを自動的に処理します。 fileFormatパラメータは、IronXLがCSVデータを内部的に解釈する方法を指示し、Excel互換の構造と見なされることを保証します。 ロード後、ToDataTable(true)メソッドはワークシートをDataTableに変換し、パラメータtrueは最初の行を列ヘッダーとして使用することを示します。 これにより、CSVヘッダーと一致する名前付き列を持つクリーンな構造体DataTableが作成されます。 より高度な操作オプションについては、ExcelからDataTableへの完全なチュートリアルを参照してください。

DataTableをSQL Serverにインポートする方法?

DataTableを用意したら、SqlBulkCopyを使用してSQL Serverへのインポートが非常に効率的になります:

using System.Data;
using Microsoft.Data.SqlClient;
using IronXL;
class Program
{
    static void Main(string[] args)
    {
        // Create connection string
        string connectionString = @"Data Source=localhost;Initial Catalog=SalesDB;
                           Integrated Security=True;TrustServerCertificate=True;";
        // Read CSV into DataTable
        WorkBook workbook = WorkBook.LoadCSV("inventory_report.csv");
        DataTable dataTable = workbook.DefaultWorkSheet.ToDataTable(true);
        // Bulk insert into SQL Server
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
            {
                // Set destination table name
                bulkCopy.DestinationTableName = "dbo.Inventory";
                // Map DataTable columns to SQL table columns
                bulkCopy.ColumnMappings.Add("ProductCode", "product_code");
                bulkCopy.ColumnMappings.Add("Quantity", "quantity");
                bulkCopy.ColumnMappings.Add("LastUpdated", "last_updated");
                // Set batch size for better performance
                bulkCopy.BatchSize = 1000;
                // Write data to SQL Server
                bulkCopy.WriteToServer(dataTable);
            }
        }
        Console.WriteLine($"Successfully imported {dataTable.Rows.Count} records");
    }
}
using System.Data;
using Microsoft.Data.SqlClient;
using IronXL;
class Program
{
    static void Main(string[] args)
    {
        // Create connection string
        string connectionString = @"Data Source=localhost;Initial Catalog=SalesDB;
                           Integrated Security=True;TrustServerCertificate=True;";
        // Read CSV into DataTable
        WorkBook workbook = WorkBook.LoadCSV("inventory_report.csv");
        DataTable dataTable = workbook.DefaultWorkSheet.ToDataTable(true);
        // Bulk insert into SQL Server
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
            {
                // Set destination table name
                bulkCopy.DestinationTableName = "dbo.Inventory";
                // Map DataTable columns to SQL table columns
                bulkCopy.ColumnMappings.Add("ProductCode", "product_code");
                bulkCopy.ColumnMappings.Add("Quantity", "quantity");
                bulkCopy.ColumnMappings.Add("LastUpdated", "last_updated");
                // Set batch size for better performance
                bulkCopy.BatchSize = 1000;
                // Write data to SQL Server
                bulkCopy.WriteToServer(dataTable);
            }
        }
        Console.WriteLine($"Successfully imported {dataTable.Rows.Count} records");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

SqlBulkCopyクラスは、大規模データインポートのための優れたパフォーマンスを提供します。 ColumnMappingsコレクションは、異なる名前のDataTable列をデータベース列にマッピングすることを可能にし、データスキーマのフレキシビリティを確保します。 BatchSizeプロパティは、すべてを一気に読み込むのではなく、チャンクでレコードを処理することでメモリ使用量を最適化します。 このアプローチにより、企業規模のデータ操作に理想的な、効率的に数百万件のレコードを処理することができます。 IronXLのDataSetとDataTable機能についてさらに学びましょう。

出力

ここで、SSMSでクエリ*SELECT FROM dbo.Inventory;**を使用して、CSVデータが実際にSQL Serverにインポートされたことを確認できます。 まず、例で使用したCSVファイルのデータを見てみましょう。

C#でCSVファイルをDataTableに読む方法:図2 - サンプルCSVデータ

次に、クエリの出力を確認すると、すべての列、ヘッダー、および行がデータベーステーブルに正常にコピーされたことがわかります。

C#でCSVファイルをDataTableに読む方法:図3 - インポートされたレコードを表示するデータベースビュー

異なる区切り文字の処理方法?

すべてのCSVファイルがカンマを使用するわけではありません。 IronXLはさまざまな区切り文字をシームレスに処理します:

using IronXL;
using System;
using System.Data;
using System.IO;
class Program
{
    static void Main()
    {
        // --- Tab-delimited file ---
        string tsvPath = @"export_data.tsv";
        WorkBook tsvWorkbook = WorkBook.LoadCSV(tsvPath, ExcelFileFormat.XLSX, "\t");
        // --- Semicolon-delimited file ---
        string semiPath = @"european_data.csv";
        string tempCsv = Path.Combine(Path.GetTempPath(), "european_data_comma.csv");
        // Replace semicolons with commas for proper parsing
        var lines = File.ReadAllLines(semiPath);
        for (int i = 0; i < lines.Length; i++)
        {
            lines[i] = lines[i].Replace(';', ',');
        }
        File.WriteAllLines(tempCsv, lines);
        WorkBook semiWorkbook = WorkBook.LoadCSV(tempCsv, ExcelFileFormat.XLSX);
        // Print both workbooks
        PrintWorkbook(tsvWorkbook, "Tab-delimited File");
        PrintWorkbook(semiWorkbook, "Semicolon-delimited File");
    }
    static void PrintWorkbook(WorkBook workbook, string name)
    {
        Console.WriteLine($"\n--- {name} ---\n");
        DataTable dt = workbook.DefaultWorkSheet.ToDataTable(true);
        // Print column headers
        foreach (DataColumn col in dt.Columns)
        {
            Console.Write($"{col.ColumnName}\t");
        }
        Console.WriteLine();
        // Print rows
        foreach (DataRow row in dt.Rows)
        {
            foreach (var item in row.ItemArray)
            {
                Console.Write($"{item}\t");
            }
            Console.WriteLine();
        }
    }
}
using IronXL;
using System;
using System.Data;
using System.IO;
class Program
{
    static void Main()
    {
        // --- Tab-delimited file ---
        string tsvPath = @"export_data.tsv";
        WorkBook tsvWorkbook = WorkBook.LoadCSV(tsvPath, ExcelFileFormat.XLSX, "\t");
        // --- Semicolon-delimited file ---
        string semiPath = @"european_data.csv";
        string tempCsv = Path.Combine(Path.GetTempPath(), "european_data_comma.csv");
        // Replace semicolons with commas for proper parsing
        var lines = File.ReadAllLines(semiPath);
        for (int i = 0; i < lines.Length; i++)
        {
            lines[i] = lines[i].Replace(';', ',');
        }
        File.WriteAllLines(tempCsv, lines);
        WorkBook semiWorkbook = WorkBook.LoadCSV(tempCsv, ExcelFileFormat.XLSX);
        // Print both workbooks
        PrintWorkbook(tsvWorkbook, "Tab-delimited File");
        PrintWorkbook(semiWorkbook, "Semicolon-delimited File");
    }
    static void PrintWorkbook(WorkBook workbook, string name)
    {
        Console.WriteLine($"\n--- {name} ---\n");
        DataTable dt = workbook.DefaultWorkSheet.ToDataTable(true);
        // Print column headers
        foreach (DataColumn col in dt.Columns)
        {
            Console.Write($"{col.ColumnName}\t");
        }
        Console.WriteLine();
        // Print rows
        foreach (DataRow row in dt.Rows)
        {
            foreach (var item in row.ItemArray)
            {
                Console.Write($"{item}\t");
            }
            Console.WriteLine();
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

このコードは、異なる区切り文字を持つCSVファイルをIronXL WorkBookオブジェクトにロードします。 タブ区切りファイルは「\t」を区切りとして読み込み、セミコロン区切りファイルはロード前に標準のCSV形式に変換されます。 各ワークブックのデフォルトワークシートはToDataTable(true)でDataTableに変換され、最初の行が列ヘッダーとして使用されます。

PrintWorkbookメソッドは、その後、DataTableを反復処理して、ヘッダーとすべての行を含むデータをコンソールに表示します。 この柔軟性により、開発者が議論する一般的なCSV解析の課題の多くに対処します。

出力

コンソール出力を見てもらえるように、どちらのファイルも異なる区切り文字から始まったにもかかわらず、データテーブルとして正しくフォーマットされています。

C#でCSVファイルをDataTableに読む方法:図4 - 異なる区切り文字の出力

結論

IronXLは、CSVデータベースインポートの複雑な作業を簡単で信頼性の高いプロセスに変換します。 ほんの数行のコードで、次のことができます:

  • 任意のファイルパスからCSVファイルを読み取る
  • CSVデータを新しいDataTableに変換する
  • 列ヘッダーとDataTableの列を保持する
  • 数百万行をデータベーステーブルに効率的にインポートする

ライブラリは、CSVの解析、メモリ管理、およびデータ型変換の細かい点を自動的に処理し、ファイル処理の詳細ではなくビジネスロジックに集中できるようにします。

データインポートワークフローを効率化する準備はできましたか? 無料トライアルを開始して、チームのニーズに最適なフィットを見つけてください。

よくある質問

C#でCSVファイルをDataTableに読み込む最良の方法は何ですか?

IronXLを使用すると、開発者ガイドで提供されているシンプルなコード例で、効率的にC#でCSVファイルをDataTableに読み込むことができます。

なぜCSVをDataTableに変換するのにIronXLを使用するべきでしょうか?

IronXLは、CSVファイルを解析し、DataTableに変換するためのシンプルなAPIを提供し、C#でのデータ操作と分析を容易にします。

IronXLは、大きなCSVファイルをDataTableに変換する際に対応できますか?

はい、IronXLはパフォーマンス問題なく大きなCSVファイルを効率的に処理し、DataTableに変換するように設計されています。

CSVをDataTableに変換した後、IronXLはデータ操作をサポートしていますか?

もちろんです。IronXLを使用してCSVファイルをDataTableに変換した後、必要に応じてデータを簡単に操作および分析できます。

IronXLを使用してCSVデータをデータベースにインポートするにはどうすればよいですか?

CSVファイルをIronXLを使用してDataTableに変換した後、C#の標準的なデータベース接続を使用してデータをデータベースに挿入できます。

IronXLは、エンタープライズアプリケーションでのCSVファイル処理に適していますか?

はい、IronXLはエンタープライズアプリケーションでのCSV処理タスクを処理するために設計されており、優れたパフォーマンスと信頼性を提供します。

C#でCSVファイルをDataTableに変換する利点は何ですか?

CSVファイルをDataTableに変換することで、データの操作、分析、およびデータベースとの統合がより容易になり、アプリケーションのデータ処理能力が向上します。

IronXLはCSV以外のスプレッドシートファイルタイプにも使用できますか?

はい、IronXLはExcelフォーマットを含むさまざまなスプレッドシートファイルタイプをサポートし、C#での多用途のデータ処理を可能にします。

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。