请问:如何把记录集转换为实体类,然后把实体类存放到ArrayList中?谢谢!

Sammo 2007-12-25 12:35:43
public class MyTable
{

private int ID = 0;
private string Name;

public int ID
{
set { this._ID = value; }
get { return this._ID; }
}

public string Name
{
set { this._Name = value; }
get { return this._Name; }
}
}
SqlConnection cn = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["cn"]);
cn.Open();
SqlCommand cmd = new SqlCommand("select ID,Name from user", cn);
SqlDataReader dr;
dr = cmd.ExecuteReader();
MyTable tb = new MyTable();
ArrayList lst = new ArrayList();

请问:如何可以把查询出来的记录集dr,转换为实体类tb,然后再存放到lst中呢?谢谢!
...全文
238 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sammo 2007-12-28
  • 打赏
  • 举报
回复
谢谢石雕兄!结贴!
GhostAdai 2007-12-27
  • 打赏
  • 举报
回复
前面都说得非常详细了,我只能接分了。
石雕 2007-12-27
  • 打赏
  • 举报
回复
上面有一點錯誤。。
       while(reader.Read())
{
returnValue = new MyTable( reader.ReadInt32(0), reader.ReadString(1));
}




       while(reader.Read())
{
returnValue.Add(new MyTable( reader.ReadInt32(0), reader.ReadString(1)));
}
石雕 2007-12-27
  • 打赏
  • 举报
回复
樓上的沒錯,不過要注意dr 和 cn 的關閉和異常處理。

第一個類MyTable是于數據庫中同名表對應的一個實體。
public partial class MyTable
{
public MyTable(){}
public MyTable(int ID, string Name)
{ This.ID = ID;
This.Name = Name;
}

public int id;
public int ID{ get{ return id; } set{ id = value; } }

public string name;
public string Name{ get{ return name; } set{ name = value; } }
}



接著有一個DAL(data access layer)類,里面提供(db-實體)鏈接方法。
public partial class DalMyTable
{
public static List<MyTable> Select(SqlConnection connection, int id)
{
List<MyTable> returnValue = null;
using { SqlDataReader reader = new SqlCommand(string.Format("select * from [MyTable] where id=‘{0}’", id.ToString());
while(reader.Read())
{
returnValue = new MyTable( reader.ReadInt32(0), reader.ReadString(1));
}
}
return returnValue;
}

public static void Insert(MyTable obj, SqlConnection connection)
{ //.....同樣道理,可以寫insert方法,update方法或者其他有用的方法
}
}
xz_lm_fly 2007-12-25
  • 打赏
  • 举报
回复
SqlConnection cn = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["cn"]);
cn.Open();
SqlCommand cmd = new SqlCommand("select ID,Name from user", cn);
SqlDataReader dr = cmd.ExecuteReader();
ArrayList list = new ArrayList();
if(dr == null)
return;
while (dr.Read())
{
MyTable tb = new MyTable();
tb.ID = dr["ID"];
tb.Name = dr["Name"];
list.Add(tb);
}
wlovenet 2007-12-25
  • 打赏
  • 举报
回复
学习一下泛型吧
AliexBoob 2007-12-25
  • 打赏
  • 举报
回复
接下来,
 SqlConnection   cn   =   new   SqlConnection(System.Configuration.ConfigurationManager.AppSettings["cn"]); 
cn.Open();
SqlCommand cmd = new SqlCommand("select ID,Name from user", cn);

SqlDataReader dr = cmd.ExecuteReader();

MyTable tb = new MyTable();
ArrayList list = new ArrayList();
while (dr.Read())
{
tb.ID = dr["ID"];
tb.Name = dr["Name"];
list.Add(tb.ID);
list.Add(tb.Name);
}
Sammo 2007-12-25
  • 打赏
  • 举报
回复
谢谢石雕兄,请看:


using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Collections;

public partial class _Default : System.Web.UI.Page
{
public class sys_ModuleTable
{

#region "Private Variables"
private int _ModuleID = 0; // 功能模块ID号
private int _M_ParentID = 0; // 所属父级模块ID与ModuleID关联,0为顶级
private string _M_CName; // 模块/栏目名称当ParentID为0为模块名称
private string _M_Directory; // 模块/栏目目录名
private string _M_OrderLevel; //当前所在排序级别支持双层99级菜单
private int _M_Close = 0; // 是否关闭1:是0:否
#endregion

#region "Public Variables"
/// <summary>
/// 功能模块ID号
/// </summary>
public int ModuleID
{
set { this._ModuleID = value; }
get { return this._ModuleID; }
}

/// <summary>
/// 所属父级模块ID与ModuleID关联,0为顶级
/// </summary>
public int M_ParentID
{
set { this._M_ParentID = value; }
get { return this._M_ParentID; }
}

/// <summary>
/// 模块/栏目名称当ParentID为0为模块名称
/// </summary>
public string M_CName
{
set { this._M_CName = value; }
get { return this._M_CName; }
}

/// <summary>
/// 模块/栏目目录名
/// </summary>
public string M_Directory
{
set { this._M_Directory = value; }
get { return this._M_Directory; }
}

/// <summary>
/// 当前所在排序级别支持双层99级菜单
/// </summary>
public string M_OrderLevel
{
set { this._M_OrderLevel = value; }
get { return this._M_OrderLevel; }
}


/// <summary>
/// 是否关闭1:是0:否
/// </summary>
public int M_Close
{
set { this._M_Close = value; }
get { return this._M_Close; }
}

#endregion

}


protected void Page_Load(object sender, EventArgs e)
{
BindMenu();
}
#region "绑定主菜单"
/// <summary>
/// 绑定主菜单
/// </summary>
private void BindMenu()
{
SqlConnection cn = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["cn"]);
cn.Open();
SqlCommand cmd = new SqlCommand("select * from sys_Module Where M_Close=0 and M_ParentID=0 Order by M_OrderLevel", cn);

SqlDataReader dr;
dr = cmd.ExecuteReader();
sys_ModuleTable tb = new sys_ModuleTable();
ArrayList lst = new ArrayList();
LeftMenu.DataSource = dr; //这里最好是设置数据源为ArrayList,但我不知道如何把记录集转为实体tb,然后放在lst里
LeftMenu.DataBind();
dr.Close();
cn.Close();
}
#endregion

#region "绑定子菜单"
/// <summary>
/// 绑定子菜单事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void LeftMenu_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
sys_ModuleTable s_Mt = (sys_ModuleTable)e.Item.DataItem;
SqlConnection cn = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["cn"]);
cn.Open();
SqlCommand cmd = new SqlCommand(string.Format("select * from sys_Module Where M_Close=0 and M_ParentID={0} Order by M_OrderLevel",1), cn);

SqlDataReader dr;
dr = cmd.ExecuteReader();
Repeater LeftSubID = (Repeater)e.Item.FindControl("LeftMenu_Sub");
LeftSubID.DataSource = dr;
LeftSubID.DataBind();
dr.Close();
cn.Close();
}

#endregion
}



以上是源代码,问题在这里:
LeftMenu.DataSource = dr; //这里最好是设置数据源为ArrayList,但我不知道如何把记录集转为实体tb,然后放在lst里
sys_ModuleTable s_Mt = (sys_ModuleTable)e.Item.DataItem; //数据源不是ArrayList的话,这里会提示转换错误
AliexBoob 2007-12-25
  • 打赏
  • 举报
回复
做循环的话倒是可以,但是实体每次只能存一个啊,完事还是存的最后的那个数据,不过都可以放进list里面.
石雕 2007-12-25
  • 打赏
  • 举报
回复
明天早上到了公司写给你
Sammo 2007-12-25
  • 打赏
  • 举报
回复
非常感谢石雕兄弟的回答,我是C#初学者,您给的代码我看得不是很明白,由于是初学,兄弟可以帮忙实例化给我学习学习,就以我的代码为例帮忙写写可以吗?分数不够我可以加.谢谢!
石雕 2007-12-25
  • 打赏
  • 举报
回复
要加到 arraylist 里去把if 改为 while , 内部声明一个 arraylist 就可以了.
石雕 2007-12-25
  • 打赏
  • 举报
回复
public partial class Entity
{
public Entity(){}
public Entity(int fieldOne, string fieldTwo, Object fieldThree, param object[] moreFields)
{ This.FieldOne = fieldOne;
This.FieldTwo = fieldTwo;
This.FieldThree = fieldThree;
...
}

public int fieldOne;
public int FieldOne{ get{ return fieldOne; } set{ fieldOne = value; } }

public string fieldTwo;
....
}

然后有一个DAL Class
public partial class Entity
{
public static Entity Select(SqlConnection connection, Guid? EntityKey)
{
using { SqlDataReader reader = new SqlCommand(string.Format("select * from [table] where id={0}", entityKey.ToString());
if(null != reader)
{
Entity returnValue = new Entity ( reader.IsDBNull(0)? null : reader.ReadInt32(0) ),
reader.IsDBNull(1)? null : reader.ReadInt32(1),
reader.IsDBNull(2)? null : reader.ReadInt32(2),
...
);
return returnValue;
}
}
}
}

110,525

社区成员

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

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

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