C Sharpとデータベース - 結果の取得

提供:MochiuWiki : SUSE, EC, PCB
2019年6月29日 (土) 17:15時点におけるWiki (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

概要

C\#でSQL Serverに対してSELECT文を実行する際のサンプルコードを作成した。
ここでは、下記の2種類を例として取り上げる。

  1. SELECT文の実行結果をDataTableを用いてまとめて読み込む方法
  2. SELECT文の実行結果を1行ずつ読み込む方法


まとめて読み込む(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();

           // クエリの作成
           command.CommandText = @"SELECT count(*) FROM T_USER";

           // クエリの実行
           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を使用する。
CommandのExecuteReader()メソッドを実行することで、DataReaderを取得し、1行ずつ読み込んで処理を行う。
実装は面倒だが O/Rマッピングのようなことができる。

以下のサンプルコードにおけるUserModelはT_USERに対応する独自のクラスになる。

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

public List<usermodel> GetData()
{
   var list = new List<usermodel>();

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

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

           // クエリの作成
           command.CommandText = @"SELECT ID,PASSWORD,ROLE_NAME FROM T_USER";

           // クエリの実行
           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;
}