SqlConnectionを .NET 6 / .NET 7 / .NET Core 3 アプリケーションで利用する - C#

SqlConnectionを .NET 6, .NET 7, .NET Core 3 アプリケーションで利用する手順を紹介します。

概要

.NET 6, .NET 7, .NET Core 3 アプリケーションでSqlConnectionを利用する場合、using System.Data.SqlClient を記述しただけでは、SqlConnectionを利用できません。 この記事では、System.Data.SqlClientのパッケージをインポートして、SqlConnectionを利用できるようにする手順を紹介します。

現象の確認

.NET の Windows Formアプリケーションを作成します。

UI

下図のフォームを作成します。フォームにボタンを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();
    }
  }
}


ビルド結果

上記のプロジェクトをビルドします。ビルドするとエラーが発生します。


エラーメッセージは下記のメッセージです。
エラーメッセージ
エラーコード : CS1069
型名 'SqlConnection' は名前空間 'System.Data.SqlClient' に見つかりませんでした。この型はアセンブリ 'System.Data.SqlClient, Version=4.6.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' に転送されました。このアセンブリへの参照を追加することを検討してください。

原因

デフォルトで参照する System.Data.SqlClient アセンブリには、SqlConnectionが含まれていないことが原因です。

対処法1 : NuGetを利用して、Microsoft.Data.SqlClient パッケージを参照する

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アプリケーションを作成します。

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 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文を実行し、結果をテキストボックスに表示します。


対処法2: NuGetを利用して、System.Data.SqlClient パッケージを参照する

SqlConnectionが含まれている System.Data.SqlClient アセンブリを参照追加します。

[ツール]メニューの[NuGet パッケージ マネージャー] のサブメニューの [NuGet パッケージの管理]の項目をクリックします。


[ソリューションのパッケージの管理]画面が表示されます。


画面上部の検索ボックスに "SqlClient" を入力して検索します。検索結果に "System.Data.SqlClient" の v4.8.1 が表示されます。こちらをクリックして選択します。


項目を選択すると右側にソリューション内のプロジェクトの一覧が表示されます。


右側のエリアでパッケージを参照するプロジェクトにチェックをつけます。チェック後プロジェクトのリストの下にある[インストール]ボタンをクリックします。


[変更のプレビュー]ダイアログが表示されます。ダイアログ右下の[OK]ボタンをクリックして続行します。


[ライセンスへの同意]ダイアログが表示されます。ダイアログ右下の[同意する]ボタンをクリックします。


パッケージがインストールされます。パッケージのインストール後にビルドを実行すると、エラーは発生せずにビルドが完了できます。

対処法3 : プロジェクトファイルを編集してバージョンを指定して参照を追加する

ソリューションエクスプローラで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>

編集後のプロジェクトファイル例 (.NET 5.0 の場合)
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
	<PackageReference Include="System.Data.SqlClient" Version="4.8.2" />
  </ItemGroup>

</Project>

編集後のプロジェクトファイル (.NET Core 3.1 の場合)
<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アプリケーションを作成します。

UI

下図のフォームを作成します。ボタンと複数行のテキストボックスを配置します。

コード

フォームのボタンの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]ボタンをクリックします。


テキストボックスにデータベースのレコードが表示されます。


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2020-07-29
iPentec all rights reserverd.