C# で SQL Server から SELECT文 の 実行結果 を 取得する 方法

0 件のコメント

C# で SQL Server に対して SELECT文 を実行する際のサンプルコードを作成しました。 ここでは「SELECT文 の 実行結果 を DataTable へ投入する方法」と「SELECT文 の 実行結果 を 1行ずつ読み込んで処理していく方法」の2種類を例として取り上げます。

目次

まとめて読み込む (DataTable)

DataTable へ SELECT文 の 結果 を一括読み込みしてしまう方法です。 単純で理解しやすい方法かと思います。 DataSet へ 結果投入してしまってもよいのですが、DataTable を取り出すためにワンクッション必要となるため、個人的には DataTable へ直接投入で良いかと思います。

まとめて DataTable へ読み込む際は、 DataAdapter を利用します。

using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;

public DataTable GetData()
{
    var table = new DataTable();

    // 接続文字列の取得
    var connectionString = ConfigurationManager.ConnectionStrings["sqlsvr"].ConnectionString;

    using (var connection = new SqlConnection(connectionString))
    using (var command = connection.CreateCommand())
    {
        try
        {
            // データベースの接続開始
            connection.Open();

            // SQLの設定
            command.CommandText = @"SELECT count(*) FROM T_USER";

            // SQLの実行
            var adapter = new SqlDataAdapter(command);
            adapter.Fill(table);
        }
        catch (Exception exception)
        {
            Console.WriteLine(exception.Message);
            throw;
        }
        finally
        {
            // データベースの接続終了
            connection.Close();
        }
    }

    return table;
}

1行ずつ読み込む (SqlDataReader)

SELECT の 結果 を1行ずつ読み込む場合、 DataReader を利用します。 CommandExecuteReader() メソッドを実行することで DataReader を取得し、1行ずつ読み込んで処理を行います。 少し実装は面倒ですが O/Rマッピング のようなことができます。 以下のサンプルコードにおける UserModelT_USER に対応する独自のクラスになります。

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using WebApplication1.Models;

public List GetData()
{
    var list = new List();

    // 接続文字列の取得
    var connectionString = ConfigurationManager.ConnectionStrings["sqlsvr"].ConnectionString;

    using (var connection = new SqlConnection(connectionString))
    using (var command = connection.CreateCommand())
    {
        try
        {
            // データベースの接続開始
            connection.Open();

            // SQLの設定
            command.CommandText = @"SELECT ID,PASSWORD,ROLE_NAME FROM T_USER";

            // SQLの実行
            using (var reader = command.ExecuteReader())
            {
                while (reader.Read() == true)
                {
                    list.Add(new UserModel()
                    {
                        Id = reader["ID"] as string,
                        Password = reader["PASSWORD"] as string,
                        RoleName = reader["ROLE_NAME"] as string
                    });
                }
            }
        }
        catch (Exception exception)
        {
            Console.WriteLine(exception.Message);
            throw;
        }
        finally
        {
            // データベースの接続終了
            connection.Close();
        }
    }

    return list;
}