パラメーターを使ってSQL Serverからデータを読み込む方法です。
ちなみに今回、SQL Serverにあらかじめ以下のようなテーブルを作成しています。
テーブル名:T_Animals
列名
[ID] [int] NOT NULL
[Name] [nvarchar](50) NULL
[Type] [nvarchar](50) NULL
格納されてるデータ
ID | Name | Type |
---|---|---|
1 | たま | 猫 |
2 | ピーター | うさぎ |
3 | トム | 猫 |
4 | お父さん | 犬 |
5 | ふてニャン | 猫 |
6 | プー | くま |
7 | ファーファ | くま |
8 | ラスカル | アライグマ |
9 | サトちゃん | 象 |
10 | チーバくん | 犬 |
11 | パトラッシュ | 犬 |
■C#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | string ConnectionString = string .Empty; ConnectionString = @"Data Source=localhost\MSSQLSERVER;Initial Catalog=TESTDB;Integrated Security=True" ; var cnn = new SqlConnection(ConnectionString); cnn.Open(); var cmd = new SqlCommand(); SqlDataReader dtr = null ; cmd.Connection = cnn; cmd.CommandType = System.Data.CommandType.Text; // データソースで実行するTransact-SQLステートメントを指定 cmd.CommandText = "SELECT [ID], [Name], [Type] FROM [T_Animals] WHERE [Type] = @Type" ; cmd.Parameters.Clear(); // パラメータ値を設定 cmd.Parameters.Add( "@Type" , System.Data.SqlDbType.NVarChar, 50).Value = "猫" ; dtr = cmd.ExecuteReader(); if (dtr.HasRows) { while (dtr.Read()) { Console.WriteLine( "{0},{1},{2}" , dtr[ "ID" ].ToString(), dtr[ "Name" ], dtr[ "Type" ]); } } dtr.Close(); cmd.Dispose(); cnn.Close(); |
■VB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | Dim ConnectionString As String = String .Empty ConnectionString = "Data Source=localhost\MSSQLSERVER;Initial Catalog=TESTDB;Integrated Security=True" Dim cnn = New SqlConnection(ConnectionString) cnn.Open() Dim cmd = New SqlCommand() Dim dtr As SqlDataReader = Nothing cmd.Connection = cnn cmd.CommandType = System.Data.CommandType.Text 'データソースで実行するTransact-SQLステートメントを指定 cmd.CommandText = "SELECT [ID], [Name], [Type] FROM [T_Animals] WHERE [Type] = @Type" cmd.Parameters.Clear() 'パラメータ値を設定 cmd.Parameters.Add( "@Type" , System.Data.SqlDbType.NVarChar, 50).Value = "猫" dtr = cmd.ExecuteReader() If dtr.HasRows Then While dtr.Read() Console.WriteLine( "{0},{1},{2}" , dtr( "ID" ).ToString(), dtr( "Name" ), dtr( "Type" )) End While End If dtr.Close() cmd.Dispose() cnn.Close() |
このParametersを使ってクエリに値を渡すことによって型チェックと検証の機能を実現しています。また、パラメーターの入力は実行可能なコードとしてではなくリテラル値として扱われますので、SQLインジェクションを防ぐことができます。
パラメーターの型は、実際のテーブルのフィールドの型に合わせます。
上の例では、[Type]がnvarchar(50)ですので、
1 | cmd.Parameters.Add( "@Type" , System.Data.SqlDbType.NVarChar, 50).Value = "猫" ; |
SqlDbTypeについては、SqlDbType 列挙体 (System.Data)をご覧ください。
結果はこのようになります。
1 2 3 | 1,たま,猫 3,トム,猫 5,ふてニャン,猫 |
スポンサーリンク