はじめに
データベースに接続する Windows アプリを仕事で作っています。とはいえ作成済のプログラムを修正しているだけで、新規作成することがありません。データベースに接続するプログラムの作り方を確認しておきたいと思いました。
以下の環境で開発および動作を確認します。
- Windows 11
- Visual Studio 2022
- .NET Framework 4.5.2 および .NET 8.0
Microsoft SQL Server に接続する
Microsoft SQL Server に接続する .NET アプリを作成してみます。
Microsoft SQL Server を用意する
データベースサーバを導入するマシンを用意します。
Microsoft SQL Server は Windows および Linux で動作する製品があります。
通常はサーバ機+Windows Server を使いますが、クライアント用パソコン+Windows 11 でも動作します。
Microsoft SQL Server を導入します。今回は無償版を使います。
SQL Server Express(無料版)を導入する #SQLServer - Qiita
自分は「インスタンスの構成」で「名前つきインスタンス」でなく「規定のインスタンス」を選択します。
「認証モード」は「混合モード」を選択して「システム管理者(sa)アカウントのパスワード」を指定しておきます。
加えて、管理ツールである SQL Server Management Studio を導入します。
SQL Server Management Studioのインストールと簡単な使い方 | IT職種コラム
さらに、サンプルデータを導入しておきましょう。
SQL Server:サンプルデータベース「Northwind」を作成する方法 | SE Life Log
データベースサーバを動作するコンピュータと、それに接続するアプリを動作するコンピュータは、通常は別々です。
SQL Server をインストールした直後は、別のコンピュータから接続できるようになっていません。設定を変更します。
SQL Serverに外部から接続する備忘録 - 沙羅.com
.NET Framework+System.Data.SqlClient で接続する
まず、.NET Framework アプリを作って SQL Server に接続してみます。
参考:C#でDBに接続する方法(SQL Server) #SQLServer - Qiita
Visual Studio で「新しいプロジェクトの作成」して「コンソールアプリ (.NET Framework)」を選択します。
フレームワークは .NET Framework 4.5.2
を選択します。
以下のコードを実行してみます。
using System.Data.SqlClient;
string conStr = "Data Source=127.0.0.1; User ID=sa; Password=......; Initial Catalog=Northwind;";
try
{
using (SqlConnection cn = new SqlConnection())
{
cn.ConnectionString = conStr;
cn.Open();
Console.WriteLine("Connected.");
}
}
catch (Exception ex) {
Console.WriteLine("Error: " + ex.Message);
}
Console.ReadKey();
ConnectionString
にセットする文字列は、接続したいデータベースに合わせて記述します。
接続文字列とは?~書き方を解説(ADOでデータベース接続) | 工場エンジニアのAccessスキル
Data Source
は、事前に準備した SQL Server を指定します。
User ID
および Password
に、予め指定したアカウントとパスワードを指定します。今回は管理者 sa
を使っています。
Initial Catalog
は、接続して操作するデータ領域です。
ここで使用している System.Data.SqlClient
は、.NET Framework に用意されている SQL Server に接続するためのライブラリです。System.Data
のバージョン 4.0.0 でした。
.NET+System.Data.SqlClient で接続する
続いて、.NET アプリを作って SQL Server に接続してみます。
Visual Studio で「新しいプロジェクトの作成」して「コンソールアプリ」を選択します。
フレームワークは .NET 8.0
を選択します。
上記と同じコードを実行してみます。
するとビルドに失敗しました。
System.Data.SqlClient
は .NET
に用意されていないのです。
Visual Studio の「Nuget パッケージの管理」を開いて Data.System.SqlClient
をインストールします。バージョン 4.8.6 でした。
上記と同じコードを実行してみます。
.NET Framework+Microsoft.Data.SqlClient で接続する
System.Data.SqlClient
は以前から使えるライブラリですが、2019 年から新たに Microsoft.Data.SqlClient
が用意されていました。
Visual Studio で「新しいプロジェクトの作成」して「コンソールアプリ (.NET Framework)」を選択します。
フレームワークは .NET Framework 4.6.2
を選択します。4.5.2 では Microsoft.Data.SqlClient
をインストールできませんでした。
Visual Studio の「Nuget パッケージの管理」を開いて Microsoft.Data.SqlClient
をインストールします。バージョン 5.2.2 でした。
以下のコードを実行してみます。
using Microsoft.Data.SqlClient;
string conStr = "Data Source=127.0.0.1; User ID=sa; Password=......; Initial Catalog=Northwind;";
try
{
using (SqlConnection cn = new SqlConnection())
{
cn.ConnectionString = conStr;
cn.Open();
以下略
実行時にエラー発生しました。
Error: サーバーとの接続を正常に確立しましたが、ログイン中にエラーが発生しました。 (provider: SSL プロバイダー, error: 0 - 信頼されていない機関によって証明書チェーンが発行されました。)
System.Data.SqlClient
と違って Microsoft.Data.SqlClient
は暗号化オプションが有効になっているようです。
参考:Microsoft.Data.SqlClient 4.0 以降で SQL Server に接続する際の暗号化オプション at SE の雑記
接続文字列に Encrypt=false
を加えます。
string conStr = "Data Source=127.0.0.1; User ID=sa; Password=......; Encrypt=false; Initial Catalog=Northwind;";
参考:SQLサーバーへのアクセスで証明書のエラーが出る場合の対処法(信頼されていない機関によって証明書チェーンが発行されましたというエラー)
.NET+Microsoft.Data.SqlClient で接続する
Visual Studio で「新しいプロジェクトの作成」して「コンソールアプリ」を選択します。
フレームワークは .NET 8.0
を選択します。
Visual Studio の「Nuget パッケージの管理」を開いて Microsoft.Data.SqlClient
をインストールします。
上記と同じコードを実行してみます。
MySQL データベースに接続する
続いて、MySQL データベースに接続する .NET アプリを作成してみます。
MySQL データベースを用意する
データベースサーバを導入するマシンを用意します。
MySQL データベースは Windows 、Linux 、Solaris 、macOS で動作する製品があります。
通常はサーバ機+サーバ OS を使いますが、クライアント用パソコン+Windows 11 でも動作します。
MySQL データベースを導入します。今回は無償版を使います。
WindowsにMySQLをインストールする #環境構築 - Qiita
「システム管理者(root)アカウントのパスワード」を指定しておきます。
加えて、管理ツールである MySQL Workbench を導入します。
MySQL Workbenchのインストールとサーバー接続・DB管理
さらに、サンプルデータを導入しておきましょう。
MySQLのサンプルデータベース一覧 #MySQL - Qiita
データベースサーバを動作するコンピュータと、それに接続するアプリを動作するコンピュータは、通常は別々です。
MySQL データベースをインストールした直後は、別のコンピュータから接続できるようになっていません。設定を変更します。
MySQLを外部パソコンから接続する方法 | 合同会社ウェブライト
.NET Framework+MySql.Data.MySqlClient で接続する
まず、.NET Framework アプリを作って MySQL データベースに接続してみます。
参考:.NET アプリケーションから MySQL へ接続する方法 - Microsoft.NET - Project Group
Visual Studio で「新しいプロジェクトの作成」して「コンソールアプリ (.NET Framework)」を選択します。
フレームワークは .NET Framework 4.5.2
を選択します。
System.Data.SqlClient
と違って、MySQL データベースに接続するライブラリは、.NET Framework に含まれていません。
そこで、MySQL のウェブサイトから接続用ライブラリを入手します。MySQL Connector/NET
です。
その上で、プロジェクトの「参照」に MySql.Data
を追加します。
以下のコードを実行してみます。
using MySql.Data.MySqlClient;
string conStr = "Server=127.0.0.1; Uid=root; Pwd=......; Database=sakila;";
try
{
using (MySqlConnection cn = new MySqlConnection())
{
cn.ConnectionString = conStr;
cn.Open();
Console.WriteLine("Connected.");
}
}
catch (Exception ex) {
Console.WriteLine("Error: " + ex.Message);
}
Console.ReadKey();
ConnectionString
にセットする文字列は、接続したいデータベースに合わせて記述します。
参考:【C#】MySQLに接続して直接SQLを実行する | hiranote
Server
は、事前に準備した MySQL データベースを指定します。
Uid
および Pwd
に、予め指定したアカウントとパスワードを指定します。今回は管理者 root
を使っています。
Database
は、接続して操作するデータ領域です。
.NET+MySql.Data.MySqlClient で接続する
続いて、.NET アプリを作って MySQL データベースに接続してみます。
Visual Studio で「新しいプロジェクトの作成」して「コンソールアプリ」を選択します。
フレームワークは .NET 8.0
を選択します。
上記と同様に MySQL Connector/NET
の MySql.Data
を参照に追加します。
上記と同じコードを実行してみます。
すると実行時にエラー発生しました。
ウェブサイトから入手した MySQL Connector/NET
は、.NET Framework 用のようです。
上記で参照に追加した MySql.Data
を削除します。
Visual Studio の「Nuget パッケージの管理」を開いて Data.System.SqlClient
をインストールします。
上記と同じコードを実行してみます。
Oracle データベースに接続する
続いて、Oracle データベースに接続する .NET アプリを作成してみます。
Oracle データベースを用意する
データベースサーバを導入するマシンを用意します。
Oracle データベースは Windows 、Linux 、Solaris 、HP-UX 、IBM AIX で動作する製品があります。
通常はサーバ機+サーバ OS を使いますが、クライアント用パソコン+Windows 11 でも動作します。
Oracle データベースを導入します。今回は無償版を使います。
Oracle Database XE (21c) をWindows PCで使ってみた | O-Labo
加えて、管理ツールである Oracle SQL Developer を導入します。
Oracle SQL Developerのインストール #oracle - Qiita
導入できたデータベースエンジンに対してデータベース領域を作成します。XE 21c
のインストーラはデータベース XEPDB1
を作成してくれるので、これを使うので構いません。
データベースに接続するユーザを管理者と別に用意しておきます。よく使われる scott/tiger
を登録しておくといいでしょう。
【Oracleデータベース】Windowsでインストールからテーブル作成まで #oracle - Qiita
さらに、サンプルデータを導入しておきましょう。
Oracle Database 21c XEでサンプルスキーマを作成したい #oracle - Qiita
データベースサーバを動作するコンピュータと、それに接続するアプリを動作するコンピュータは、通常は別々です。
Oracle データベースをインストールした直後は、別のコンピュータから接続できるようになっていません。設定を変更します。
Database/Oracle/tips/外部からの接続を許可したい - 豚吐露@wiki
Oracle 外部からDBに接続できない件 | 技術的なこと、あれこれ
.NET Framework+System.Data.OracleClient で接続する
まず、.NET Framework アプリを作って Oracle データベースに接続してみます。
参考:【C#】データベースに接続しよう!Oracle編 | SEシステム開発屋の戯言/ヨッシーブログ
Visual Studio で「新しいプロジェクトの作成」して「コンソールアプリ (.NET Framework)」を選択します。
フレームワークは .NET Framework 4.5.2
を選択します。
プロジェクトの「参照」に System.Data.OracleClient
を追加します。
以下のコードを実行してみます。
using System.Data.OracleClient;
string conStr = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XEPDB1)));User id=scott;Password=tiger;";
try
{
using (OracleConnection cn = new OracleConnection())
{
cn.ConnectionString = conStr;
cn.Open();
Console.WriteLine("Connected.");
}
}
catch (Exception ex) {
Console.WriteLine("Error: " + ex.Message);
}
Console.ReadKey();
ConnectionString
にセットする文字列は、接続したいデータベースに合わせて記述します。
ODP.NET の接続文字列 - tsucchi’s diary
Data Source
は、事前に準備した Oracle データベースを指定します。
User ID
および Password
に、予め用意したアカウントとパスワードを指定します。
ここで使用している System.Data.OracleClient
は、.NET Framework に用意されている SQL Server に接続するためのライブラリです。System.Data.OracleClient
のバージョン 4.0.0 でした。
.NET+System.Data.OracleClient で接続する
続いて、.NET アプリを作って Oracle データベースに接続してみます。
Visual Studio で「新しいプロジェクトの作成」して「コンソールアプリ」を選択します。
フレームワークは .NET 8.0
を選択します。
.NET Framework と違って、プロジェクトの「参照」に System.Data.OracleClient
を追加できません。
「Nuget パッケージの管理」を開いて Data.System.OracleClient
を探しますが、ありません。
.NET 8.0 では System.Data.OracleClient
を使って接続するのはだめなようです。
.NET Framework+Oracle.ManagedDataAccess.Client を使って接続する
System.Data.OracleClient
は .NET Framework に含まれるライブラリですが、.NET Framework 4.0 から非推奨になりました。
そこで、Oracle 社が提供している接続用ライブラリを使用します。
参考:Oracle Data Provider for .NET管理対象ドライバのインストール
Visual Studio で「新しいプロジェクトの作成」して「コンソールアプリ (.NET Framework)」を選択します。
フレームワークは .NET Framework 4.7.2
を選択します。4.5.2 では 後述のライブラリをインストールできませんでした。
Visual Studio の「Nuget パッケージの管理」を開いて Oracle.ManagedDataAccess
をインストールします。バージョン 23.6.0 でした。
以下のコードを実行してみます。
using Oracle.ManagedDataAccess.Client;
string conStr = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XEPDB1)));User Id=scott;Password=tiger;";
try
{
using (OracleConnection cn = new OracleConnection())
{
cn.ConnectionString = conStr;
cn.Open();
以下略
.NET+Oracle.ManagedDataAccess.Client を使って接続する
Visual Studio で「新しいプロジェクトの作成」して「コンソールアプリ」を選択します。
フレームワークは .NET 8.0
を選択します。
Visual Studio の「Nuget パッケージの管理」を開いて Oracle.ManagedDataAccess
をインストールします。
すると「プロジェクトのターゲットフレーム 'net8.0' ではなく '.NETFramework(以下略)」と警告されます。
Oracle.ManagedDataAccess.Core
をインストールします。バージョン 23.6.0 でした。
参考:Oracle Data Provider for .NET Coreのインストール
上記と同じコードを実行してみます。