- PR -

追加columnの保存

1
投稿者投稿内容
solt
会議室デビュー日: 2003/08/12
投稿数: 14
投稿日時: 2003-09-25 00:44
DataSet = dssi1
Table = bssi

private void Form6_Load(object sender, System.EventArgs e)
{
oleDbDataAdapter1.Fill(dssi1, "bssi");

dssi1.bssi.Columns.Add(System.DateTime.Now.ToShortDateString(),
typeof(string));
for (int i = 0; i < dssi1.bssi.Rows.Count; i++)
{
dssi1.bssi.Rows[i][System.DateTime.Now.ToShortDateString()] = " ";
}
oleDbDataAdapter1.Update(dssi1, "bssi");
}
このようにFormを開いた時点で翌日の列を追加しようしているんですが
追加された列が保存できません。
oleDbDataAdapter1.Update(dssi1, "bssi");
これだけでは追加した列は保存できないのでしょうか?
ご意見お願いします。
ぴで
大ベテラン
会議室デビュー日: 2002/10/10
投稿数: 123
お住まい・勤務地: 東京
投稿日時: 2003-09-25 01:31
DBのテーブルにカラムを追加しようとしているのでしょうか?
そうであればoleDbDataAdapter1.Updateではできないと思います。
OracleであればALTER TABLEコマンドを発行するか、
プロシージャを作成して呼び出すなどしなければなりません。

そもそもテーブルに作成できるカラム数には制限がありますから、
日々増えるような項目はカラムではなく、レコードとして追加するように
テーブルのデザインを変更したほうがよいと思います。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-09-25 11:11
引用:

SK2さんの書き込み (2003-09-25 00:44) より:

oleDbDataAdapter1.Update(dssi1, "bssi");
これだけでは追加した列は保存できないのでしょうか?


 OleDbDataAdapter1の、UpdateCommand, InsertCommand, DeleteCommandを設定しなければ、Updateメソッドは動きません。このメソッドは、各行が持っている変更情報によって、これらのコマンドを呼び出します。

 で、“列”の追加ですが、ぴでさんのおっしゃるとおり、列の追加は別のコマンドになるので、Updateメソッドでは反映させられません。もし実行するとしたら、DataTable.Rows.Count回数だけ実行されてしまいます。どうなるかわかりますよね?「列の名前が重複している」というエラーになります。

 また、列の数はOracleの場合、7で256列、9iで1000列だったかな?です。かつ、「列」の変更は「データ」の変更ではなく、「入れ物」の変更になるので、特殊です。普通、日ごとに列が増えるようなテーブルは作りません。


 「RDB研究館(http://www.mars.dti.ne.jp/~o-shin/)」こっちであれば、ある程度の設計のお手伝いはできますよ。
solt
会議室デビュー日: 2003/08/12
投稿数: 14
投稿日時: 2003-09-25 12:18
ご意見ありがとうございます。
Tableを変更して日付はRowに増やしていくことにしました。
こちらだとスムーズに作れました。
またご意見お願いします。
1

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