【C#】SQL ServerにアクセスしてSQLを実行し、データを取得する

いつもよく検索して調べるので、めも。何回書いても覚えられぬ…orz

目次

1. app.configにSQLServer接続文字列を追加する

以下の接続情報をconfigに追加します。

Data Source=(SQL Server のホスト名またはIPアドレス);
Initial Catalog=(接続先データベース名);
Connect Timeout=60;
Persist Security Info=True;
User ID=(SQL Serverに接続するユーザーID);
Password=(ユーザーのパスワード)

例)App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="sqlsvr"
         connectionString="Data Source=localhost\SQLEXPRESS;Initial Catalog=TESTDB;Connect Timeout=60;Persist Security Info=True;User ID=tester;Password=1234"/>
  </connectionStrings>
</configuration>

※事前に、上記に設定したDBにテーブルを準備しておく。

SYAINNONAME
1000佐藤   
1001山田
1002鈴木

2. System.Configurationコンポーネントを追加する

「.NET」の「プロジェクト」>「参照の追加」より、「System.Configuration」を追加します。追加後、usingに記載してください。

3. SQL Serverにアクセスし、実行結果を取得する

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


        static void Main(string[]args)
        {
        // データベース接続文字の取得
        private static string ConnectionString = ConfigurationManager.ConnectionStrings["sqlsvr"].ConnectionString;

        // SQLテキスト
        private static readonly string GetSinarioData = @"SELECT * FROM t_sinario";

            try
            {
                // コネクション生成
                using (var connection = new SqlConnection(ConnectionString))
                {
                    // コネクションオープン
                    using (SqlCommand command = connection.CreateCommand())
                    {
                        // データベースの接続開始
                        connection.Open();
             
             // SQLの準備
                        command.CommandText = GetSinarioData;

                        // SQL実行
                        SqlDataReader reader = command.ExecuteReader();

                        while (reader.Read() == true)
                        {
                           string syainNo = reader["SYAINNO"].ToString();
                           string name = reader["NAME"].ToString();
                Console.WriteLine( "{0} {1}", syainNo , name );
                        }
                    }

                }
            }
            catch (SqlException e)
            {
                Console.WriteLine(e.ToString());
            }  
        }
    }
}

解説

SQLServerへの接続オブジェクト SqlConnection オブジェクトを作成します。
SqlConnection オブジェクトのOpen()メソッドを呼び出し、SQL Serverへの接続をします。

SqlCommandオブジェクトを作成し、CommandTextに実行するSQLを設定します。

SqlCommandオブジェクトのExecuteReader()メソッドを呼び出し、SQLを実行します。SqlDataReaderに取得結果を格納します。
SqlDataReader オブジェクトのRead()メソッドを呼び出し、結果レコードを取得します。
(falseになるまでレコードを取得する)
レコードの値は、SqlDataReader オブジェクトのインデクサーに列名を与えることで取得できます。

データベース接続後は、Close()メソッドでSqlDataReader、SqlConnectionを閉じ、Dispose()メソッドでSqlCommandを開放する必要があります。
ここではusingを使用しているので、usingを抜けることで閉じられます。
データベース接続の閉じ忘れるがなくなるのでおすすめです。

また、データベース接続時は、try catchでエラーハンドリングするのが通常です。

実行結果を取得しない場合(更新、削除など)

ExecuteNonQueryを使用します。戻り値は、SQLによって変更を受けた行数を返します。

// SQLの準備
  command.CommandText = @"UPDATE t_sinario SET NAME ='斎藤' WHERE id ='1000';

// SQL実行
  int cnt = command.ExecuteNonQuery();

単一の値を受け取る場合

ExecuteScalarを使用します。例では、string型の単一値を受け取っています。

// SQLの準備
  command.CommandText = @"SELECT NAME FROM t_sinario WHERE id ='1000';

// SQL実行
  string name = (string)command.ExecuteScalar();

今日はここまで。