C# SQL Server on Ubuntu20.04 に接続する方法 VS Code No.104

自己投資としてチャレンジしている内容を Blog で公開しています。

今回は C# で .NET Data Provider for SQL Server (SqlClient) を使い SQL Server に接続し Select 文を実行する方法について紹介します。

▼1. C# で SQL Server on Ubuntu へ接続

本 blog では SQL Server への接続や処理に関して Python や Java でのコーディングについて、以下のリストのように紹介していました。今回は C# で試してみます。

(2022/12 時点)


▼2. 事前準備

2-1. Ubuntu 20.04.2 LTS の利用

https://releases.ubuntu.com/20.04/

2-2. Visual Studio Code のインストール

https://code.visualstudio.com/docs/setup/linux

sudo snap install --classic code

2-3. C# extension のインストール

Ctrl+P のキーを押し、ext install ms-dotnettools.csharp を入力し Enter キーを押すとインストールが開始され、完了後以下のような表示となります。Ref:C# – Visual Studio Marketplace

C#extension

2-4. Microsoft package signing key を trusted key のリストへ追加し、併せてパッケージのリポジトリの追加

今回 Ubuntu 22.04 を使っているので、ドキュメントに従い .NET のインストールを進めます。
Install .NET on Ubuntu – .NET | Microsoft Docs

最初に Microsoft package signing key を trusted key のリストへ追加し、併せてパッケージのリポジトリの追加を行うコマンドを実行 (Ubuntu 20.04)

wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb

2-5. .NET SDK をインストール (Ubuntu 20.04)

sudo apt-get update &&  sudo apt-get install -y dotnet-sdk-6.0

(** Note) 手元で検証した際以下のエラーがでました。エラーの通り “apt –fix-broken install” を実行し、再度 .net SDK 6.0 をインストールします。

xxx
W: Target CNF (main/cnf/Commands-amd64) is configured multiple times in /etc/apt/sources.list.d/microsoft-prod.list:1 and /etc/apt/sources.list.d/mssql-release.list:1
W: Target CNF (main/cnf/Commands-all) is configured multiple times in /etc/apt/sources.list.d/microsoft-prod.list:1 and /etc/apt/sources.list.d/mssql-release.list:1
Reading package lists... Done
Building dependency tree       
Reading state information... Done
You might want to run 'apt --fix-broken install' to correct these.
The following packages have unmet dependencies:
 dotnet-sdk-6.0 : Depends: dotnet-targeting-pack-6.0 (>= 6.0.12) but it is not going to be installed
                  Depends: netstandard-targeting-pack-2.1 (>= 2.1.0) but it is not going to be installed
                  Depends: aspnetcore-runtime-6.0 (>= 6.0.12) but it is not going to be installed
                  Depends: dotnet-apphost-pack-6.0 (>= 6.0.12) but it is not going to be installed
                  Depends: dotnet-runtime-6.0 (>= 6.0.12) but it is not going to be installed
                  Depends: aspnetcore-targeting-pack-6.0 (>= 6.0.12) but it is not going to be installed
 mysql-connector-odbc-setup : Depends: mysql-connector-odbc (= 8.0.31-1ubuntu20.04) but it is not installable
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).

2-6. .NET SDK インストールを確認

dotnet
(results)
Usage: dotnet [options]
Usage: dotnet [path-to-application]

Options:
  -h|--help         Display help.
  --info            Display .NET information.
  --list-sdks       Display the installed SDKs.
  --list-runtimes   Display the installed runtimes.

path-to-application:
  The path to an application .dll file to execute.

▼3. C# で SQL Server に接続して Select 結果を出力する

3-1. アプリケーションの作成し、作成したディレクトリで VSCode を起動

dotnet new console -o MytestApp
cd MytestApp
code .

3-2. MytestApp.csproj に System.Data.SqlClient を追加し保存 (Ctrl+ s)

SQL Server への接続に必要な .NET Data Provider for SQL Server の名前空間 System.Data.SqlClient を登録します。2022/12 の最新 Version 4.8.5 を指定しています。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="System.Data.SqlClient" Version="4.8.5" />
  </ItemGroup>


</Project>

3-3. 追加した System.Data.SqlClient を Project に反映

dotnet restore

3-4. C# のコード Program.cs 作成

SQL Server には sa のユーザーで接続しています。sa のパスワードは Password で指定します。Database 名は “sampledb1” を指定しています。

参照しているデータは、以前以下の blog で紹介したサンプルデータです。

Python – SQL Server on Ubuntu サンプルデータの作成 v2 No.97

using System;
using System.Data.SqlClient;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                // Build connection string
                SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
                builder.DataSource = "localhost";
                builder.UserID = "sa";
                builder.Password = "password";
                builder.InitialCatalog = "sampledb1";

                // Connect to SQL
                Console.Write("Connecting to SQL Server ... ");
                using (SqlConnection connection = new SqlConnection(builder.ConnectionString))
                {
                    connection.Open();
                    Console.WriteLine("Done.");
                    // execute select query
                    String sql = "SELECT id, cdatetime, note FROM sampletb";
                    using (SqlCommand command = new SqlCommand(sql, connection))
                    {
                        using (SqlDataReader reader = command.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                Console.WriteLine("{0} {1} {2}", reader.GetInt32(0), reader.GetDateTime(1) ,reader.GetString(2));
                            }
                        }
                    }
                }
            }
            catch (SqlException e)
            {
                Console.WriteLine(e.ToString());
            }
        }
    }
}

3-5. コードの実行結果

dotnet run

Connecting to SQL Server ... Done.
3366109 12/9/2022 1:59:12 PM int
3366109 12/9/2022 1:59:12 PM mcranentiv
6732218 12/9/2022 1:59:12 PM orlsojlvuu
10098327 12/9/2022 1:59:12 PM uaclnlkehv
13464436 12/9/2022 1:59:12 PM xngcehsmtc
16830545 12/9/2022 1:59:12 PM llvzgooqaa
20196654 12/9/2022 1:59:12 PM atmordnpfz
23562763 12/9/2022 1:59:12 PM qpzlferdra
26928872 12/9/2022 1:59:12 PM lnbjlmclxx
30294981 12/9/2022 1:59:12 PM xfspqvetbf

▼4. 参考情報

  1. C# – Visual Studio Marketplace
  2. Install .NET on Ubuntu – .NET | Microsoft Docs
  3. C# Ubuntu (sqlchoice.azurewebsites.net)
  4. System.Data.SqlClient 名前空間 | Microsoft Learn
  5. NuGet Gallery | System.Data.SqlClient
  6. Python – SQL Server on Ubuntu サンプルデータの作成 v2 No.97

以上です。参考になりましたら幸いです。



コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です