C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: 登録したいデータが末尾のデータだけ登録されるエラー


(過去ログ 47 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■25305 / inTopicNo.1)  登録したいデータが末尾のデータだけ登録されるエラー
  
□投稿者/ ぽっち (59回)-(2008/09/17(Wed) 14:18:52)

分類:[ASP.NET (C#)] 

こんにちは。お世話になっております。
現在、VS2005で言語は、C#とASP.NETを使って開発をしているのですが、
エラーが起きて困っております。
したいこととしては(例)のような事をしようとしているのですが、エラーとして、最後に登録する7人目のデータが
7人分のデータを上書きして登録してしまうのです。つまり、7件とも同じ人間のデータで格納されてしまうのです。

(例)7人分の住所などのデータをList型のtempsにループ処理で格納した後、
データバインドで登録させるデータを表示させる。


問題のソースは、下記の通りです。

for (int i = 0; i < dt.Rows.Count; ++i )
{
Detail.CD = (string)ConvertUtility.DBNullToNull(dt.Rows[i]["CD"]);
Detail.Name = (string)ConvertUtility.DBNullToNull(dt.Rows[i]["Name"]);
Detail.address = (string)ConvertUtility.DBNullToNull(dt.Rows[i]["address"]);
Detail.mail = (string)ConvertUtility.DBNullToNull(dt.Rows[i]["mail"]);
Detail.zipcode = (string)ConvertUtility.DBNullToNull(dt.Rows[i]["zipcode"]);
Detail.mobile = (string)ConvertUtility.DBNullToNull(dt.Rows[i]["mobile"]);
Detail.tel = (string)ConvertUtility.DBNullToNull(dt.Rows[i]["tel"]);
Detail.favorite1 = (string)ConvertUtility.DBNullToNull(dt.Rows[i]["favorite1"]);
Detail.favorite2 = (string)ConvertUtility.DBNullToNull(dt.Rows[i]["favorite2"]);

sessiondata.AddDetail(Detail);

//明細情報をコレクションに設定
temps.Add(Detail);    //tempsはList型です。
}

//この後、tempsデータをデータバインドする。


デバックしていてわかったのは、登録したいデータの数分ループはします。
また登録したいデータが例えば3件だったら、1〜3人分データはきっちり走っていますが
1人目をtempsに格納した後([0]番目)、2人目をtempsに格納する時([1]番目)1人目のデータ([0]番目)を2人目のデータで上書きしているのが判明しています。3人目の場合は、1人目と2人目の中身を3人目のデータで上書きした後に([2]番目)にも3人目のデータを登録しています。


対策として、List型に問題があるのは判るのですが、どうしたら良いのか分かり兼ねております。
お手数ですが、誰かご教授ください。
引用返信 編集キー/
■25308 / inTopicNo.2)  Re[1]: 登録したいデータが末尾のデータだけ登録されるエラー
□投稿者/ επιστημη (1326回)-(2008/09/17(Wed) 14:27:18)
επιστημη さんの Web サイト
> つまり、7件とも同じ人間のデータで格納されてしまうのです。

「ひとつのDetailを複数回Addする」んじゃなくて、
「Datailをnewし、データを詰め込んで、Addする」を繰り返してみませんか?

引用返信 編集キー/
■25314 / inTopicNo.3)  Re[2]: 登録したいデータが末尾のデータだけ登録されるエラー
□投稿者/ ぽっち (60回)-(2008/09/17(Wed) 14:49:32)
No25308 (επιστημη さん) に返信
>>つまり、7件とも同じ人間のデータで格納されてしまうのです。
>
> 「ひとつのDetailを複数回Addする」んじゃなくて、
> 「Datailをnewし、データを詰め込んで、Addする」を繰り返してみませんか?
>

返答有難うございます。
えっと上記の事で少し理解出来てないのですが・・・つまりこういうこと↓でしょうか?

Detailをfor文の最初で毎回初期化してしまうという事でしょうか?

for(〜〜〜〜)

DetailInfomation Detail= new DetailInfomation();

DB文





という感じでしょうか???
因みに現在その初期化の「DetailInfomation Detail= new DetailInfomation();」文は、for文の前でしています。
とにかくやってみます。
引用返信 編集キー/
■25315 / inTopicNo.4)  Re[3]: 登録したいデータが末尾のデータだけ登録されるエラー
□投稿者/ ぽっち (61回)-(2008/09/17(Wed) 14:53:07)
No25314 (ぽっち さん) に返信
> ■No25308 (επιστημη さん) に返信
> >>つまり、7件とも同じ人間のデータで格納されてしまうのです。
>>
>>「ひとつのDetailを複数回Addする」んじゃなくて、
>>「Datailをnewし、データを詰め込んで、Addする」を繰り返してみませんか?
>>
>
> 返答有難うございます。
> えっと上記の事で少し理解出来てないのですが・・・つまりこういうこと↓でしょうか?
>
> Detailをfor文の最初で毎回初期化してしまうという事でしょうか?
>
> for(〜〜〜〜)
> {
> DetailInfomation Detail= new DetailInfomation();
>
> DB文
> ・
> ・
> ・
> }
>
> という感じでしょうか???
> 因みに現在その初期化の「DetailInfomation Detail= new DetailInfomation();」文は、for文の前でしています。
> とにかくやってみます。



上記方法で上手くいきました!!
やはり初期化は中なんですね・・・。
でもテスト段階で前には上手くいってたのですが・・・なぜでしょうか?それが今では謎です。


本当に助言有難うございました!!
解決済み
引用返信 編集キー/
■25324 / inTopicNo.5)  Re[4]: 登録したいデータが末尾のデータだけ登録されるエラー
□投稿者/ επιστημη (1327回)-(2008/09/17(Wed) 16:55:04)
επιστημη さんの Web サイト
> やはり初期化は中なんですね・・・。

"やはり"なら試してみればよかったのに...

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -