Commandオブジェクト

■ データソースごとのクラス

接続の種類 クラス名
System.Data.SqlClient SqlCommandクラス
System.Data.OracleClient OracleCommandクラス
System.Data.OleDb OleDbCommandクラス
System.Data.Odbc OdbcCommandクラス
Commandオブジェクトの種類

 SqlCommandクラスは、SQL文などを使ってデータベースに問い合わせをするためのクラスです。SqlConnectionオブジェクトとつなげて利用します。

■ 主なプロパティ

プロパティ名 概要
CommandText データベースに対して実行するSQLステートメントまたは、ストアドプロシージャを取得・設定する
Connection データベースに問い合わせる際に利用するSqlConnectionオブジェクトを取得・設定する
Transaction SQL分などを実行するためのトランザクションを行うオブジェクトを取得・設定する
SqlCommandの主なプロパティ

■ 主なメソッド

メソッド名 概要
ExecuteNonQuery 接続したデータベースに対してINSERT、UPDATE、DELETE文などを実行し、影響を受けた行数を返す
ExecuteReader 接続したデータベースに対してSELECT文を実行し、その結果をSqlDataReaderオブジェクトとして返す
SqlCommandの主なメソッド

 データベースに対して問い合わせをするにはこのクラスのオブジェクトを使用します。インスタンス生成時にConnectionオブジェクトと、実行するSQL文を指定します。

○ プロジェクト

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

プロジェクトの種類 コンソール アプリケーション
プロジェクト名 CommandTest

サンプルダウンロード

○ プログラム

 Mainメソッドに次のように記述してください。

Program.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Data.SqlClient;
  7. namespace CommandTest
  8. {
  9.  class Program
  10.  {
  11.   static void Main(string[] args)
  12.   {
  13.    //接続文字列
  14.    string constr = @"Data Source=(LocalDB)¥v11.0;AttachDbFilename=C:¥Work¥Books.mdf;Integrated Security=True;Connect Timeout=30";
  15.    //SqlConnectionオブジェクトを生成
  16.    SqlConnection con = new SqlConnection(constr);
  17.    //追加する情報を入力
  18.    Console.WriteLine("登録するユーザー情報を入力してください。");
  19.    Console.Write("ID:");
  20.    int id = Int32.Parse(Console.ReadLine());
  21.    Console.Write("ユーザー名:");
  22.    string username = Console.ReadLine();
  23.    Console.Write("パスワード:");
  24.    string password = Console.ReadLine();
  25.    Console.Write("氏名:");
  26.    string name = Console.ReadLine();
  27.    //入力した情報をもとにSQL文を作成
  28.    string sql = "INSERT INTO Users VALUES(" + id + ", '" + username + "', '" + password + "', N'" + name + "')";
  29.    //SqlCommandオブジェクトを生成
  30.    SqlCommand cmd = new SqlCommand(sql, con);
  31.    //実行予定のSQL文を表示
  32.    Console.WriteLine("実行するSQL文:{0}", cmd.CommandText);
  33.    //データベースを開く
  34.    con.Open();
  35.    //SQL文を実行する
  36.    int ret = cmd.ExecuteNonQuery();
  37.    //変更のあった行数を表示する
  38.    Console.WriteLine("変更のあった件数:{0}", ret);
  39.    //データベースを閉じる
  40.    con.Close();
  41.    Console.ReadLine();
  42.   }
  43.  }
  44. }

○ 実行結果

登録するユーザー情報を入力してください。
ID:4
ユーザー名:tanaka
パスワード:tpass
氏名:田中
実行するSQL文:INSERT INTO Users VALUES(4, 'tanaka', 'tpass', '田中')
変更のあった件数:1

○ 解説

 今回はUsersテーブルにデータを追加するプログラムです。21~29行目では、追加するデータを入力しています。入力したデータをもとに32行目でSQL文を作成しています。今回はレコードを追加するのでINSERT文を作成します。このようにC#プログラムの中でSQL文は文字列として扱います。

 35行目でSqlCommandオブジェクトを生成しています。インスタンス生成時にSQL文とSqlConnectionオブジェクトを渡すと、それぞれをプロパティにセットした状態でオブジェクトを生成します。38行目ではセットしたSQL文を、CommandTextプロパティを参照して表示しています。

 44行目では、SQL文を実行しています。この命令文の前まででデータベースを接続しておく必要があります。前の行(41行目)でSqlConnectionオブジェクトのOpenメソッドを呼び出して接続してあります。ExcecuteNonQueryメソッドは影響のあった行数を返すので、それをret変数に格納し、47行目で表示しています。一連の処理が終わったら50行目にもあるようにSqlConnectionオブジェクトのCloseメソッドを使ってデータベースへの接続を閉じます。

データベースとCommandオブジェクトの関係
データベースとCommandオブジェクトの関係

○ データベースの確認

INSERT文を実行したのでUsersテーブルにデータが追加されているはずです。Visual Studioのサーバー エクスプローラーより確認してみましょう。次の図のように「データ接続」―「Books.mdf」―「テーブル」と展開してテーブルの一覧を表示させ、Usersを右クリックして表示されるメニューの「テーブルデータの表示(S)」をクリックします。

テーブルのデータを表示する
テーブルのデータを表示する

 すると次の図のようにデータの一覧が表示されます。先ほど入力したデータが登録されていることを確認できます。

追加したデータが表示される
追加したデータが表示される

前へ   次へ