パラメーターを使って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#
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
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)ですので、
cmd.Parameters.Add("@Type", System.Data.SqlDbType.NVarChar, 50).Value = "猫";
としています。SqlDbTypeについては、SqlDbType 列挙体 (System.Data)をご覧ください。
結果はこのようになります。
1,たま,猫 3,トム,猫 5,ふてニャン,猫
スポンサーリンク