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
スポンサーリンク