- PR -

ADO.NETのレコードの追加と削除

1
投稿者投稿内容
QnA
常連さん
会議室デビュー日: 2005/01/20
投稿数: 23
投稿日時: 2005-08-11 20:17
こんにちは。お世話になっております。

もしご存知の方がいましたらご教授ください。

現在ADO.NET(C#)で、Jet 4.0 OLE DB Providerを使い、MDBファイルへ
データの追加と、削除を行おうとしています。

DataSetにテーブル(25列)を作り、13行ずつレコードの追加と削除を
行おうとしています。

一回目の、13レコードの追加をAとします。
二回目の、13レコードの追加をBとします。

次に、Aで追加した13レコードを削除します。
次に、三回目の13レコードの追加Cを行います。

DataSetはBの後にCが追加されますが
DataSet.Clear();
DataAdapter.Fill(DataSet, "テーブル");を実行すると

DataSet内容が
Cで追加したレコードが、Bで追加したレコードの後に追加されず、
Bで追加したレコードの4行目以降に追加され
Bの4行目以降のレコードが、Cの後にきます。

Aで追加したレコードの削除を、Access2000で削除すると、上記のような
レコードの順番が、変わるとゆう事はありません。

レコードの順番が変わる原因がわかりません
ご存じの方がいましたら、ご教授してください。
よろしくお願いします。

ちなみにレコードの追加は
  DataRow nRowL;
  for (int i = 0; i <= 12; i++)
  {
   nRowL = DataSet.Tables["テーブル"].NewRow();
   nRowL["フィールド名"] = "***";
  ・
    ・
    ・ 
   DataSet.Tables["テーブル"].Rows.Add(nRowL);
}
   DataAdapter.Update(DataSet, "テーブル");

レコードの削除は
  for (int i = 0; i <= 12; i++)
  {
   DataSet.Tables["テーブル"].Rows[i].Delete();
}
  DataAdapter.Update(DataSet, "テーブル");
で行っています。
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-08-11 21:07
ご質問の「順序が変わる理由」はわかりませんが、
一般にRDBではレコードの順序は保障されていないので、
結果が何らかの順序になることが必要であれば
・取得時に ORDER BY を用いる
・取得後に DataView を作る
などの手段で、値に基づいた順序付けを行う必要があります。

#すなわち、「そんなこと気にしないほうがいいですよ」が言いたい
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2005-08-12 05:58
Accessのテーブルにオートナンバー型のフィールド(主キー)を追加して
DataTableの主キーのフィールドをオートナンバー型にしてから行を
追加したらどうでしょうか。以下は、VB.NETの例です。

Dim dt As DataTable = ds.Tables("MyTable")
Dim dc As DataColumn = dt.Columns("MyPrimaryKey")
dc.AutoIncrement = True
dc.AutoIncrementSeed = 1
dc.AutoIncrementStep = 1
dt.NewRow()
....
da.Update(dt)
_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
QnA
常連さん
会議室デビュー日: 2005/01/20
投稿数: 23
投稿日時: 2005-08-12 12:36
にしざきさん、Accessさん

お世話になります。
早速の返答ありがとうございます。

レコードの順序とは、保障されていないのですね
私は、追加順に並ぶものだと思っていました。
(勉強不足ですみません)

対策として、にしざきさんのORDER BYをDataAdapterのSelectCommand
に追加しました。

Accessさんの、オートナンバー型のフィールド(主キー)を追加
して、試してみましたが、レコードの順番は変わってしまいました。

ちなみに、Access2000でレコードを削除しても
レコードの順番は、変わります。
1

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