「C Sharpとデータベース - 結果の取得」の版間の差分
		
		
		
		
		
		ナビゲーションに移動
		検索に移動
		
				
		
		
	
 (ページの作成:「 == 概要 == C\#でSQL Serverに対してSELECT文を実行する際のサンプルコードを作成した。<br> ここでは、下記の2種類を例として取り…」)  | 
				細 (文字列「</source>」を「</syntaxhighlight>」に置換)  | 
				||
| (2人の利用者による、間の8版が非表示) | |||
| 1行目: | 1行目: | ||
== 概要 ==  | == 概要 ==  | ||
C  | C#でSQL Serverに対してSELECT文を実行する時のサンプルコードを記載する。<br>  | ||
ここでは、下記の2種類を例として取り上げる。<br>  | ここでは、下記の2種類を例として取り上げる。<br>  | ||
* SELECT文の実行結果をDataTableを用いてまとめて読み込む方法  | |||
* SELECT文の実行結果を1行ずつ読み込む方法  | |||
<br>  | <br>  | ||
| 11行目: | 11行目: | ||
DataSetを使用する方法もあるが、DataTableを取り出すためにワンクッション必要となるため、DataTableへ直接代入する方がよい。<br><br>  | DataSetを使用する方法もあるが、DataTableを取り出すためにワンクッション必要となるため、DataTableへ直接代入する方がよい。<br><br>  | ||
一括でDataTableへ読み込む際は、DataAdapterを使用する。<br>  | 一括でDataTableへ読み込む際は、DataAdapterを使用する。<br>  | ||
 <syntaxhighlight lang="c#">  | |||
  using System;  |   using System;  | ||
  using System.Configuration;  |   using System.Configuration;  | ||
| 52行目: | 52行目: | ||
     return table;  |      return table;  | ||
  }  |   }  | ||
 </syntaxhighlight>  | |||
<br>  | <br>  | ||
| 59行目: | 60行目: | ||
実装は面倒だが O/Rマッピングのようなことができる。<br><br>  | 実装は面倒だが O/Rマッピングのようなことができる。<br><br>  | ||
以下のサンプルコードにおけるUserModelはT_USERに対応する独自のクラスになる。<br>  | 以下のサンプルコードにおけるUserModelはT_USERに対応する独自のクラスになる。<br>  | ||
 <syntaxhighlight lang="c#">  | |||
  using System;  |   using System;  | ||
  using System.Collections.Generic;  |   using System.Collections.Generic;  | ||
| 111行目: | 112行目: | ||
     return list;  |      return list;  | ||
  }  |   }  | ||
 </syntaxhighlight>  | |||
<br><br>  | |||
__FORCETOC__  | |||
[[カテゴリ:C_Sharp]]  | |||
2021年11月24日 (水) 18:07時点における最新版
概要
C#でSQL Serverに対してSELECT文を実行する時のサンプルコードを記載する。
ここでは、下記の2種類を例として取り上げる。
- SELECT文の実行結果をDataTableを用いてまとめて読み込む方法
 - 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;
 }