質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

[ASP.NET/VisualStudio2022] SQL Serverに接続できない!

TEC_S
TEC_S

総合スコア79

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

1回答

0グッド

0クリップ

515閲覧

投稿2022/10/21 10:51

前提

ASP.NETを勉強しています。
早速アプリを作ろうと、考えTodoのアプリ作成予定です。
ASP.NET MVCにて、Entity Frameworkを利用してSQL Serverへのアクセスを試みているところでエラーが発生して、困っています。

よろしくお願いいたします。

実現したいこと

・SQL Serverへアクセス出来るようになること

発生している問題・エラーメッセージ

An unhandled exception occurred while processing the request. SqlException: Cannot open database "ToDoApp1.Data" requested by the login. The login failed. Login failed for user 'DESKTOP\TESTUSER'. Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, bool callerHasConnectionLock, bool asyncClose) InvalidOperationException: An exception has been raised that is likely due to a transient failure. Consider enabling transient error resiliency by adding 'EnableRetryOnFailure' to the 'UseSqlServer' call.

該当のソースコード

1)新しいプロジェクトの作成 → ASP.NET Core Web アプリ(Model-View-COntroller)を選択して、.NET6.0 / 認証の種類「なし」を選択、HTTPS用の構成にチェック

2)Model作成
Modelsにクラスを追加

Todo.cs

C#

1 public class Todo 2 { 3 public int Id { get; set; } 4 5 public string Summary { get; set; } 6 7 public string Detail { get; set; } 8 9 public DateTime Limit { get; set; } 10 11 public bool Done { get; set; } 12 13 }

3)ViewにRazorコンポーネント作成
Viewフォルダを右クリックして「Razorコンポーネント」
Razorレイアウトを選択して、名前はデフォルトで作成

4)Controllerに、TOdoesControllerを作成
Controllerフォルダを右クリックして追加→「コントローラー」
「Entity Frameworkを使用したビューがあるMVCコントローラーを選択して、モデルクラスに上記で作成したModelsを、データコンテキストクラスは、「+」マークで新しいデータコンテキストの型を指定(名前は入力されているまま利用)、レイアウトページは、3で作成したcshtmlファイルを選択(ここでは、_Layout.cshtml)

5)Program.csの下記のコードを「Home」→「Todoes」に書き換え、ビルド実行
→ エラー発生

C#

1app.MapControllerRoute( 2 name: "default", 3 //pattern: "{controller=Home}/{action=Index}/{id?}"); 4 pattern: "{controller=Todoes}/{action=Index}/{id?}");

試したこと

下記の情報から、どうやらTLSがエラーの原因ではないかということで、TLSを無効にするためにコード変更したが改善せず

https://qiita.com/karuakun/items/ac6cfd5e0bc52ce5bea6

変更

C#

1app.MapControllerRoute( 2 name: "default", 3 //pattern: "{controller=Home}/{action=Index}/{id?}"); 4 pattern: "{controller=Todoes}/{action=Index}/{id?}/{port=3306}/{sslmode=none}");

変更はこちらのコードを参考にしました。

補足情報(FW/ツールのバージョンなど)

開発環境:Visual Studio2022
フレームワーク:.NET6
OS:Windows11 Home

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

SurferOnWww

2022/10/21 11:01

エラーメッセージを見るとログインできないと書いてありますけど、あなたの SQL Server は何で、どこに存在するのですか?
SurferOnWww

2022/10/21 23:06

質問者さん、無言ですが、回答したのでそれに対するフィードバックを返してください。役に立った/立たなかったぐらいはすぐに返せるのでは? 役に立たなかったならどこがダメかを書くとより期待に近い回答が出てくるかも。とにかく無言は NG です。
TEC_S

2022/10/23 00:52

URLを元に進めていました。一度コメントしておかないと、現状分からないですね・・。 気が回らず申し訳ありませんでした。
SurferOnWww

2022/10/25 22:47

その後どうなりましたか?
TEC_S

2022/10/26 09:27

お待たせしました。頂いた回答欄に追記させていただきました!
SurferOnWww

2022/10/28 01:56

質問者さん、「追記」と「追記2」を書いたのでそれに対するフィードバックを返してください。あなたが回答のコメント欄の 2022/10/26 18:26 のコメントで書いたエラー問題の原因は「追記2」に書いたことだと思っているのですが、どうですか?
SurferOnWww

2022/11/01 02:18

質問者さん、いつまでも放置しておかないで、「追記」と「追記2」を書いたのでそれに対するフィードバックを返す、解決できたらクローズするということをしてください。
SurferOnWww

2022/11/03 23:41

その後どうなりましたか? いつまでもオープンしておかないで、私の回答の「追記」と「追記2」の件を調べた結果を書いてクローズ願います。

回答1

1

ベストアンサー

エラーメッセージを見るとログインできないと書いてありますけど、あなたの SQL Server は何で、どこに存在するのですか?

「SQL Serverへアクセス出来るようになること」が目的だそうですが、質問の中身を見ると、その目的を果たすためにあなたがやってることは全くの見当違いだと思いますけど。一度、以下のチュートリアルに従って、LocalDB(開発用の SQL Server)を使ってやってみることをお勧めします。

パート 4、ASP.NET Core MVC アプリにモデルを追加する
https://learn.microsoft.com/ja-jp/aspnet/core/tutorials/first-mvc-app/adding-model?view=aspnetcore-6.0&tabs=visual-studio


【追記】

下のコメント欄の私の 2022/10/28 09:43 のコメントで、

チュートリアルの「最初の移行」をスキップしたとか、やったけど失敗していて DB ができてないということはないでしょうね? SQL Server オブジェクトエクスプローラーを使って確認してください。

・・・と書いた件ですが、「最初の移行」で DB とテーブルができていれば、生成された Movie テーブルは以下のようになります。DB 名は appsettings.json ファイルに追加された接続文字列の Database に指定されたものになります。

イメージ説明

DB とテーブルができていれば、「最初の移行」で DB の生成を含めてアプリは完成しています。


【追記2】

よく見てみれば、あなたが下の 2022/10/26 18:26 のコメントで書いたエラーメッセージ、

SqlException: Cannot open database "MvcMovieContext-7dc5b790-765f-4381-988c-5167405bb107" requested by the login.

・・・のデーターベース名 MvcMovieContext-7dc5b790-765f-4381-988c-5167405bb107 は、

チュートリアルの、

生成されたデータベース接続文字列を調べる
https://learn.microsoft.com/ja-jp/aspnet/core/tutorials/first-mvc-app/adding-model?view=aspnetcore-6.0&tabs=visual-studio#examine-the-generated-database-connection-string

・・・に書いてある appsettings.json ファイルに追加された接続文字列、

"ConnectionStrings": { "MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-7dc5b790-765f-4381-988c-5167405bb107;Trusted_Connection=True;MultipleActiveResultSets=true"

・・・の Database の設定 MvcMovieContext-7dc5b790-765f-4381-988c-5167405bb107 と同じになってる。

チュートリアルの通りにやってればそんなことになるはずはないです。

ひょっとして、チュートリアルの「生成されたデータベース接続文字列を調べる」のセクションを見て appsettings.json を書き換えた? そんなことはする必要はない、と言うより、そんなことはしてはいけないのですよ。そういうことをすると、存在しない DB に接続に行くというのが分かりませんか?

書き換えたとするとそれが原因。

投稿2022/10/21 11:51

編集2022/10/28 03:41
SurferOnWww

総合スコア17434

TEC_Sを押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

TEC_S

2022/10/23 00:51

自分の理解が至っていない部分があり、確認を進めていました。ご指摘、ありがとうございます! また、チュートリアルのURLについても、ありがとうございます。一度、チュートリアルを進めてみたいと思います!チュートリアルを進めて理解をして、上記対応の修正方法などをこちらに記載しようと思います。
TEC_S

2022/10/26 09:26 編集

お待たせしました! パート1~4のチュートリアル通り実装して下記にアクセスしますが、エラーが発生ました。 理解度は上がったと思います。 EntityFrameworkCoreを利用。コントローラーとデータコンテキストとの連携を追加。 恐らく、通常であれば、この状態でDBへアクセス可能になると理解しました。 スキャルフォールディングにて関連cshtmlファイルは作成されていて、Createなどのページへはアクセス可能です。しかし、Createページで追加してもMoviesのページへ推移するとエラーが発生してしまいます。SQLサーバー側の問題・・・と考えるのが良いのでしょうか。。 https://localhost:{PORT}/Movies エラー内容 ``` An unhandled exception occurred while processing the request. SqlException: Cannot open database "MvcMovieContext-7dc5b790-765f-4381-988c-5167405bb107" requested by the login. The login failed. Login failed for user 'DESKTOP\TESTUSER'. Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, bool callerHasConnectionLock, bool asyncClose) InvalidOperationException: An exception has been raised that is likely due to a transient failure. Consider enabling transient error resiliency by adding 'EnableRetryOnFailure' to the 'UseSqlServer' call. ```
SurferOnWww

2022/10/26 11:25

いやいや、チュートリアル通りやってないでしょ。チュートリアル通りにやって LocalDB を使っていれば、ログインできないなんてことはないはず。釣りとかですか?
TEC_S

2022/10/26 13:31 編集

ないはずの事が起きているので、質問しているわけですが・・・ 建設的なコメントを頂けると幸いです。 原因として考えられそうなことは、どんなことでしょうか。
SurferOnWww

2022/10/26 13:33 編集

建設的? 意味不明の訳の分からない質問をしておいて何を言ってるのかな。ホントに釣りでないなら、あなたが求める「建設的なコメント」ができるように、あなたが何をしたかわかるように書こう。
TEC_S

2022/10/27 00:56 編集

困っていて質問をしています。 分からない点があるなら、大変恐縮ですが、不明点を質問をしていただけると幸いです。 伝わると思って記載していますが、どんな情報が足りないでしょうか。
SurferOnWww

2022/10/27 02:41 編集

> スキャルフォールディングにて関連cshtmlファイルは作成されていて、Createなどのページへはアクセス可能です。しかし、Createページで追加してもMoviesのページへ推移するとエラーが発生してしまいます。 チュートリアル通りにやれば絶対にそんなことにはなりません。 チュートリアル通りにやって「最初の移行」まで進めていれば、LocalDB に DB とテーブルは生成され、それに接続して CRUD 操作ができるアプリが完成してます。 ブラウザから Movies/Index を要求すれば DB に接続してデータを取得し、取得したデータ一覧を表示します。最初はテーブルが空ですが、その場合でも DB への接続とデータの取得は行われます。 Movies/Create でデータの追加に成功すれば、Movies/Index にリダイレクトされ、追加したデータを含めた一覧を表示します。 「Moviesのページへ推移するとエラー」なんて話にはならないはずです。 だからチュートリアル通りにやってないだろうと言っているのです。チュートリアル通りにやってないところであなたが何をしたかはエスパーではない自分には分からないので、「建設的なコメント」が欲しければ、あなたが何をしたかわかるように書いてくれと言っておるのですけど。
TEC_S

2022/10/27 05:25 編集

>あなたが何をしたかわかるように チュートリアル通り実装して下記にアクセスしますが、エラーが発生ました。 ないはずの事が起きているので、質問しています。原因として考えられそうなことは、どんなことでしょうか。 >「Moviesのページへ推移するとエラー」なんて話にはならないはずです。 なってしまっている状況です。「・・・のはず」は100%ではないですよね。 繰り返しになってしまって恐縮ですが、上記に記載した通りです。 やっている・やっていないの話では前に進まないと思いますが、「やっていない」のだとすると、もう少し違うエラーが出るとチュートリアルにも一部記載があったかと思います。 エラー内容から考えると、SQLサーバーのアクセス権限がないといわれていると考えているのですが、認識あっていますでしょうか。もしかすると勉強用のPCとして支給されている関係で、PCの既存環境に問題があるのかも・・。
SurferOnWww

2022/10/27 05:40 編集

> 原因として考えられそうなことは、どんなことでしょうか。 繰り返しになりますが、チュートリアル通りにやってないからです。 > 「・・・のはず」は100%ではないですよね。 チュートリアル通りにやっていれば 100% ないと言い切れますよ。 > エラー内容から考えると、SQLサーバーのアクセス権限がないといわれていると考えているのですが チュートリアル通りにやって LocalDB を使っていれば、ログインできないなんてことはないと言ったでしょ。チュートリアルの「アプリをテストする」まで進めて Movies/Index を要求すればエラーなく表示されるのですよね(初期画面では DB のテーブルにレコードはないので中身のないリストになりますが)。その場合、上にも書いた通り DB への接続とデータの取得は行われます。すなわち問題なくログインできてます。せっかく書いたのに、書いたこと読んでないでしょ?
SurferOnWww

2022/10/28 00:43

一つだけ。 チュートリアルの「最初の移行」をスキップしたとか、やったけど失敗していて DB ができてないということはないでしょうね? SQL Server オブジェクトエクスプローラーを使って確認してください。
SurferOnWww

2022/10/28 01:04 編集

よく見てみれば、あなたが上のコメントで書いた、 > SqlException: Cannot open database "MvcMovieContext-7dc5b790-765f-4381-988c-5167405bb107" requested by the login. のデーターベース名と、チュートリアルの、 生成されたデータベース接続文字列を調べる https://learn.microsoft.com/ja-jp/aspnet/core/tutorials/first-mvc-app/adding-model?view=aspnetcore-6.0&tabs=visual-studio#examine-the-generated-database-connection-string に書いてある appsettings.json ファイルに追加された接続文字列、 "ConnectionStrings": { "MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-7dc5b790-765f-4381-988c-5167405bb107;Trusted_Connection=True;MultipleActiveResultSets=true" の Database と同じじゃん。 チュートリアルの通りにやってればそんなことになるはずはないのだよ。
TEC_S

2022/11/01 23:55 編集

返信遅くなっており、申し訳ありません。 また、追記ありがとうございます。 頂いた内容をしっかり確認して、自分の環境との違いの確認や、それに伴う作業を進めたいと思います。 また、メッセージをさせていただきます。
SurferOnWww

2022/11/03 23:39

> また、メッセージをさせていただきます。 どうなりましたか? いつまでもオープンしておかないで、調べた結果を書いてクローズ願います。
TEC_S

2022/11/04 01:18 編集

ページ表示を確認できました!! SQLは作られており、原因がまさに下記でした!! > appsettings.json を書き換えた? そんなことはする必要はない、と言うより、そんなことはしてはいけないのですよ。 ありがとうございました!!

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。