C# で SQL Server に対して SELECT文 を実行する際のサンプルコードを作成しました。
ここでは「SELECT文 の 実行結果 を DataTable
へ投入する方法」と「SELECT文 の 実行結果 を 1行ずつ読み込んで処理していく方法」の2種類を例として取り上げます。
まとめて読み込む (DataTable)
DataTable
へ SELECT文 の 結果 を一括読み込みしてしまう方法です。
単純で理解しやすい方法かと思います。
DataSet
へ 結果投入してしまってもよいのですが、DataTable
を取り出すためにワンクッション必要となるため、個人的には DataTable
へ直接投入で良いかと思います。
まとめて DataTable
へ読み込む際は、 DataAdapter
を利用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | 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
を利用します。
Command
の ExecuteReader()
メソッドを実行することで DataReader
を取得し、1行ずつ読み込んで処理を行います。
少し実装は面倒ですが O/Rマッピング のようなことができます。
以下のサンプルコードにおける UserModel
は T_USER
に対応する独自のクラスになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | 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(); // 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; } </usermodel></usermodel> |
関連記事
C# を使って SQL Server に接続、操作する方法に関しては以下のような記事もあります。 あわせて参考に読んでいただけると理解が深まるハズ!
- SQL Server に 接続
- SQL Server に対して SELECT文 を 実行 ←この記事
- SQL Server に対して INSERT文 ・ UPDATE文 ・ DELETE文 を 実行
- SQL Server に対して パラメタライズドクエリ を 実行
最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!