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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

ASP.NET

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

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

4100閲覧

データベースから取得したデータを、vbhtmlに表示したい

sad

総合スコア16

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

ASP.NET

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

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2020/10/30 05:00

編集2020/11/02 00:36

環境:
windows10 64bit
visual studio 2019
ASP.NET webアプリケーション MVC
.NET Framework 4.7.2
VB.NET
MySQL
MySQL for Visual Studio 1.2
Connector NET 8.0
以前使用していたDB(masta)及びTable(masta_list)を流用(DBFirst)
経緯

 MVCモデルの形で一連の流れを理解するために、スキャフォールディング等を利用せずにデータベースからデータを取得、表示をしようとしています。

 データベースから全件取得→JSON形式に変換→そのまま表示(画面にJSON形式の全データ羅列)は出来たのですが、その中身を取り出して順に表示させることができません。
知りたいこと

JSONにこだわるわけではないので、
・取得したデータから値を一つずつ取り出せる
・htmlにリスト(ArrayList)変数を渡せる(javaのsetAttributeのようなもの)
・その変数を受け取り、中身を指定して参照できるもの(getAttributeのようなもの)
↑このようなメソッドを教えていただきたいです。
また、足りないものや無駄なものも時間がお許しでしたら教えていただきたいです。

やろうとしたこと

JsonConvert.DeserializeObjectメソッドがEntityに自動でマッピングしてくれるという情報を目にしたのでこちらのサイトを参考に書いてみました。https://itsakura.com/vbnet-object-json
しかしデータが複数ある(10件程)影響なのか、そもそも構文がおかしいのか、とりあえず名前だけを参照してみようしたのですができませんでした(TestDB.vb)。

ソース:
Contact.vbhtml
渡すものがわからず、変数をViewDataで参照しているだけです。
データの中身をうまく取り出せず、何も表示されません。

VB

1 2<h3>@ViewData("dMessage")</h3> 3

Entity.vb

VB

1Public Class Entity 2 3 Public Property nom() As Integer 4 Public Property name() As String 5 Public Property kana() As String 6 Public Property tell() As String 7 Public Property mail() As String 8 Public Property year() As Integer 9 Public Property month() As Integer 10 Public Property day() As Integer 11 Public Property age() As Integer 12 Public Property code() As Integer 13 Public Property add1() As String 14 Public Property add2() As String 15 16End Class 17

HomeController.vb

VB

1Public Class HomeController 2 Inherits System.Web.Mvc.Controller 3 4 Function Index() As ActionResult 5 Return View() 6 End Function 7 8 Function About() As ActionResult 9 ViewData("Message") = "Your application description page." 10 11 Return View() 12 End Function 13 14 Function Contact() As ActionResult 15 16 'TestDBクラスのtestDBメソッドを呼び出し、 17 '戻り値を変数に格納 18 Dim test As New TestDB() 19 Dim deserialized As String = test.testDB() 20 21 ViewData("dMessage") = deserialized 22 Return View() 23 End Function 24End Class

Test.vb

VB

1Imports Newtonsoft.Json 2 3Public Class TestDB 4 Friend Function testDB() 5 6 'SQL文を引数にしてDAOクラスを呼び出す 7 Dim SqlStr = "SELECT * FROM masta_list" 8 Dim Dao As New DAO 9 Dim DsJson As String = Dao.Connect(SqlStr) 10 11 'Entityクラスにマッピングして値を参照したいがうまく行かない 12 Dim entity As Entity = JsonConvert.DeserializeObject(Of Entity)(DsJson) 13 14 Return entity.name  'nameには何も入っていない 15 16 End Function 17 18End Class

DAO.vb
データベースアクセスだけにしたかったが、Con.Close()を分ける方法がわからずに純粋なDAOにできませんでした

VB

1Imports MySql.Data.MySqlClient 2Imports Newtonsoft.Json 3 4'引数にSql文を渡すことでJSON形式のデータを返す 5Public Class DAO 6 Friend Function Connect(SqlStr) 7 8 'データベース接続文字列の作成 9 Dim Builder = New MySqlConnectionStringBuilder() 10 11 '接続に必要な情報をBuilderに格納 12 Builder.Server = "localhost" 13 Builder.Port = 3306 14 Builder.UserID = "root" 15 Builder.Password = "password" 16 Builder.Database = "masta" 17 18 Dim ConStr = Builder.ToString() 19 20 'データベースに接続 21 Dim Con As New MySqlConnection 22 Con.ConnectionString = ConStr 23 Con.Open() 24 25 'データ取得のためのアダプタを設定 26 Dim Adapter = New MySqlDataAdapter(SqlStr, Con) 27 28 'データを取得、セットする 29 Dim Ds As New DataSet 30 Adapter.Fill(Ds) 31 32 'データをJSON形式にシリアライズし、返す 33 Dim DsJson As String = JsonConvert.SerializeObject(Ds) 34 Return DsJson 35 36 'データベースの切断 37 Con.Close() 38 End Function 39 40End Class

足りない情報等随時追加いたします。
よろしくお願いいたします。

追記

EDMを作成しようとすると、この画面が出て止まってしまいます。
イメージ説明

ソリューションの参照の一部です。
MySql.DataとMySql.Data.EntityFrameworkを入れても結果が変わりませんでした
参照

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/10/30 05:56

> MySQL 前のスレッドでは SQL Server (LocalDB) だったはずですか MySQL に変わったのですか? MySQL, Connector/NET, MySQL for Visual Studio のバージョンは何ですか? どうしても MySQL でなければならないということでなければ SQL Server を利用することをお勧めします。Connector/NET, MySQL for Visual Studio のバージョンによっては Visual Studio の Entity Framework 関係のデザイナが動かなかったということがありましたので。 勉強中ということだと理解してますが、Visual Studio との相性の問題で動かないことの解決に時間と労力を費やすのは無駄ですし、SQL Server で勉強してから MySQL に進んだ方が結局は早そうですので。
sad

2020/10/30 06:37

申し訳ございません。SQLServerを使用していたところ、上司に以前使っていたデータベースを利用できる方法でまずやってくれと指示を受け、MySQLにしました(外部のDBの利用方法を学ぶため)。前回いただいた回答は学習面、そしてこれから実務で使用する際に役立つと思います。ありがとうございます。 MySQL for Visual Studio 1.2 Connector NET 8.0 この二つはわかりました、、MySQLがわかりません。申し訳ございません。
sad

2020/10/30 06:44

ご指摘、ご提案ありがとうございます。 もしご指摘の通りにうまく動かないということになった場合はその旨を伝えてSQLServerに移行しようと思います。 とりあえず今は指示頂いたことを全力で終わらせたいと考えています。
guest

回答1

0

ベストアンサー

データベースから取得したデータを、vbhtmlに表示したい

普通に ASP.NET MVC アプリを作るならそこに JSON が出てくることはないです(見当違いの方向に進んでいます)。

View に渡すべきは List<Entity> 型のオブジェクトです。

Visual Studio の ADO.NET Entity Data Model で EDM を作り、それをベースに Controller の Action Method で Linq to Entities を使って List<Entity> オブジェクトを作り、それを View に渡すというのが普通のやり方です。

問題は MySQL for Visual Studio, Connector/NET と Visual Studio の相性で、古いバージョンのものはダメだったのですが、自分の環境の MySQL for Visual Studio 1.2.9, Connector/NET 8.0.19 と Visual Studio 2019 では問題なかったので、試してみてはいかがですか?

具体的な手順は、SQL Server の場合ですが、以下の記事の (1) ~ (10) を見てください。MySQL もほぼ同じ手順になります。

スキャフォールディング機能
http://surferonwww.info/BlogEngine/post/2017/07/23/creating-controller-and-view-in-mvc-using-scaffolding-function.aspx

以前作った簡単な MySQL のテーブルを使ったサンプルがありますので、それの画像を貼っておきます。

基になる MySQL の list テーブル

イメージ説明

Visual Studio で作成した EDM

イメージ説明

同時に自動生成されたコンテキストクラスと

イメージ説明

エンティティクラス

イメージ説明

スキャフォールディングで作った Controller (index 部分のみ) と

イメージ説明

それに対応する View

イメージ説明

結果

イメージ説明

もし、相性の問題で ADO.NET Entity Data Model で EDM を作れないという場合は、ADO.NET + Connector/NET を使って List<Entity> オブジェクトを作って View に渡してください。

MVCモデルの形で一連の流れを理解するために、スキャフォールディング等を利用せずにデータベースからデータを取得、表示をしようとしています。

Visual Studio の機能を利用しないでアプリを作るのは時間と労力の無駄です。理解したいなら、Visual Studio が作ったコードを見て理解するようにすべきです。

【追記】

下の 2020/11/02 09:59 の私のコメントで「後で回答欄に自分のプロジェクトの画像を貼っておきます」と言った件です。

質問者さんの場合は余計なものが入っています(その影響は分かりませんが)。バージョンも不明、設定も不明ですが、プロパティを見て比べてみてください。

MySql.Data

イメージ説明

MySql.Data.EntityFramework

イメージ説明

なお、自分の環境は MySQL とか Oracle などは入ってない Windows 10 Pro 64-bit の PC に、以下の記事のように MySQL 8.0.19 をインストールしています。

MySQL をインストールしました(その 3)
http://surferonwww.info/BlogEngine/post/2020/04/20/installation-of-mysql-on-new-desktop-pc.aspx

そうすると、MySql.Data, MySql.Data.EntityFramework は GAC にインストールされ、レジストリ, Program Files フォルダ, machine.config にも設定がなされます。

また、Visual Studio の拡張機能には MySQL for Visual Studio がインストールされます。

イメージ説明

そうすると、2020/10/30 17:43 のコメントで紹介した記事の「(2) 参照設定」のセクションのように参照を追加できるようになり。ADO.NET Entity Data Model を使って、上に紹介した記事の (1) ~ (10) のように EDM を生成できるはずです。

以上を読んでも解決できないということですと、ADO.NET Entity Data Model を使っての EDM の作成に関しては、自分はこれ以上お手伝いできることはなさそうです。

上の回答で、

相性の問題で ADO.NET Entity Data Model で EDM を作れないという場合は、ADO.NET + Connector/NET を使って List<Entity> オブジェクトを作って View に渡してください。

と書きましたが、その前に Entity Framework を使って List<Entity> オブジェクトを作れないか調べてみるのがよさそうです。

先のスレッド https://teratail.com/questions/300897 で行ったように、コンテキストクラス、エンティティクラス、web.config の接続文字列(MySQL 用の)を自分で書いて実装し、上の回答のコントローラーの画像で示したように db.Entity.ToList で List<Entity> オブジェクトを作れないか試してみることをお勧めします。

それがダメなら、ADO.NET + Connector/NET を使って List<Entity> オブジェクトを作るということにせざるを得ないと思います。

投稿2020/10/30 07:32

編集2020/11/02 01:25
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

sad

2020/10/30 07:39

ありがとうございます。早速試してみます! 何か問題があった場合質問させていただくかもしれません。 その際はよろしくお願いいたします。
sad

2020/10/30 08:29

すいません、、リンク先を参考に進めようとしたのですが、最初のADO作成から躓いています。EntityFrameworkの選択?画面で止まってしまって進みません(画像を本文に追加します)。これがMySQLをおすすめしない理由なのでしょうか?調べてはみたのですが、解決しませんでした。
sad

2020/11/02 00:39

返事が遅くなり申し訳ありません。 EntityFrameworkが無かったのでURL先に従って参照設定したのですが結果がかわりませんでした(画像追記しています)。やはり相性がわるいということでしょうか? 何度も申し訳ございません。
退会済みユーザー

退会済みユーザー

2020/11/02 00:59

> やはり相性がわるいということでしょうか? そこは分かりませんが、回答に追加された画像を見る限り ADO.NET Entity Data Model が使える自分のケースとはかなり違うようです。後で回答欄に自分のプロジェクトの画像を貼っておきます。
sad

2020/11/02 02:09

とても丁寧に細かいところまでご回答、ご教授ありがとうございます。 これ以上この質問を開放するのもどうかと思うので、一旦閉じます(時間がかかりそうなので)。 ここまで教えていただいたことを実行次第、結果を追記し場合によっては別途質問を作成させていただこうと考えております。その際も時間に余裕がありましたらどうかよろしくお願いいたします。
sad

2020/11/04 02:07

こっそりと追記いたします。 SQLServerで試してみたところ上手くいきました。スキャフォールディングはMySQLは難しいみたいです、、。 Viewのテンプレートを利用しながら、自力でDB接続の設定をしてList<Entity>を返すことで一連の流れを行うことが出来ました。 ありがとうございました。
退会済みユーザー

退会済みユーザー

2020/11/04 03:06

MySQL を諦めて SQL Server にする前に、上の回答にも書きましたが、先のスレッド https://teratail.com/questions/300897 で行ったように、コンテキストクラス、エンティティクラス、web.config の接続文字列(MySQL 用の)を自分で書いて実装し、上の回答のコントローラーの画像で示したように db.Entity.ToList で List<Entity> オブジェクトを作れないか試してみることをお勧めします。
sad

2020/11/04 04:59

ありがとうございます。 web.configに接続文字列を書いて、それをdb.Entity.ToListで利用するとList<Entity>オブジェクトができる、、の解釈で間違いないでしょうか? 現状は、modelクラスとDAOクラスを作成し、DAOでMySQLの接続文字列を作成し接続、modelでSQL実行→List<Entity>にデータを格納、Controller→Viewに渡す、といった流れでできています(遠回りですが)。 上記の件、時間を作って試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問