SqlCommand.ExecuteScalarでレコード数取得

SqlCommandオブジェクトのExecuteScalarメソッドを使って、表のレコード数を取得するプログラムを作成します。

VB 2008 [SQL Server 2008版]
サンプル
  • フォームにボタンとラベル2つを貼り付け、ラベル2に、商品マスター表の全レコード数を表示する
  • 検索ボタンを押下すると、SqlCommandオブジェクトのExecuteScalarで商品マスター表の全レコード数を取得する
  • 【注意】接続文字列は、アプリケーション構成ファイルapp.configから取得するようにしてください。
販売管理データベース(商品マスター表
Key 列名 データ型 NULLを許容
商品コード nchar(5) しない
商品名称 nvarchar(30) しない
販売単価 int しない

VB 2008 [MDB版]
VB.NET [MDB版]
Option Strict On
Imports System.Data.SqlClient

Public Class Form1

    '*********************************************************************
    ' 検索ボタン押下処理
    '*********************************************************************
    Private Sub Button1_Click( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button1.Click

        Try
            Using con As New SqlConnection
              Using cmd As New SqlCommand
                  ' 接続文字列の設定(SQL Server 2008 Express Edition)
                  con.ConnectionString = _
                        "Data Source=.\SQLEXPRESS;" & _
                        "AttachDbFilename=" & _
                        "'C:\Program Files\Microsoft SQL Server" & _
                        "\MSSQL10.SQLEXPRESS2008\MSSQL\DATA" & _
                        "\販売管理データベース.mdf';" & _
                        "Integrated Security=True;" & _
                        "Connect Timeout=30;" & _
                        "User Instance=True"

                  ' SqlCommand.Connectionプロパティの設定
                  cmd.Connection = con

                  ' DB接続
                  con.Open()

                  ' SQL文の設定
                  cmd.CommandText = _
                      "SELECT COUNT(*) FROM 商品マスター表"

                  ' 全レコード数を取得しラベルに表示
                  Me.Label2.Text = CStr(cmd.ExecuteScalar())
              End Using
            End Using
        Catch ex As Exception
            ' 例外が発生した時の処理
            MessageBox.Show(ex.ToString)
        End Try

    End Sub

End Class

単一の値を取得

ExecuteScalarは、最初の行の最初の列を返すので、単一の値を取得するSQL文を書けば、様々な値を求めることができます。

たとえば、最大値を求める時は、SQL文を"SELECT MAX(列名) FROM 表名" と記述します。

 ' 最大値を求めるSQL文の設定
 cmd.CommandText = "SELECT MAX(販売単価) FROM 商品マスター表"
 ' 一番高い販売単価を求める
 Dim max As Integer  = cmd.ExecuteScalar()