SQL Server LocaldB へ接続してSQLを実行する - C#

SQL Server LocaldB へ接続してSQLを実行するコードを紹介します。

事前準備

SQL Server LocalDBのインストール

SQL Server LocalDBをインストールします。インストール手順はこちらの記事を参照してください。

データベースとテーブルの作成

LocalDBのデータベースとテーブルを作成します。データベースとテーブルの作成手順はこちらの記事を参照してください。

接続文字列の確認

LocalDB に接続するための接続文字列を確認します。
[サーバー エクスプローラー]の[データ接続]ノードから接続したいLocalDBの項目をクリックして選択します。 右クリックしてポップアップメニューを表示します。メニューの[プロパティ]をクリックします。


ウィンドウ右下のプロパティウィンドウにLocalDBのプロパティが表示されます。


プロパティの項目を下にスクロールすると、[接続文字列]の項目があります。 この欄にLocalDBへの接続文字列が表示されています。


接続文字列の値をコピーします。

プログラム

Windows FormアプリケーションでLocalDBにアクセスするプログラムを実装します。
Windows Formアプリケーションを作成します。

UI

下図のUIを作成します。フォームにButtonを1つTextBoxを一つ配置します。

コード

下記コードを記述します。button1 のクリックイベントを実装しています。
SqlConnectionやSqlCommandはMicrosoft.Data.SqlClient パッケージのものを利用しています。 Microsoft.Data.SqlClient パッケージのインポートをする必要があります。 詳細な手順はこちらの記事を参照してください。

using Microsoft.Data.SqlClient;

namespace SimpleLocalDB2022
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    private void button1_Click(object sender, EventArgs e)
    {
      string constr = @"(SQL Server LocalDBの接続文字列)";
      SqlConnection con = new SqlConnection(constr);
      con.Open();
      try {
        string sqlstr = "select * from products";
        SqlCommand com = new SqlCommand(sqlstr, con);
        SqlDataReader sdr = com.ExecuteReader();

        while (sdr.Read() == true) {
          int id = (int)sdr["id"];
          string name = ((string)sdr["name"]).Trim();
          string category = ((string)sdr["category"]).Trim();
          int price = (int)sdr["price"];
          textBox1.Text += string.Format("{0:d} : {1} - {2} - {3:d} \r\n", id, name, category, price);
        }
        com.Dispose();
      }
      finally {
        con.Close();
      }
    }
  }
}

解説

SqlConnectionオブジェクトを作成します。SqlConnectionのコンストラクタの引数には接続文字列を与えます。
  string constr = @"(SQL Server LocalDBの接続文字列)";
  SqlConnection con = new SqlConnection(constr);
  con.Open();

接続文字列は今回のデモでは、以下の文字列を利用しています。
Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=""C:\Storage\Develop Repository\iPentecDemo\SQLServerLocalDB\SimpleLocalDB2022\MyDatabase.mdf"";Integrated Security=True

SQL文を準備し、SqlCommandオブジェクトを作成し、SQL文を実行します。結果を受け取る SqlDataReader を取得します。
    string sqlstr = "select * from products";
    SqlCommand com = new SqlCommand(sqlstr, con);
    SqlDataReader sdr = com.ExecuteReader();

SqlDataReaderからレコードの値を読み出し、テキストボックスに表示します。
    while (sdr.Read() == true) {
      int id = (int)sdr["id"];
      string name = ((string)sdr["name"]).Trim();
      string category = ((string)sdr["category"]).Trim();
      int price = (int)sdr["price"];
      textBox1.Text += string.Format("{0:d} : {1} - {2} - {3:d} \r\n", id, name, category, price);
    }

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[button1]をクリックします。データベースに接続し、レコードを取得してテキストボックスに表示されます。

単一の値を受け取る場合

単一の値を受けると場合は、ExecuteScalar メソッドを利用します。
SqlCommandオブジェクトのExecuteScalarメソッドを呼び出すと、単一の値を取得できます。
下記のコードではレコード数を求めるSQL文を実行します。
using Microsoft.Data.SqlClient;

namespace SimpleLocalDB2022
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    private void button2_Click(object sender, EventArgs e)
    {
      string constr = @"(SQL Server LocalDBの接続文字列)";

      SqlConnection con = new SqlConnection(constr);
      con.Open();
      try {
        string sqlstr = "select count(*) from products where price>100";
        SqlCommand com = new SqlCommand(sqlstr, con);
        int RCount = (int)com.ExecuteScalar();
        textBox1.Text += string.Format("{0:d} レコード \r\n", RCount);
        com.Dispose();
      }
      finally {
        con.Close();
      }
    }
  }
}

実行結果は下図です。

値や結果を受け取らない場合

値や結果を受けるらない場合は、ExecuteNonQueryメソッドを利用します。
SqlCommandオブジェクトのExecuteNonQueryメソッドを呼び出すと、結果を受け取らないSQLの実行ができます。
using Microsoft.Data.SqlClient;

namespace SimpleLocalDB2022
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    private void button3_Click(object sender, EventArgs e)
    {
      string constr = @"(SQL Server LocalDBの接続文字列)";

      SqlConnection con = new SqlConnection(constr);
      con.Open();
      try {
        string sqlstr = "update products set price=1000 where id=4";
        SqlCommand com = new SqlCommand(sqlstr, con);
        int lineCount = com.ExecuteNonQuery();

        textBox1.Text += string.Format("{0:d} 行を変更しました\r\n", lineCount);
      }
      finally {
        con.Close();

      }
    }
}
プロジェクトを実行し、[button3]をクリックします。実行結果は下図です。


レコードの値を確認すると、変更結果がテーブルに反映できていることが確認できます。




旧記事 : Visual Studio 2015 での手順

事前準備

SQL Server LocalDBのインストール

SQL Server LocalDBをインストールします。インストール手順はこちらの記事を参照してください。

データベースとテーブルの作成

LocalDBのデータベースとテーブルを作成します。データベースとテーブルの作成手順はこちらの記事を参照してください。

接続文字列の確認

LocalDB に接続するための接続文字列を確認します。
[サーバー エクスプローラー]の[データ接続]ノードから接続したいLocalDBをクリックして選択します。右クリックしてポップアップメニューを表示します。メニューの[プロパティ]をクリックします。


プロパティウィンドウにLocalDBのプロパティが表示されます。


プロパティの[接続文字列]の項目にこのLocalDBへの接続文字列が表示されています。接続文字列の値をコピーします。

プログラム

今回は、Windows フォームアプリケーションでの接続をします。

UI

下図のUIを作成します。フォームにButtonを1つTextBoxを一つ配置します。

コード

下記コードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace SimpleLocalDB
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      string constr = @"(SQL Server LocalDBの接続文字列)";

      SqlConnection con = new SqlConnection(constr);
      con.Open();
      try {
        string sqlstr = "select * from products";
        SqlCommand com = new SqlCommand(sqlstr, con);
        SqlDataReader sdr = com.ExecuteReader();

        while (sdr.Read() == true) {
          string name = (string)sdr["name"];
          int price = (int)sdr["price"];
          textBox1.Text += string.Format("{0:s}:{1:d} \r\n", name, price);

        }
      }
      finally {
      }
    }
  }
}

解説

接続文字列以外はSQL Serverへ接続するコードと違いはありません。SQL Serverへの接続とSQL文の実行に関してはこちらの記事を参照してください。

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[button1]をクリックします。下図の実行結果となります。テーブルに入力したレコードが読み出されテキストボックスに表示されています。


以上でLocalDBへの接続とSQL文の実行ができました。

結果を受け取らないSQLの場合

UI

下図のUIを作成します。

コード

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace SimpleLocalDB
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      /* 省略 */
    }

    private void button2_Click(object sender, EventArgs e)
    {
      string constr = @"(SQL Server LocalDBの接続文字列)";

      SqlConnection con = new SqlConnection(constr);
      con.Open();
      try {
        string sqlstr = "update products set price=60 where id=4";
        SqlCommand com = new SqlCommand(sqlstr, con);
        int lineCount = com.ExecuteNonQuery();

        textBox1.Text += string.Format("{0:d} 行を変更しました\r\n", lineCount);
      }
      finally {
        con.Close();
      }
    }
  }
}

実行結果

プロジェクトを実行します。ウィンドウ表示後[button1]をクリックします。レコードの一覧が表示されます。


[button2]をクリックします。UPDATEコマンドが実行され、変更を受けた行数がテキストボックスに表示されます。



単一の値を受け取るSQLの場合

UI


コード

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace SimpleLocalDB
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      /* 省略 */
    }

    private void button2_Click(object sender, EventArgs e)
    {
      /* 省略 */
    }

    private void button3_Click(object sender, EventArgs e)
    {
      string constr = @"(SQL Server LocalDBの接続文字列)";

      SqlConnection con = new SqlConnection(constr);
      con.Open();
      try {
        string sqlstr = "select count(*) from products where price>100";
        SqlCommand com = new SqlCommand(sqlstr, con);
        int RCount = (int)com.ExecuteScalar();
        textBox1.Text += string.Format("{0:d} レコード \r\n", RCount);

      }
      finally {
      }
    }
  }
}

実行結果

プロジェクトを実行し、ウィンドウの表示後[button3]をクリックします。条件に一致するレコードの数がテキストボックスに表示されます。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2022-11-22
改訂日: 2022-11-22
作成日: 2016-07-18
iPentec all rights reserverd.