一个简单的问题,实体类

rczjp 2009-03-29 01:20:09
       /// <summary>
/// 接收信息
/// </summary>
/// <param name="MsgTo">收信人</param>
/// <returns></returns>
public IList<MsgInfo> ReceivedMsgList(string MsgTo)
{
IList<MsgInfo> msglist = new List<MsgInfo>();
using (SqlConnection conn = new SqlConnection(connstr))
{
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = ReceivedMsgSQL;
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add(new SqlParameter("@MsgTo", MsgTo));
conn.Open();
SqlDataReader sdr = cmd.ExecuteReader();
MsgInfo msginfo = null;
while (sdr.Read())
{
if (msginfo == null)
{
msginfo = new MsgInfo();
}
else
{
msginfo.ID = sdr.GetInt32(0);
msginfo.MsgFrom = sdr.GetString(1);
msginfo.MsgTo = sdr.GetString(2);
msginfo.MsgContent = sdr.GetString(3);
msginfo.New = sdr.GetByte(4);
msginfo.MsgTime = sdr.GetDateTime(5);
}
msglist.Add(msginfo);
}
return msglist;
}
}

请问我绑定之后 为什么显示出来的是最后一条记录
本来要显示
1 admin
2 admin1
3 admin2
可结果显示的是
3 admin2
3 admin2
3 admin2


这事怎么回事呢?
...全文
108 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiongguangcai 2009-03-29
  • 打赏
  • 举报
回复
一楼是对的 , 我在详细解释下 , 你的构造方法定义在循环外面,所以每次循环只是重复往集合里添加同一个对象, 你应该把构造函数写在循环里让集合每次循环时都加入一个对象 。因为循环会每次循环都构造一个对象的!
rczjp 2009-03-29
  • 打赏
  • 举报
回复
OK 你们说的没有错 我修改错了个方法呵呵
rczjp 2009-03-29
  • 打赏
  • 举报
回复
private const string ReceivedMsgSQL = "Select * From Msg Where MsgTo=@MsgTo";
while (sdr.Read())
{
//MsgInfo msginfo = null;
//if (msginfo == null)
//{
// msginfo = new MsgInfo();
//}
//else
//{
MsgInfo msginfo = new MsgInfo();
msginfo.ID = sdr.GetInt32(0);
msginfo.MsgFrom = sdr.GetString(1);
msginfo.MsgTo = sdr.GetString(2);
msginfo.MsgContent = sdr.GetString(3);
msginfo.New = sdr.GetByte(4);
msginfo.MsgTime = sdr.GetDateTime(5);
//}
msglist.Add(msginfo);
}
return msglist;

嗯 这样的 还是读取最后一条 记录数是正确的 就是内容是最后一条
vrhero 2009-03-29
  • 打赏
  • 举报
回复
1楼正解...

你只创建了一个MsgInfo实例,添加到IList<MsgInfo>里的全都是同一个引用...自然只有最后一条记录...
efpsy 2009-03-29
  • 打赏
  • 举报
回复
你的代码应该可以读出2条记录,因为第一循环时用于保存记取信息的对象为空,所以第一条记录没有加进去,最好是循环前将存在信息的对象创建
春天的气息 2009-03-29
  • 打赏
  • 举报
回复
msginfo没有实例化?

bbs.bbs180.com
simonezhlx 2009-03-29
  • 打赏
  • 举报
回复
ReceivedMsgSQL是什么?
问题应该在你的查询语句中吧?
namhyuk 2009-03-29
  • 打赏
  • 举报
回复
while (sdr.Read())
{
msglist.Add( new MsgInfo() { MsgFrom = sdr.GetString(1), MsgTo=sdr.GetString(2), MsgContent=sdr.GetString(3), New=sdr.GetByte(4), MsgTime=sdr.GetDateTime(5) } );
}
itcrazyman 2009-03-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xiahouwen 的回复:]
try

C# code

while (sdr.Read())
{

MsgInfo msginfo = new MsgInfo();//here

msginfo.ID = sdr.GetInt32(0);
msginfo.MsgFrom = sdr.GetString(1);
msginfo.MsgTo = sdr.GetString(2);
msginfo.…
[/Quote]
up
dawnbear 2009-03-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xiahouwen 的回复:]
try

C# code

while (sdr.Read())
{

MsgInfo msginfo = new MsgInfo();//here

msginfo.ID = sdr.GetInt32(0);
msginfo.MsgFrom = sdr.GetString(1);
msginfo.MsgTo = sdr.GetString(2);
msginfo.…
[/Quote]

对哦
dawnbear 2009-03-29
  • 打赏
  • 举报
回复
把你的查询语句发出来

你的代码理论上是没有什么问题的

你调试下 跟到return这里 看下msglist里面是不是有你需要的3条数据 如果不是你要的那三条数据 跟着上面msginfo走 看取出来的数据是不是每条都有
活靶子哥哥 2009-03-29
  • 打赏
  • 举报
回复
try


while (sdr.Read())
{

MsgInfo msginfo = new MsgInfo();//here

msginfo.ID = sdr.GetInt32(0);
msginfo.MsgFrom = sdr.GetString(1);
msginfo.MsgTo = sdr.GetString(2);
msginfo.MsgContent = sdr.GetString(3);
msginfo.New = sdr.GetByte(4);
msginfo.MsgTime = sdr.GetDateTime(5);
msglist.Add(msginfo);
}
return msglist;

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧