SqlCommand

SqlCommand の紹介

SqlCommand は実行するSQL文をカプセル化するクラスです。確立済みのデータベース接続を利用し、データベースへ命令を送信し実行結果を取得します。
コンストラクタには2つの引数を渡せます:SQLテキスト(cmdText)データベース接続オブジェクト(SqlConnection)

簡単なサンプル

事前にSQL Serverをインストールし、Articleテーブルを作成してサンプルレコードを1件挿入しておいてください。

private void button1_Click(object sender, EventArgs e)
{
    // 1. 接続文字列を定義
    string connectionString = "User ID=sa;pwd=qweqwe;initial catalog=DB;Data Source=.;";

    // 2. 接続オブジェクトを生成
    SqlConnection conn = new SqlConnection(connectionString);

    // 3. 実行するSQL文を定義
    string cmdText = "SELECT GETDATE(),count(1) FROM [DB].[dbo].[Article]";

    // 4. コマンドオブジェクトを作成、SQLと接続を紐付け
    SqlCommand command = new SqlCommand(cmdText, conn);

    conn.Open();    // データベース接続を開く
    // ExecuteScalar():SQLを実行し、結果セット【1行1列目】の値をobject型で返却

    object res = command.ExecuteScalar();

    MessageBox.Show(res.ToString());

    conn.Close();   // 接続を閉じる
}Code language: C# (cs)

SQL Server テーブル定義

CREATE TABLE Article(
    id INT PRIMARY KEY IDENTITY(1,1),
    Title NCHAR(10) NULL,
    AddTime NCHAR(10) NULL
);Code language: SQL (Structured Query Language) (sql)

主要メソッド:ExecuteScalar()

  • 集計クエリの実行:COUNT()MAX()MIN()SUM()
  • 単一値の取得。例:データベースの現在時刻、自動採番された主キーID

注意点:

  1. 戻り値の型は object なので、手動で型変換が必要です;
  2. クエリ結果が複数行・複数列の場合、1行1列目のデータだけ取得され、それ以外は破棄されます;
  3. 実行前に必ず conn.Open() で接続を開いてください。

推奨コーディング

using を使って接続リソースを自動解放し、閉じ忘れによる接続リークを防ぎます:

string connectionString = "User ID=sa;pwd=qweqwe;initial catalog=DB;Data Source=.;";
string cmdText = "SELECT GETDATE(),count(1) FROM [DB].[dbo].[Article]";
using (SqlConnection conn = new SqlConnection(connectionString))
{
    SqlCommand command = new SqlCommand(cmdText, conn);
    conn.Open();
    object res = command.ExecuteScalar();
    MessageBox.Show(res.ToString());
}
// usingブロックを抜けると自動的に接続が解放される。conn.Close()を手動で呼ぶ必要なしCode language: JavaScript (javascript)

補足

SqlCommand には他によく使われる実行メソッドが3つあります:

  1. ExecuteNonQuery():INSERT/UPDATE/DELETE を実行し、影響を受けた行数を返す
  2. ExecuteReader():DataReaderストリームを返し、複数の結果を1行ずつ読み取る
  3. ExecuteXmlReader():XML形式のデータを読み込む(利用頻度は低い)

これらの使い方については後続の講座で解説します。

SqlCommand

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です