SQL Server LocaldB へ接続してSQLを実行する
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を愛用
掲載日: 2016-07-18
改訂日: 2022-11-22