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#
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
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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



スポンサーリンク



Follow Me on Pinterest
Clip to Evernote