続いてレコードの削除について見ていこう。先にも少し触れたように、レコードの削除はdelete文により行う。基本的な構文は次のとおりだ。
delete from テーブル名 where 削除するレコードの条件
例えば、publishersテーブルからpub_idカラムが「9900」のレコードを削除するためのSQL文は次のようになる。
delete from publishers where pub_id = '9900'
where句(where以降の部分)の条件の記述方法はselect文と同じで、基本的には「カラム名 = '値'」の形式で指定する。なお、うっかりwhere句を書き忘れてこれを実行すると、テーブルの全レコードが容赦なく消されてしまうので注意が必要だ。
delete文を使用したサンプル・プログラムは次のようになる。
// delete.cs
using System;
using System.Data.SqlClient;
public class Delete {
public static void Main(string[] args) {
if (args.Length != 1)
return;
string connStr = "Server=(local)\\NetSDK;"
+ "Trusted_Connection=yes;"
+ "database=pubs";
string sqlStr = "DELETE FROM publishers WHERE pub_id = @PubId";
SqlConnection conn = new SqlConnection(connStr);
SqlCommand cmd = new SqlCommand(sqlStr, conn);
cmd.Parameters.Add("@PubId", args[0]);
conn.Open();
int num = cmd.ExecuteNonQuery();
Console.WriteLine(num);
conn.Close();
}
}
// コンパイル方法:csc delete.cs
このサンプル・プログラムでは、コマンドラインのパラメータで指定されたpub_idを持つレコードを削除する。
処理内容は先ほどのinsert文を使用したサンプル・プログラム(paramins.cs)とほとんど同じだ。この場合にもSQL文の実行結果はないので、ExecuteNonQueryメソッドを使用すればよい。
レコードの検索、追加、削除と来れば、残るデータベースの基本操作はレコードの更新である。レコードの更新では、既存のレコードを条件により指定し、そのレコードの特定のカラムの値を別の値により置き換える。SQLではこの操作はupdate文により行う。その基本的な構文は次のようになっている。
update テーブル名 set カラム名 = '値' where 更新するレコードの条件
実際の記述例は次のようになる。
update publishers
set pub_name = '@IT System Insider' where pub_id = '9990'
delete文と同様に、where句なしで実行するとテーブルの全レコードが更新の対象となってしまうので注意が必要だ。delete文の場合もそうだが、where句の条件で主キーにより1つのレコードを対象として削除や更新を行うというやり方が一般的である。
delete文の場合とほとんど同じだが、念のためupdate文を使用したサンプル・プログラムを示しておこう。
// update.cs
using System;
using System.Data.SqlClient;
public class Update {
public static void Main(string[] args) {
if (args.Length != 2)
return;
string connStr = "Server=(local)\\NetSDK;"
+ "Trusted_Connection=yes;"
+ "database=pubs";
string sqlStr = "UPDATE publishers SET pub_name = @PubName "
+ " WHERE pub_id = @PubId";
SqlConnection conn = new SqlConnection(connStr);
SqlCommand cmd = new SqlCommand(sqlStr, conn);
cmd.Parameters.Add("@PubId", args[0]);
cmd.Parameters.Add("@PubName", args[1]);
conn.Open();
int num = cmd.ExecuteNonQuery();
Console.WriteLine(num);
conn.Close();
}
}
// コンパイル方法:csc update.cs
このサンプル・プログラムで行っているように、名前付きパラメータはSQL文中で値が必要となる場所ならどこにでも記述することができる。ちなみに、update文はwhere句で指定された条件にマッチするレコードがない場合にでもエラーとはならず、処理結果が0件となるだけである。これはdelete文も同様だ。
前回と今回で、デーベースの基本操作である検索、挿入、削除、更新の4つについて、.NETデータ・プロバイダを用いたプログラミング方法を紹介してきた。あとはSQLさえマスターしていれば、基本的なデータベース処理は記述できることになる。データベースをオープンしてSQL文を発行するというこれらのプログラミングは、従来からあるシンプルで直接的なやり方である。しかし「接続型」とも呼ばれる.NETデータ・プロバイダのクラスではレコードを前方向にのみしか読み取れず、検索結果を並べ替えたり、一部分を修正してデータベースに書き戻したりといった処理が面倒そうだと感じた方がいるかもしれない。あるいは、データベースのテーブルはもともと表形式であるので、それを2次元配列のように処理できる仕組みがあれば便利なのにと思った方もおられるだろう。
ADO.NETには、そういった機能を提供するためのクラス・ライブラリが用意されている。ADO.NETのコアともいえる「データセット」である。次回からはこれについて解説する。
Copyright© Digital Advantage Corp. All Rights Reserved.