SqlConnectionを .NET 6, .NET 7, .NET Core 3 アプリケーションで利用する手順を紹介します。
#TOC(caption="目次")
using System.Data.SqlClient
を記述しただけでは、SqlConnectionを利用できません。
この記事では、System.Data.SqlClientのパッケージをインポートして、SqlConnectionを利用できるようにする手順を紹介します。
.NET の Windows Formアプリケーションを作成します。
下図のフォームを作成します。フォームにボタンを1つ配置します。
下記のコードを記述します。
ボタンのClickイベントでSqlConnectionのインスタンスを作成するコードを記述します。
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 DotNetCoreWindowsFormApp
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
SqlConnection connection = new SqlConnection();
}
}
}
上記のプロジェクトをビルドします。ビルドするとエラーが発生します。
エラーメッセージは下記のメッセージです。
System.Data.SqlClient
アセンブリには、SqlConnectionが含まれていないことが原因です。NuGetでMicrosoft.Data.SqlClient パッケージをインストールして利用する対処法があります。
VIsual Studio でソリューションを開き、[ツール]メニューの[NuGet パッケージ マネージャー]サブメニューの[ソリューションの NuGet パッケージの管理]の
項目をクリックします。
下図のパッケージの管理画面が表示されます。
上部の[参照]のタブをクリックして選択し、タブ下のテキストボックスに "Microsoft.Data.SqlClient"を入力して検索します。
検索結果の Microsoft.Data.SqlClient パッケージの項目をクリックして選択します。
右側のエリアにソリューションのプロジェクトの一覧が表示されますので、Microsoft.Data.SqlClientパッケージをインストールするプロジェクトの左側のチェックボックスを
クリックしてチェックをつけます。チェック後右側エリアの下部の[インストール]ボタンをクリックします。
[変更のプレビュー]ダイアログが表示されます。[OK]ボタンをクリックして続行します。その後[ライセンスへの同意]ダイアログも表示されますので、
[I Accept]ボタンをクリックし、続行します。
パッケージがインストールされます。
ソリューションエクスプローラーでインストールしたプロジェクトのノードを開き、[依存関係]ノードの[パッケージ]ノードを開きます。
Microsoft.Data.SqlClient の項目が追加されていることが確認できます。
SqlConnectionを利用しているコードファイルの先頭に using Microsoft.Data.SqlClient
を追加するとビルドが通るようになります。
.NETのWindows Formアプリケーションを作成します。
下図のフォームを作成します。ボタンと複数行のテキストボックスを配置します。
以下のコードを記述します。
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 Microsoft.Data.SqlClient;
namespace DotNetCoreWIndowsFormAppMsSqlClient
{
public partial class FormExecSql : Form
{
public FormExecSql()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string constr = @"Data Source=192.168.0.nn;Initial Catalog=(接続するデータベース);Connect Timeout=60;Persist Security Info=True;User ID=(データベースのユーザー);Password=(パスワード);Encrypt=False";
SqlConnection connection = new SqlConnection(constr);
connection.Open();
try {
string sqlstr = "select * from ProductsB";
SqlCommand com = new SqlCommand(sqlstr, connection);
SqlDataReader sdr = com.ExecuteReader();
while (sdr.Read() == true) {
string model = ((string)sdr["model"]).Trim();
string name = ((string)sdr["name"]).Trim();
string category = ((string)sdr["category"]).Trim();
decimal price = (decimal)sdr["price"];
textBox1.Text += string.Format("{0} / {1} / {2} : {3:g} \r\n", model, name, category, price);
}
}
finally {
connection.Close();
}
}
}
}
Microsoft.Data.SqlClient を利用する場合でも System.Data.SqlClient を利用するコードと同様のコードで記述できます。
SqlConnection, SqlCommand, SqlDataReader の動作についてはこちらの記事を参照してください。
プロジェクトを実行します。下図のウィンドウが表示されます。
[button1]をクリックします。SQL文を実行し、結果をテキストボックスに表示します。
System.Data.SqlClient
アセンブリを参照追加します。
[ツール]メニューの[NuGet パッケージ マネージャー] のサブメニューの [NuGet パッケージの管理]の項目をクリックします。
[ソリューションのパッケージの管理]画面が表示されます。
画面上部の検索ボックスに "SqlClient" を入力して検索します。検索結果に "System.Data.SqlClient" の v4.8.1 が表示されます。こちらをクリックして選択します。
項目を選択すると右側にソリューション内のプロジェクトの一覧が表示されます。
右側のエリアでパッケージを参照するプロジェクトにチェックをつけます。チェック後プロジェクトのリストの下にある[インストール]ボタンをクリックします。
[変更のプレビュー]ダイアログが表示されます。ダイアログ右下の[OK]ボタンをクリックして続行します。
[ライセンスへの同意]ダイアログが表示されます。ダイアログ右下の[同意する]ボタンをクリックします。
パッケージがインストールされます。パッケージのインストール後にビルドを実行すると、エラーは発生せずにビルドが完了できます。
ソリューションエクスプローラでSqlConnectionを利用したいプロジェクトのノードをクリックして選択し、右クリックします。
ポップアップメニューが表示されますので、[プロジェクトファイルの編集]の項目をクリックします。
プロジェクトファイルの編集画面が表示されます。
プロジェクトファイルのProjectタグ内に下記のXMLを追記します。
<ItemGroup>
<PackageReference Include="System.Data.SqlClient" Version="4.8.2" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="System.Data.SqlClient" Version="4.6.0" />
</ItemGroup>
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="System.Data.SqlClient" Version="4.8.2" />
</ItemGroup>
</Project>
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="System.Data.SqlClient" Version="4.8.2" />
</ItemGroup>
</Project>
プロジェクトファイルを保存し、ビルドを再実行するとエラーが発生せずにビルドができます。
.NET Core の Windows Formアプリケーションを作成します。
下図のフォームを作成します。ボタンと複数行のテキストボックスを配置します。
フォームのボタンのClickイベントを実装します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace DotNetCoreWindowsFormApp
{
public partial class FormExecSql : Form
{
public FormExecSql()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string constr = @"Data Source=(データベースサーバのホスト名 または IPアドレス);Initial Catalog=(接続先データベース名);Connect Timeout=60;Persist Security Info=True;User ID=(データベースへのログインID);Password=(データベースへのログインパスワード)";
using (SqlConnection con = new SqlConnection(constr)) {
SqlCommand com = new SqlCommand("select * from ProductsB", con);
con.Open();
SqlDataReader sdr = com.ExecuteReader();
while (sdr.Read() == true) {
textBox1.Text += string.Format("{0:d} {1} {2} {3}\r\n",
(int)sdr["id"], ((string)sdr["model"]).Trim(), ((string)sdr["name"]).Trim(), ((string)sdr["class"]).Trim());
}
sdr.Close();
con.Close();
}
}
}
}
データベースのテーブルのレコードは下図の通りです。
SqlConnection, SqlComand を利用してSQL文を実行し、データベースからレコードを取得します。
詳しくはこちらの記事を参照してください。
プロジェクトを実行します。下図のウィンドウが表示されます。[button1]ボタンをクリックします。
テキストボックスにデータベースのレコードが表示されます。