0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

.NET アプリでデータベースに接続する

Last updated at Posted at 2024-10-20

はじめに

データベースに接続する 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/NETMySql.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のインストール

上記と同じコードを実行してみます。

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?