【C#】Ubuntu20.04でSQLServerをインストールして接続する

Ubuntu上にSQL Serverをインストールして、C#から接続することができるようなので試してみました。

環境構築にはVPSのWebARENA (Indigo)を利用しました。1時間単位の課金で非常に安価なためお勧めです

【検証環境】Ubuntu20.04 / .NET Core3.1

UbuntuにSQL Serverをインストール

https://learn.microsoft.com/ja-jp/sql/linux/quickstart-install-connect-ubuntu?view=sql-server-ver16

1.パブリック リポジトリの GPG キーをインポート

wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -

2.SQL Server Ubuntu リポジトリを登録

sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/20.04/mssql-server-preview.list)"

3.SQL Server をインストール

sudo apt-get update
sudo apt-get install -y mssql-server

4.SQL Serverをセットアップ

sudo /opt/mssql/bin/mssql-conf setup

SQL Serverのエディション、Administratorのパスワードを設定します

5.リモート接続する場合は、ポート1433を開放

VPSであればコントロールパネルなどから、AWSなどであればセキュリティグループからインバウンドルールにカスタムTCPで1433を許可します。

ただし、今回の検証ではVPSを利用していますが、Ubuntu Server 標準ファイアウォール ufwを使って設定します。https://server-network-note.net/2021/08/ubuntu-server-20-04-lts-firewall-ufw/

sudo ufw enable
sudo ufw allow 1433
# sshも
sudo ufw allow 22

Ubuntu上でローカル接続

コマンドラインツールのインストール

Ubuntu上からローカルで接続するには、SQL Serverコマンドラインツールをインストールします

1.curlのインストール

sudo apt-get update 
sudo apt install curl

2.パブリック リポジトリの GPG キーをインポート

curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -

3.Ubuntu リポジトリを登録

curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list

4.ソース一覧を更新し、unixODBC 開発者パッケージを使用してインストール コマンドを実行

sudo apt-get update 
sudo apt-get install mssql-tools unixodbc-dev

5.最新バージョンのmssql-toolsに更新

sudo apt-get update 
sudo apt-get install mssql-tools

6.環境変数の設定

echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile

ローカル接続

下記コマンドでログインします

sqlcmd -S localhost -U sa -P '<YourPassword>'

SQLの実行

データベースの作成なら下記コマンドを打ちます

CREATE DATABASE TestDB;

この状態では実行されず、GOを打つことで実行されます(末尾セミコロン不要)

GO

また、複数行入力してからGOを打つことも可能です

ターミナルからだとSQLの入力が煩わしい場合は、後述するSSMSでの入力のほうが楽かもしれません

SSMSからリモート接続

ポート開放を行っていれば、WindowsからSSMSで接続することができます

サーバ名にIPアドレスを指定して、接続します(ポートの指定は不要)

あとはWindowsで普段使っている通りに使えます

※Linux版のためか、テーブルデザインのGUIは使えないため、SQL文の作成が必要になります

C#から接続

基本的に普段使っている通りに使うことができるのでコードは省きます

変わるところとしては接続文字列ですが、以下の点にハマりました

  • リモート接続の場合、IPにポートは不要(むしろ付けたらエラーになった)
  • ローカル接続の場合、サーバ名は「localhost」にする(Windowsのように「localhostSQLEXPRESS」だとエラーになった)

Leave a Reply

Your email address will not be published. Required fields are marked *