- PR -

DataRowに主キーが複数のDataTableの特定の行を取得したい

1
投稿者投稿内容
yem
常連さん
会議室デビュー日: 2008/01/05
投稿数: 37
投稿日時: 2008-01-12 19:56
お世話になります。

テーブルのある行を削除したいと思っています。
主キーが一つのDataTableであれば、

string tableName;
DataSet ds;
DataAdapter da:
のときに、

ds.Tables["tableName"].PrimaryKey
= new DataColumn[] { ds.Tables[tableName].Columns[columnName] };
DataRow row = ds.Tables["tableName"].Rows.Find(idBox.Text);

として、DataRowに特定のデータ行をセットして、
row.Delete();
da.Update(ds, "tableName");
というように、データを削除できますが、

主キーが複数のときに、似た方法で行を削除したいのです。
この場合、DataRowに特定のデータ行をセットするには、
どうしたらよいのでしょうか?

よろしくお願いします。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2008-01-12 21:16
> DataRow row = ds.Tables["tableName"].Rows.Find(idBox.Text);

.Find(Object)のかわりにFind(Object[])を使う

http://msdn2.microsoft.com/ja-jp/library/system.data.datarowcollection.find(VS.80).aspx
yem
常連さん
会議室デビュー日: 2008/01/05
投稿数: 37
投稿日時: 2008-01-13 17:35
ありがとうございます。

object[] findVals = new object[2];
findVals[0] = Convert.ToInt32(idBox.Text);
findVals[1] = Convert.ToInt32(yearBox.Text);

SqlCommand cmd = new SqlCommand(
"DELETE FROM " + tableName +
" WHERE ID = @ID AND Year = @Year", cn);
da.DeleteCommand = cmd;
cmd.Parameters.AddWithValue("@ID", findVals[0]);
cmd.Parameters.AddWithValue("@Year", findVals[1]);

DataRow row = ds.Tables[tableName].Rows.Find(findVals);
cn.Open();
cmd.ExecuteNonQuery();

といった方法で、やっと行の特定と、削除とができました。

このとき、
row.Delete();
da.Update(ds, tableName);
ともに、利用しないのですが、問題ないのでしょうか?
1

スキルアップ/キャリアアップ(JOB@IT)