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

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

新規登録して質問してみよう
ただいま回答率
85.37%
blazor

Blazorは、マイクロソフトが開発している.NETベースのWebアプリフレームワークです。C#でフロントエンドもバックエンドも一貫して書くことが可能。クライアントサイド(WebAssembly)とサーバーサイド形式のホスティングモデルがあります。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

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

Q&A

解決済

1回答

4601閲覧

C#BlazorアプリからSQLServerへの接続ができない

Y.Mamoru

総合スコア47

blazor

Blazorは、マイクロソフトが開発している.NETベースのWebアプリフレームワークです。C#でフロントエンドもバックエンドも一貫して書くことが可能。クライアントサイド(WebAssembly)とサーバーサイド形式のホスティングモデルがあります。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

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

0グッド

1クリップ

投稿2022/08/10 07:16

編集2022/08/17 01:49

実現したいこと

C#BlazorアプリケーションからSQLServer上のDBへ接続をして、データを引っ張ってきたい。

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

問題:SQLServerへ接続ができない。(接続させる手順が参考サイト通りにいかない)

実行する以前の段階で躓いているのでエラー文等は出ていないです。
現在参考にしているサイトは以下です。
https://blazor-master.com/entity-framework-sqlserver/

上記のサイト中段にある「接続文字列の設定」を行うときに必要となる接続文字列を調べるために以下のサイトを参考にしました。
https://it-skill-memo.work/2020/07/31/%e3%80%90c%e3%80%91visual-studio%e3%81%a7sql-server%e3%81%ae%e6%8e%a5%e7%b6%9a%e6%96%87%e5%ad%97%e5%88%97%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b/

このときVisualStudioのデータソースウィンドウを開いて操作するのですが、
私のPCのVisualStudioではデータソースウィンドウには何も表示されず、各ボタンも非活性になっているため操作できません。

データソースウィンドウが効かない状態をクリアすべく以下のサイトを参考にしました。
https://social.msdn.microsoft.com/Forums/ja-JP/993181e7-48f6-428b-88b8-d901f3d2d374?threadDisplayName=12487125401247912477125401247312454124511253112489124541236420

このサイトに書かれている通りに操作したのですが、結果は変わらずデータソースウィンドウが使えません。
上記捜査後には、VisualStudioを一度落として開きなおしたのですが、変わりません。

解決方法がわかりますでしょうか?
もしくは、より簡単にSQLServerへ接続する別の方法があればご教授願いたいです。

該当のソースコード

接続情報クラス

C#

1using Microsoft.EntityFrameworkCore; 2 3namespace ***.Client.Data 4{ 5 public class SampleDbContext : DbContext 6 { 7 public SampleDbContext(DbContextOptions<SampleDbContext> options) 8 :base(options) 9 { 10 } 11 public virtual DbSet<Report> Reports { get; set; } 12 13} 14 15} 16

接続サービスクラス

C#

1using System.Linq; 2using System.Threading.Tasks; 3using ***.Client.Data; 4using Microsoft.EntityFrameworkCore; 5 6namespace ***.Server.Data 7{ 8 public class SampleDbService 9 { 10 SampleDbContext _Context { get; } 11 12 public SampleDbService(SampleDbContext context) => 13 _Context = context; 14 15 public Task<List<Report>> GetReportsAsync() => 16 _Context.Reports 17 .OrderBy(x => x.Report_id) 18 .ToListAsync(); 19 } 20} 21

SELECTしたデータを表示させたいクラス

C#

1using System.ComponentModel.DataAnnotations; 2using System.ComponentModel.DataAnnotations.Schema; 3 4namespace ***.Client.Data 5{ 6 [Table("DASample", Schema = "dbo")] 7 public class Report 8 { 9 [Key] 10 [Column("id")] 11 public int Report_id { get; set; } 12 13 [Column("report_name")] 14 public string Report_name { get; set; } 15 } 16} 17

試したこと

上記のサイトをもとに試行錯誤中です。

宜しくお願い致します。

追加情報

DBに関して今の自分の情報を追記します。
イメージ説明

イメージ説明

これらが今のLocal上でのDB情報です。
今はまず、LocalDBへの接続を試みている状況です。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazto

2022/08/10 08:46

SQLサーバはご自身で用意するものですが、そのような手順は踏みましたか?
Y.Mamoru

2022/08/10 08:50

SQLServer側でのデータベース、テーブルの作成ならば完了しています。
Y.Mamoru

2022/08/10 09:20

自分の知識が足りず申し訳ないのですが、それらの情報はどのようにして確かめるのでしょうか? データベース名はわかっている状態ですが、その他の情報がどこから確認できるのかが現在わかっていません。
kazto

2022/08/10 09:26

データベースを作ったときに、ご自身で入力されたものです。ご自身で入力されたので、把握しているはずですが、その意識がなくDBを作ってしまった、ということですね。 データベースはAzureのSQLデータベースを使用しているので間違いありませんか?
退会済みユーザー

退会済みユーザー

2022/08/10 09:56

Blazor Server なのか Blazor WASM なのかどっちですか? Visual Studio,.NET のバージョンを書いてください。Visual Studio でプロジェクトを作成する特に使ったテンプレートは何ですか?
退会済みユーザー

退会済みユーザー

2022/08/10 10:08 編集

> VisualStudioのデータソースウィンドウを開いて操作する と言ってる時点で何もわかってないようです。ASP.NET Core Web API にアクセスしてデータを取得してくることになると思いますが、ASP.NET Core Web API から SQL Server などの DB へのアクセスには Entity Framework Core を用いるのが普通です。知質問者さんが「データソースウィンドウを開いて操作」して作成するのは DataSet と理解していますが、普通はそういうのは使いません。
退会済みユーザー

退会済みユーザー

2022/08/10 10:26

> SQLServer側でのデータベース、テーブルの作成ならば完了しています。 何らかの手段でそれを表示してスクリーンショットを取って見せてもらうことはできますか? 話はそこから始めるのがはやそうです。
退会済みユーザー

退会済みユーザー

2022/08/11 04:46 編集

質問者さんが無言になってしまいましたが・・・ 接続文字列が分からないのが問題だそうですが「現在参考にしているサイト」を見てみると以下の画像が貼ってあって、「VisualStudioのデータソースウィンドウを開いて操作」なんてことはしなくても接続文字列は取得できるようですが? https://blazor-master.com/wp-content/uploads/2021/01/08da57e42dbce4aeaba645c0dda3d6f0.png ホントに「現在参考にしているサイト」の通りやったんですか? 「現在参考にしているサイト」がなぜ Azure のような有償サービスの SQL Server を使っているのか分かりませんが、特に理由がなければ、SQL Server Express とか LocalDB (開発用のSQL Server) をローカルにインストールして使うことをお勧めします。
退会済みユーザー

退会済みユーザー

2022/08/16 03:04

いつまでも放置しておかないでクローズしてください。
Y.Mamoru

2022/08/17 01:46

すみません、別案件に入っておりこちらの質問への回答等を確認できておりませんでした。 回答や質問をおくっていただきありがとうございます m( _ _)m 回答はこの後確認しますが、取り急ぎこちらの各質問に答えます。 @kaztoさん >データベースはAzureのSQLデータベースを使用しているので間違いありませんか? 作成したのはMicrosoftのSQLServerを利用しています。 SSMSを使ってDB作成、TB作成を行いました。 @SurferOnWwwさん >Blazor Server なのか Blazor WASM なのかどっちですか? Visual Studio,.NET のバージョンを書いてください。 WASMの方です。 VisualStudioバージョン:17.2.6 .NETバージョン:4.8.04084 >Visual Studio でプロジェクトを作成する特に使ったテンプレートは何ですか? テンプレートは特にしてした覚えがなくわかりませんでした(><) >何らかの手段でそれを表示してスクリーンショットを取って見せてもらうことはできますか? このあと質問ページに画像を添付しておきます。 >「VisualStudioのデータソースウィンドウを開いて操作」なんてことはしなくても接続文字列は取得できるようですが? 確かに張り付けたリンク先を見ると「データソースウィンドウを開く」という工程がないですね(^^; 多くのページを開いて調べていたので間違えて張り付けてしまったのかもしれません(笑) ややこしい情報を載せてしまいすみませんが、「データソースウィンドウを開く」という内容は確実にあって、そのページ通りには行っておりました。 このあと記載いただいた回答を確認しますね。ありがとうございます(^^)
退会済みユーザー

退会済みユーザー

2022/08/17 02:53 編集

> 作成したのはMicrosoftのSQLServerを利用しています。SSMSを使ってDB作成、TB作成を行いました。 それは何なのですか? 自分の開発マシンにインストールしたローカルの SQL Server ですか? 質問者さんの組織の LAN にあるリモートの DB サーバーの SQL Server ですか? SQL Server のバージョン・エディションは何ですか? もっと具体的に書いてください。 ところで、話が違いますよね。質問には、 > 問題:SQLServerへ接続ができない。(接続させる手順が参考サイト通りにいかない) と書いてあって、その参考サイト https://blazor-master.com/entity-framework-sqlserver/ を見ると Azure SQL Server を使っているのですが。それは、一体何だったのですか? > .NETバージョン:4.8.04084 聞いているのはそれではなくて「ターゲットフレームワーク」です。プロジェクトのプロパティを開くと「アプリケーション」>「全般」にターゲットフレームワークという項目があって、それに .NET 5.0 とか .NET 6.0 とか出ているのでそれを書いてください。 > 「データソースウィンドウを開く」という内容は確実にあって、そのページ通りには行っておりました。 参考にした以下のサイトの話ですよね? https://it-skill-memo.work/2020/07/31/%e3%80%90c%e3%80%91visual-studio%e3%81%a7sql-server%e3%81%ae%e6%8e%a5%e7%b6%9a%e6%96%87%e5%ad%97%e5%88%97%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b/ .NET Core / .NET ではその機能はサポートされていません。.NET Framework であればその記事のようにはできますが、接続文字列を取得するのにそんなことをする必要は全くありませんし、そもそもそういうことができるということは「Visual Studio から接続できている」=「接続文字列は分かっている」ということです。その記事を見るのはやめた方が良さそうです。 質問に追加で貼った SSMS の画像が質問者さんが使う SQL Sever であるなら、同様に、「SSMS から接続できている」=「接続文字列は分かっている」ということですよ。
Y.Mamoru

2022/08/17 04:15

@SuferOnWww 回答ありがとうございます♪ 各質問に答えますね(^^) >自分の開発マシンにインストールしたローカルの SQL Server ですか? 追加情報に記載していますが、ローカルのSQLServerです >SQL Server のバージョン・エディションは何ですか? SQLServer2019(RTM) です >Azure SQL Server を使っているのですが。それは、一体何だったのですか? 前述の通り、間違えたサイトをリンクに張ってるのかもしれません(^^; あれから前に見たページを探してみたのですが、見つからなかったので流してくださって大丈夫です(^^)b >「ターゲットフレームワーク」 .NET6.0です >同様に、「SSMS から接続できている」=「接続文字列は分かっている」ということですよ。 SSMSからの接続はできてます。ただそこから接続文字列を確認する方法を調べる中で 訳が分からなくなった次第です(^^;
guest

回答1

0

ベストアンサー

質問者さんは去ってしまったようですが、このまま自分が関わったスレッドが放置されて終わるのもなんですので、回答というか提案を書いておきます

接続文字列が分からないのが問題だそうですが「現在参考にしているサイト」を見てみると以下の画像が貼ってあって、「VisualStudioのデータソースウィンドウを開いて操作」なんてことはしなくても接続文字列は取得できるようです。

イメージ説明

たぶんその先に進めなかったのであろうと思われますので、Azure SQL Server など使わないで、LocalDB を使ってもっと簡単にできる方法を提案しておきます。

Blazor を開発するためのワークロードを Visual Studio をインストールしたのであれば、一緒に LocalDB がインストールされているはずですので。

参考にしているサイトを見ると Blazor WASM を「ASP.NET Core でホストされた(h)」のオプションにチェックを入れてプロジェクトを作成しているようです。その場合以下のように一つのソリューションの中に 3 つのプロジェクトが生成されるので、それをベースに話をします。

イメージ説明

以下の記事は ASP.NET Core MVC アプリのチュートリアルですが、基本的にはこの通りやればコントローラ他のコードの自動生成と、Migration 操作による LocalDB へのデータベース生成まで自力で一行もコードを書かなくても簡単に可能です。

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

(1) xxx.Shared プロジェクトの中に Product エンティティを作成します。質問者さんが参考にしている記事のものは、はっきり言ってダメなので以下のようにしましょう。.NET 6.0 ベースなのでデフォルトで「Null 許容」が「有効化」に設定されており、以下のコードはそれに対応しています。

using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace BlazorWasmCoreHosted.Shared { public class Product { [Key] public int ProductId { get; set; } [Required] [StringLength(128)] public string ProductName { get; set; } = null!; [Required] [Column(TypeName = "decimal(18,2)")] public decimal UnitPrice { get; set; } } }

(2) xxx.Server プロジェクトに NuGet から Microsoft.EntityFrameworkCore.Design をインストールします。

イメージ説明

(3) xxx.Server プロジェクトでスキャフォールディングを実行します。上に紹介した記事は MVC のものですのでここは少し違います。Web API の Controller を作るので、「新規スキャフォールディングアイテムの追加」のメニューでは「Entity Framework を使用したアクションがある API コントローラー」を選択します。

イメージ説明

[追加]をクリックして以下の画面に進んで、モデルクラス、データコンテキストクラス( + をクリックすると設定できます)、コントローラー名を設定し[追加]をクリックします。

イメージ説明

それにより、自動的に以下の操作が行われます。

  • 他に必要な NuGet パッケージ(Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.Tools, Microsoft.VisualStudio.Web.CodeGeneration.Design)の追加

  • Data フォルダにコンテキストクラスの作成

  • Program.cs ファイルにコンテキストクラスの登録

  • appsettings.json ファイルへの接続文字列の追加

  • CRUD 操作に必要な Web API Controller の生成

質問者さんがトラブった接続文字列は自動的に生成され appsetting.json ファイルに追加されます。

イメージ説明

(4) チュートリアルの「最初の移行」に書いてあるように Add-Migration InitialCreate と Update-Database を実行します。これにより接続文字列で指定された名前のデーターベースが生成されます。SQL Server オブジェクトエクスプローラーで確認できます。

イメージ説明

この時点では Product テーブルの中身は空ですので、SQL Server オブジェクトエクスプローラーを使ってデータを追加し、その後ブラウザから API を呼べば結果が返ってきます。

イメージ説明

後は、xxx.Client に FetchData.razor と同様なコードで API からデータを取得して表示するページを追加すれば完成です。

投稿2022/08/13 07:48

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Y.Mamoru

2022/08/17 03:08

回答ありがとうございます! こちらと添付されたチュートリアルに沿って行ってみました。 結果的にオブジェクトエクスプローラーで確認できるはずのテーブルが確認できなかったので、 現状を共有します。 ・まずスキャフォールディングした際にDataフォルダが作成されませんでした。 もともとDataフォルダがない状態で進めたことが原因かと思うのですが、フォルダ自体は自動生成ではないということであっていますでしょうか? ・Dataフォルダがないままコマンド入力まで進んでみました。 結果Updateまで行ってもエラーは発生しませんでしたが、作成されるはずのテーブルデータがありませんでした。 オブジェクトエクスプローラーのテーブルフォルダ以下には、 「システムテーブル」 「外部テーブル」 があるのみです。
退会済みユーザー

退会済みユーザー

2022/08/17 03:42

できないのは私が回答に書いた通りにやってないからでしょう。とりあえず先に上の質問に対する 2022/08/17 11:53 の私のコメントに対して答えてもらえませんか?
Y.Mamoru

2022/08/17 04:17

@SurferOnWww 確かに結果が違うということは、そのままできてないからって可能性はあるんでしょうけど(笑) もう一度行ってみますね(^^)
Y.Mamoru

2022/08/17 04:21 編集

@SurferOnWww 私が2022/08/17 12:08に質問した、 「Dataフォルダ自体は自動生成ではないということであっていますでしょうか?」 という質問に答えていただけるとありがたいです(^^) おそらくこの辺りが差異になってくるので
Y.Mamoru

2022/08/17 05:02

@SurferOnWww もう一度プロジェクトを立ち上げるところからやり直し、 張っていただいたリンク通りに進むとローカルテーブルへのデータ挿入までできました! データをSELECTして表示するのはこれからですが、 少なくとも接続はうまくいっています! 本当にありがとうございます(^o^)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問