環境:
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を入れても結果が変わりませんでした
回答1件
あなたの回答
tips
プレビュー