C# SQLServer 接続 データ取得

今回は、C#からSQLServerへ接続しデータを取得する方法を紹介していきます。
C#から、SQLServerに接続する人は是非参考にしてみてください。

接続文字列の作成

まずは、VisualStudioの設定ファイルに接続文字列を指定しましょう。

「プロジェクトを右クリック」→「プロパティ」

→「設定」→下のような画面が表示されます。

そして接続文字列を設定していきます。
「名前:sqlServer」
「種類:(接続文字列)」
「スコープ:アプリケーション」
「値:...のボタンを押下」

最後に値を入れるのですが、「...」をクリックしてください。データソースの選択画面が表示されるので、「Microsoft SQL Server」を選択しましょう。

「続行」をクリック
※この時、インストールが足りていないと、Visual Studio のインストーラが起動されますので、そのままインストールを選択してください。
「接続のプロパティ」が表示されると思うので、下記画像の4つの項目を設定していきます。

まずは「サーバー名」と「認証」を設定していきます。
SSMS(SqlServerManagementStudio)の「サーバへの接続」のサーバー名と認証を、そのまま入力しましょう。
まだSQLSERVERをインストールしていない方は、先にインストールしておきましょう。

サーバー名を入力します。今回はWindows認証で行うので認証はこのままでいきます。
認証もSSMSでサーバー接続する時の設定に合わせておきましょう。(各環境によって違うので注意してください。)
そして、対象のDBを選択してください。テスト接続でOKが出たら、「OK」をクリックしましょう。

これで、接続文字列の設定は、完了です。

SQLServerのデータ取得方法

それでは、ここからは、実際にSQLServerのデータを取得する書き方を載せていきます。

今回は、あらかじめテーブル(hironimoTable)を用意しており、5件のデータを登録しています。

SELECT * FROM hironimoTable
id   |nickName|animal|height|weight|insDt                  |updDt
-----+--------+------+------+------+-----------------------+-----------------------
00001|ひろにも|きりん|150   |55.5  |2020-03-02 00:00:00.000|2020-03-02 00:00:00.000
00002|ひろにも|きりん|160   |60.0  |2020-03-02 00:00:00.000|2020-03-02 00:00:00.000
00003|ひろにも|きりん|170   |70.0  |2020-03-02 00:00:00.000|2020-03-02 00:00:00.000
00004|ひろにも|きりん|180   |80.0  |2020-03-02 00:00:00.000|2020-03-02 00:00:00.000
00005|ひろにも|きりん|150   |90.0  |2020-03-02 00:00:00.000|2020-03-02 00:00:00.000

 

SQLServer接続

SQLServerに接続するには、SqlConnectionを利用しましょう。

SqlConnection 変数名= new SqlConnection(接続文字列);
変数名.Open();

ここで先ほど作成した、「接続文字列」を使います。具体的な例を記載します。

SqlConnection sqlconn = new SqlConnection(Properties.Settings.Default.sqlServer);
sqlconn.Open();

解説
1行目:SqlConnectionの変数を宣言しています。接続文字列には、設定ファイルの値を設定しています。
(「設定ファイルの設定方法:Properties.Settings.Default.名前」便利なので覚えておきましょう。)
2行目:1行目は、SqlConnectionの変数を設定しただけなので、Openメソッドで接続を開始します。

SQLの実行 データ取得

Sqlを実行するには、SqlCommand利用し、データを取得する方法は2種類あります。
「SqlDataReader」を利用して、取得する方法と、「SqlDataAdapter」を利用してDataTableに格納する方法です。

SqlCommand 変数= new SqlCommand(SQL文, SqlConnection, SqlTransaction);

SqlTransactionは、主にデータを更新するときなどに使います。今回は、データの取得のみなので使用しません。
使用しない場合は、省略することができます。

1SqlDataReaderを利用する方法

まずは、SqlDataReaderを利用した例を見てみましょう。

StringBuilder sql = new StringBuilder();
sql.AppendLine("SELECT");
sql.AppendLine("  *");
sql.AppendLine("FROM hironimoTable");

SqlCommand command = new SqlCommand(sql.ToString(), sqlconn);
SqlDataReader dr = command.ExecuteReader();

while (dr.Read())
{
    for(int i = 0; i < dr.FieldCount; i++)
    {
        Console.Write(dr[i] + " ");
    }
    Console.WriteLine();
}

SqlDataReaderは、インデックスの指定か、項目名を指定することで取得することができます。

while (dr.Read())
{
    Console.Write(dr["id"] + " ");
    Console.Write(dr["nickName"].ToString() + " ");
    Console.Write(dr["animal"].ToString() + " ");
    Console.Write(dr["height"].ToString() + " ");
    Console.Write(dr["weight"].ToString() + " ");
    Console.Write(dr["insDt"].ToString() + " ");
    Console.Write(dr["updDt"].ToString() + " ");
    Console.WriteLine();
}

 

2SqlDataAdapterを利用する方法

SqlDataAdapterを利用することで、DataTableに格納することができます。

StringBuilder sql = new StringBuilder();
sql.AppendLine("SELECT");
sql.AppendLine("  *");
sql.AppendLine("FROM hironimoTable");

SqlCommand command = new SqlCommand(sql.ToString(), sqlconn);
SqlDataAdapter adapter = new SqlDataAdapter(command);

DataTable dt = new DataTable();
adapter.Fill(dt);

//実行結果
for (int rowindex = 0; rowindex < dt.Rows.Count; rowindex++)
{
    for (int colindex = 0; colindex < dt.Columns.Count; colindex++)
    {
        Console.Write(dt.Rows[rowindex][colindex].ToString() + " ");
    }
    Console.WriteLine();
}

「SqlDataReader」も「SqlDataAdapter」結果は同じになります。
SqlDataReaderのほうが処理が早いですが、DataTableに格納すると便利な時もありますので、どちらのやり方も抑えておくといいと思います。

サンプルソース

サンプルソースを載せておきます。SqlDataAdapterのサンプルを載せています。

try
{
    //SQLServerの接続開始
    SqlConnection sqlconn = new SqlConnection(Properties.Settings.Default.sqlServer);
    sqlconn.Open();
    try
    {
        //SQL作成
        StringBuilder sql = new StringBuilder();
        sql.AppendLine("SELECT");
        sql.AppendLine("  *");
        sql.AppendLine("FROM hironimoTable");

        //SQL実行
        SqlCommand command = new SqlCommand(sql.ToString(), sqlconn);
        SqlDataAdapter adapter = new SqlDataAdapter(command);
        DataTable dt = new DataTable();
        adapter.Fill(dt);

        //実行結果
        for (int rowindex= 0;rowindex < dt.Rows.Count; rowindex++)
        {
            for (int colindex = 0; colindex < dt.Columns.Count; colindex++)
            {
                Console.Write(dt.Rows[rowindex][colindex].ToString() + " ");
            }
            Console.WriteLine();
        }

    }
    catch
    {
        throw;
    }
}
catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
}

 

結果

00001 ひろにも きりん 150 55.5 2020/03/02 0:00:00 2020/03/02 0:00:00
00002 ひろにも きりん 160 60.0 2020/03/02 0:00:00 2020/03/02 0:00:00
00003 ひろにも きりん 170 70.0 2020/03/02 0:00:00 2020/03/02 0:00:00
00004 ひろにも きりん 180 80.0 2020/03/02 0:00:00 2020/03/02 0:00:00
00005 ひろにも きりん 150 90.0 2020/03/02 0:00:00 2020/03/02 0:00:00

 

まとめ

今回は、SQLServerへの接続方法とSQLServerの値を取得する方法を紹介しました。
下記3つのポイントをしっかりと覚えておきましょう。

ポイント
  • 接続文字列の作成方法
  • SqlConnectionを利用した接続
  • SqlDataReaderもしくはSqlDataAdapterを利用したデータの取得

このやり方はかなり実践でも使えるので、おすすめです!

今回は以上です!お疲れさまでした。

 

C#の記事一覧

おすすめの記事