Commandオブジェクト

 System.Data.SqlClient名前空間: 「SqlCommand」
 System.Data.OracleClient名前空間:「OracleCommand」
 System.Data.OleDb名前空間:  「OleDbCommand」

 SqlCommandクラスは、データベースにおいて、命令を実行させるためのオブジェクトです。このオブジェクトを使って、データベースからデータを抽出したり、書き込んだりします。

■ 主なプロパティ

■ CommandTextプロパティ

 データソースで実行するTransact-SQLステートメントまたは、ストアドプロシージャを取得または設定します。

■ Connectionプロパティ

 このオブジェクトで使用するSqlConnectionオブジェクトを取得または設定します。

■ Transactionプロパティ

 SqlCommandを実行するSqlTransactionオブジェクトを取得または設定します。

■ 主なメソッド

■ ExecuteNonQueryメソッド

 接続したデータベースに対してTransact-SQLステートメントを実行し、影響を受けた行数を返します。

■ ExcuteReaderメソッド

 CommandTextをConnectionに送信し、結果セットであるSqlDataReaderオブジェクトを生成します。

 図2-1にもあるように、このCommandオブジェクトはConnectionオブジェクトを利用します。CommandクラスはSQLステートメントなど命令をあらわすオブジェクトになります。実行する際にもConnectionオブジェクトを通して実行し、その結果、影響を与えた行数を返したり、データを抽出するオブジェクトを作成したりします。

 コマンドを実行する際にはExecute~メソッドを使います。その際には、コネクションオブジェクトを使って、データベースと接続しておく必要があります。

○ プロジェクト

 プロジェクトを作成して確認してみましょう。まずは、INSERT文を実行してみましょう。

プロジェクトの種類 Windows フォーム アプリケーション
プロジェクト名 CommandTest1

サンプルダウンロード

○ フォームデザイン

 次の図のようにコントロールを配置してください。

コントロールの配置例
コントロールの配置例

○ プログラム

 「接続」ボタンをクリックしたときのイベントプロシージャの記述をしてください。

Form1.vb

  1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.  '接続文字列を作成する
  3.  Dim conString As String = _
  4.   "Data Source=.;AttachDbFilename=C:¥Work¥Books.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
  5.  'コネクションオブジェクトを生成する
  6.  Dim con As New SqlClient.SqlConnection(conString)
  7.  'SQL文を生成する
  8.  Dim sql As String = "UPDATE M_ユーザー SET パスワード='nagura' WHERE ユーザーID='001'"
  9.  'コマンドオブジェクトを生成する
  10.  Dim cmd As New SqlClient.SqlCommand(sql, con)
  11.  'データベースに接続する
  12.  con.Open()
  13.  'コマンドを実行する
  14.  Dim line As Integer = cmd.ExecuteNonQuery()
  15.  '情報を表示する
  16.  Me.TextBox1.Text = cmd.CommandText
  17.  Me.TextBox2.Text = cmd.Connection.ToString()
  18.  Me.TextBox3.Text = line
  19.  'データベースを閉じる
  20.  con.Close()
  21. End Sub

○ 実行結果

実行結果
実行結果

 今回のサンプルはコードで接続オブジェクトと、コマンドオブジェクトを作って利用しました。プログラムの内容は、先回のサンプルのデータベースに接続する記述に加えて、コマンドオブジェクトを生成して、データベースに接続してから実行しました。実行した結果、何行の影響が出たのかも表示されています。データベース本体もデータが更新されているかどうかを確認してみましょう。

 データベースに対して何か処理をしたい場合は、ConnectionオブジェクトのOpen()メソッドを使って接続し、処理を行います。そして、終了したら、ConnectionオブジェクトのClose()メソッドを使って、切断します。

 では、このサンプルと同じものを今度はデザイナを使って作成してみましょう。
 ※ 補足1を参考にして、「SqlCommand」コントロールを表示させてください。

○ プロジェクト

プロジェクトの種類 Windows フォーム アプリケーション
プロジェクト名 CommandTest2

サンプルダウンロード

○ フォームデザイン

 「CommandTest」プロジェクトと同じようにコントロールを配置してください。今回は、デザイン画面でCommandオブジェクトを作成します。Connectionコントロールと、Commandコントロールを配置してください。

コントロールの配置例
コントロールの配置例

 コンポーネントトレイに配置されるので、次のようにプロパティを設定しましょう。

コントロール プロパティ名
SqlConnection1 ConnectionString Data Source=.¥;AttachDbFilename="C:¥Work¥Books.mdf";Integrated Security=True;Connect Timeout=30;User Instance=True
SqlCommand1 Connection 既存 ― SqlConnection1
設定内容

 CommandオブジェクトにSQLステートメントを関連付けます。CommandTextプロパティを編集します。次の図で示されているボタンをクリックしてください。

プロパティ編集
プロパティ編集

 次の図のようなウィンドウでSQLステートメントを生成できます。「M_ユーザー」を選択して「追加」をクリックしてください。そして「閉じる」ボタンで閉じます。

テーブルの追加
テーブルの追加

 今回は、更新用のSQLステートメントを生成します。次の図のように右クリックして出てくるメニューの中から「クエリ の種類の変更」―「更新」をクリックしてください。

更新を選択
更新を選択

 すると次の図のようにステートメントが変わります。

SQLステートメントの確認
SQLステートメントの確認

 次に、次の図の順序で変更する列名を選択し、変更する値を入力してください。

データを指定
データを指定

 あとは、変更したい列の条件を指定しますので、次の図のように条件を追加します。そして「OK」ボタンをクリックします。

条件を指定
条件を指定

○ プログラム

 「接続」ボタンをクリックしたときのイベントプロシージャの記述をしてください。

Form1.vb

  1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.  'データベースに接続する
  3.  Me.SqlConnection1.Open()
  4.  'コマンドを実行する
  5.  Dim line As Integer = Me.SqlCommand1.ExecuteNonQuery()
  6.  '情報を表示する
  7.  Me.TextBox1.Text = Me.SqlCommand1.CommandText
  8.  Me.TextBox2.Text = Me.SqlCommand1.Connection.ToString()
  9.  Me.TextBox3.Text = line
  10.  'データベースを閉じる
  11.  Me.SqlConnection1.Close()
  12. End Sub

○ 実行結果

実行結果
実行結果

 今回は、デザイナでCommandオブジェクトを作成し、設定しました。クエリビルダを使うことにより、SQL文を詳しく知らなくても生成することができます。次に、「接続」ボタンをクリックしたときの処理を記述しますが、ここでは先ほどの例と違って、すでにオブジェクトはできあがっていますので、すぐに利用する記述をするだけです。

前へ   次へ