SQL Serverにクエリをかけて、その結果を得たいといった場合があります。
例えば、ある条件に当てはまるレコードの件数を知りたいといった場合です。
そういうときは、SqlCommand.ExecuteScalar メソッドを使います。
ちなみに今回も、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#
int cnt = 0; 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(); cmd.Connection = cnn; cmd.CommandType = System.Data.CommandType.Text; cmd.CommandText = "SELECT COUNT([ID]) FROM [T_Animals] WHERE [TYPE] = '犬'"; // ExecuteScalarで結果セットの最初の行にある最初の列を取得する if (cmd.ExecuteScalar() != null) { cnt = (int)cmd.ExecuteScalar(); } Console.WriteLine("件数:" + cnt.ToString()); cmd.Dispose(); cnn.Close();
■VB
Dim cnt As Integer = 0 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() cmd.Connection = cnn cmd.CommandType = System.Data.CommandType.Text cmd.CommandText = "SELECT COUNT([ID]) FROM [T_Animals] WHERE [TYPE] = '犬'" 'ExecuteScalarで結果セットの最初の行にある最初の列を取得する If cmd.ExecuteScalar() Is Nothing Then cnt = Convert.ToInt32(cmd.ExecuteScalar()) End If Console.WriteLine("件数:" & cnt.ToString) cmd.Dispose() cnn.Close()
上の例では、[TYPE]が犬に当てはまるレコードの件数を取得しています。
ExecuteScalarは、結果セットの最初の行にある最初の列を返しますが、もし結果セットが空の場合はnull(VBの場合Nothing)になりますので注意が必要です。
■結果
件数:3
スポンサーリンク