Entity Framework - 1 [Programming]
.NET Framework 上で動作させるアプリケーションでデータベースを扱うなら、大抵は ADO.NET を利用することになる。ただ、ADO.NET にもバリエーションがあり、微妙に異なる構文を覚えていかないとならない。
ADO.NET の古典的な利用方法はコレ。
Sub Main() Console.OutputEncoding = Text.Encoding.GetEncoding(932) Using table As New 駅データ.StationDataTable() Using adp As New 駅データTableAdapters.StationTableAdapter() adp.FillByLineCode(table, 11103) End Using For Each item In table Console.WriteLine(String.Format("{0}:{1}", item.station_cd, item.station_name)) Next End Using End Sub
アダプタ(StationTableAdapter)やらデータセット(StationDataTable)を別に定義することになるので、ソースコード自体は結構すっきりしている。
型付けされていない Data Set を使用するならこうなる。
Sub Main() Console.OutputEncoding = System.Text.Encoding.GetEncoding(932) Using table As New DataTable() Using con As New SqlClient.SqlConnection(My.Settings.駅データ) Using cmd As New SqlClient.SqlCommand("SELECT * FROM station WHERE line_cd=@code ORDER BY station_cd", con) cmd.Parameters.Add(New SqlClient.SqlParameter("@code", 11103)) Using adp As New SqlClient.SqlDataAdapter(cmd) adp.Fill(table) End Using End Using End Using For Each item In table.Rows Console.WriteLine(String.Format("{0}:{1}", item("station_cd"), item("station_name"))) Next End Using End Sub
Visual Basic では Using を使用するたびにネストが増えてしまうので、異様に深いネストが気になることがある。状況によっては SqlConnection や SqlCommand を使用しないことも可能だけれど、パラメータクエリを利用しようとするとどうしても長くなってしまう。
最後は Entity Framework。LINQ to Entity が利用できるのが最大の特徴。
Sub Main() Console.OutputEncoding = System.Text.Encoding.GetEncoding(932) Using ex = New 駅データEntities() Dim query = From x In ex.Stations Where x.line_cd = 11103 Order By x.station_cd For Each item In query Console.WriteLine(String.Format("{0}:{1}", item.station_cd, item.station_name)) Next End Using End Sub
SQL が完全に姿を消すので個人的に一番気に入ってはいるのだけれど、既存のシステムのバージョンアップのような場合にはなかなか適用するのが難しい。
コメント 0