C#でSQLServerに画像を保存し、参照するプログラムを作るに当たり、初めてSQLServerを利用しました。Visual Studioでコーディングしているので、連携機能が優秀そう…と思い、手を付けてみましたが、よくあるエラー2つにハマってしまったので、その経験を共有したいと思います。
【環境・利用ツールなど】
- Windows10
- SQL Server Management Studio(以下、SSMSと略)
- SQL Server 2019 構成マネージャー(※)
※「スタート」からMicrosoft SQL Server 2019のファイルを開くと該当アプリがあります。
目次
エラーの概要
今回発生したエラーの内容と解決のために試したことです。
エラー内容【エラー:233】
SSMSのSQLServer認証でサーバーへの接続を試みるが以下のようなエラーが発生。発生したエラーは2種類あり、エラー1つ目についてはこちらの記事で解決手順を示しましたので、参考にまでにご活用ください。

【エラーの詳細】
===================================
DESKTOP-XXXXXXX\SQLEXPRESS に接続できません。
===================================
サーバーとの接続を正常に確立しましたが、ログイン中にエラーが発生しました。 (provider: Shared Memory Provider, error: 0 – パイプの他端にプロセスがありません。) (.Net SqlClient Data Provider)
——————————
ヘルプを表示するには https://docs.microsoft.com/sql/relational-databases/errors-events/mssqlserver-233-database-engine-error をクリック——————————
サーバー名: DESKTOP-XXXXXXX\SQLEXPRESS
エラー番号: 233
重大度: 20
状態: 0
エラーの分析
エラーの原因は何なのか、エラーメッセージから分かる範囲で考えてみました。
>サーバーとの接続を正常に確立→とりあえず繋がりはしてる…???
>ログイン中にエラーが発生→ログインアカウントやサーバー側の設定に問題有り???
>パイプの他端にプロセスがありません。→意味不明…。
とりあえずよく分からないので、エラー内容をコピペして検索。すると、名前付きパイプの設定が有効になっていないから起きる的な記事を発見しました。
その記事によると、SQL Server構成マネージャーで詳細設定をいじれるらしいので、開いていきます。
エラー233の解決する手順
具体的には以下の手順でエラーを解決出来ます。
- 構成マネージャーで各種設定変更
- TCPポート番号を設定
- 設定したポート番号のファイアウォールを解除
完結にまとめると上記ですが、これだと流石に分からないと思います。詳しく見ていきましょう。
①構成マネージャーで各種設定変更
「スタート」→Microsoft SQL Server2019フォルダを開き、SQL Server構成マネージャーを開く。
その時、「このアプリがデバイスに変更を加えることを許可しますか?」と出るので、「はい」を選択します。
SQL Server Configuration Managerが開いたと思います。
続けて、SQL Server構成マネージャー(ローカル)のSQL Serverネットワークの構成>SQLEXPRESSのプロトコルを続けてクリック。
共有メモリをダブルクリック>有効を「いいえ」に変更>OKをクリック(適用>OKでも問題ありません)
警告のメッセージウィンドウが表示されるので、OKします。
同様に、名前付きパイプ・TCP/IPの状態を「有効」に変更します。それぞれ、ダブルクリックでプロパティを開き、設定してください。
下の画像のように設定できていたらOKです。
続いて、TCPポート番号を設定していきます。
②TCPポート番号を設定
先ほど設定したTCP/IPのプロパティを、再度ダブルクリックで開きます。プロトコルのタブをIPアドレスに切り替えてください。
下の方にスクロールするとIPAllの項目がありますので、TCPポートを選択します。
TCPポートに49152~65535の間で数字を入力します。※今回は仮に61000を入力しました。入力できれば、OKを押してください。
再度、表示された警告のメッセージウィンドウはOKをクリックしてください。
最後に、サーバーを再起動させます。SSMSを一度閉じ、再度開くか、以下の手順で再起動してください。
SQL 構成マネージャーでSQL Serverのサービスをクリック。
SQL Server(SQLEXPRESS)を右クリックし、再起動をクリック。
以上で、「TCPポート番号を設定」は完了です。最後に、設定したポート番号のファイアウォールを解除します。
③設定したポート番号のファイアウォールを解除
「スタート」からコントロールパネルを開きます。
Windows Defender ファイアウォールを開きます。※表示が違う方はフォーム右上の検索バーからファイアウォールと検索してください。
続けて、画面左側にある詳細設定を開きます。
左側にある「受信の規則」をクリックし、続けて右側に表示される新しい規則…をクリックします。
新規の受信の規則ウィザードが開くので、ポートを選択し、「次へ」をクリック。
特定のローカルポートに先ほど②で設定したポート番号を入力。
「次へ」>「次へ」と進めると「完了」ボタンがあるフォームに続きます。ここではウィザードに名前と説明を付けます。ここでは、仮にSQL Server EXPRESSとします。
以下のように表示されていれば完了です。
エラー回避のテスト
では、SSMSを起動し、予め作成したログインアカウントでSQL認証してみます。ユーザ名:test、PW:testと入力し、接続をクリックします。アカウントhの作成についてはこちらの記事を参考にしてください。
作成後、下の画像のように、ログインユーザーがtestと表示されていれば接続完了です。お疲れ様でした。
エラーの解説と対処
今回のエラーの詳細を会社の日報で書いたところ、会社の先輩が解説してくださったので、共有します。(いつも色々教えて下さり、ありがとうございます。)
エラーの解説
【先輩の解説】
・SQL Server EXPRESS(無償版)はWell-knownポート※1でのListen※2ができない。
・SQL ServerのTCP/IPのポート番号は443(無償版ではこれが利用できない)
・Well-knownポートでの接続が出来ない場合、ファイアウォールにブロックされる
・ブロックされないためにポートを設定する必要がある
※1:Well-knownポート…著名なサービスのために事前予約されている0~1023のポート番号のこと。(例:Yahoo→465 Google→587)
※2:Listen…OSにポート番号を設定し、接続要求を受けると処理を行うこと。
先輩は「家でいうと、窓やドアが増えると泥棒が出入りしやすい入り口が増える。それと同じ」と教えてくださいました。分かりやすい…!!!
今回のエラーの解決手順を図にまとめるとこんな感じです。
ポイントだけまとめると、
- ポート:443での接続は無償版では不可。FWは通る状態
- ポート:61000を設定後、SQLの接続は可能。FWはポート設定されてないため通らない
- FWに61000のポートを再追加。FWが通る状態になり、接続可能となる
エラーの対処
エラーが発生した際に自分が行なっていること・気を付けていることを紹介します。
当記事が皆さんにとって、解決の一助となれていれば幸いです。それでは、ここまでお読みいただき、ありがとうございました!
コメント