SQL文を使ってデータを取得する
前回のプログラムでは、SQL文を使わないで、データベースから値を取得しました。
今回は、データベース操作で一般的に使われるSQL文を使って、値を取得してみましょう。
Database.SqlQuery()メソッドの使い方
SQL文を使うには、Database.SqlQuery()メソッドを使います。
Database.SqlQuery(Of 型)(SQLクエリ文字列、パラメーター)
型 | クエリから返される列の名前に一致するプロパティを持つ任意の型 |
SQLクエリ文字列 | ダブルクォーテーションで囲ったSQLクエリ文字列 |
パラメーター | SQLクエリ文字列に適用するオブジェクト |
Database.SqlQuery()メソッドの詳しい内容は、以下のマイクロソフトの公式サイトを参照してください。
データベース操作モデルの修正
前回のプログラムからの変更点は、8行目だけです。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Imports System.Web.Mvc Public Class DbModel Function GetEmp() As List(Of Emp) Dim emp As List(Of Emp) Using db As New TestDbEntities emp = db.Database.SqlQuery(Of Emp)("select * from Emp").ToList End Using Return emp End Function End Class |
プログラムの実行結果は、前回と同様になります。
パラメーターを指定する
オプションのパラメーターを指定するには、オブジェクト型のSqlParameterクラスを使います。
SqlParameterクラスの詳しい内容は、以下のマイクロソフトの公式サイトを参照してください。
以下のサンプルプログラムは、SQLクエリにwhere句で条件を追加して、条件の値をSqlParameterを使って渡しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Imports System.Data.SqlClient Imports System.Web.Mvc Public Class DbModel Function GetEmp() As List(Of Emp) Dim emp As List(Of Emp) Using db As New TestDbEntities emp = db.Database.SqlQuery(Of Emp)("select * from Emp where Name like @p1;", New SqlParameter("@p1", "%山田%")).ToList End Using Return emp End Function End Class |
パラメーターが複数あった場合は、9行目を以下のように記述します。
1 |
emp = db.Database.SqlQuery(Of Emp)("select * from Emp where Name like @p1 and Address like @p2;", {New SqlParameter("@p1", "%山田%"), New SqlParameter("@p2", "%東京%")}).ToList |
また、パラメーターをオブジェクト型の配列として定義して、それを渡すこともできます。
パラメーターの数が増えてくると、以下のように記述する方がスッキリすると思います。
1 2 3 4 5 |
Dim param() As Object = { New SqlParameter("@p1", "%山田%"), New SqlParameter("@p2", "%東京%") } emp = db.Database.SqlQuery(Of Emp)("select * from Emp where Name like @p1 and Address like @p2;", param).ToList |