2016年9月24日

SqlCommand.ExecuteScalar メソッドを使って結果を取得する。



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



スポンサーリンク