如何将表存入arraylist

ljj0003 2009-05-26 02:16:10
string Connstr = conStr();
OleDbConnection odcConnection = new OleDbConnection(Connstr);
odcConnection.Open();
OleDbCommand odCommand = odcConnection.CreateCommand();
odCommand.CommandText = "select * from meun_name order by id";
OleDbDataReader df = odCommand.ExecuteReader();
ArrayList al =new ArrayList();

我要将查询结果存入al,请问如何存,还有如果读取?
...全文
239 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyq11 2009-05-26
  • 打赏
  • 举报
回复
通过List<T>泛型保存实体类,效果最好。或
ArrayList emInfors = new ArrayList();

SqlDataReader reader;
while(reader.Read())
{
String id = reader.GetString(0);
String name = reader.GetString(1);
Byte sex = Convert.ToByte(reader.GetValue(2));
String sexInfo = String.Empty;

String[] emInfor = { id, name, sexInfo};
emInfors.Add(emInfor);
}
reader.Close();
周公 2009-05-26
  • 打赏
  • 举报
回复
有多种做法:
1、采用实体类作为载体,用List<T>而不是用ArrayList来保存,这样比使用ArrayList保存性能可能会高一些。
如:
List<Person> empList=new List<Person>();
for(int i=0;i<dataTable.Rows.Count;i++)
{
Person p=new Person();
p.UserID=int.Parse(dataTable.Rows[i]["UserId"].ToString());
p.UserName=dataTable.Rows[i]["UserName"].ToString()
empList.Add(p);
}
其中Person就是实体类,定义了UserId和UserName两个属性。

2、采用List<T>存储DataRow的办法。
List<DataRow> empList=new List<DataRow>();
for(int i=0;i<dataTable.Rows.Count;i++)
{
empList.Add(dataTable.Rows[i]);
}
f305424238 2009-05-26
  • 打赏
  • 举报
回复
学习
qxw0816 2009-05-26
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ljj0003 的回复:]
我想把数据封装起来,可以方便使用.
[/Quote]
如果这样也要看你要怎么用啊 要是以后数据绑定显示还是建议用DataTable 因为至少少了循环折腾那一步了,
一楼和四楼的方法确实不错 但是用起来也不一定比DataTable好到哪里(我指的是访问数据的时候)
获取数据的时候还是要遍历一遍
你觉得呢
yingzhilian2008 2009-05-26
  • 打赏
  • 举报
回复
List<int> list=new List<int>();用这个比较好存取
zzxap 2009-05-26
  • 打赏
  • 举报
回复
foreach(。。。 )arrayList.Add(o);
yanfei_519 2009-05-26
  • 打赏
  • 举报
回复
ArrayList al2=new ArrayList();
while(df.read())
{
for(int i=0;i<dr.FieldCount;i++)
{
al2.add(dr[i]);
}
al.add(al2);
}
这样的话,al存储的是ArrayList变量,而每个ArrayList变量存储的是表中每一行的数据,这样就实现了。
快意一剑 2009-05-26
  • 打赏
  • 举报
回复
顶8楼 在DataTable中想怎么用就可以怎么用 而且不需要自己去定义列名
Sysping1 2009-05-26
  • 打赏
  • 举报
回复
听大家的
liaoyunt07 2009-05-26
  • 打赏
  • 举报
回复
用泛型啊!
xuefly09 2009-05-26
  • 打赏
  • 举报
回复
如果是单行数据,最好是用泛型...
如果是多行数据那就用dataset咯``
ljj0003 2009-05-26
  • 打赏
  • 举报
回复
我想把数据封装起来,可以方便使用.
qxw0816 2009-05-26
  • 打赏
  • 举报
回复
你为什么要把数据放到ArrayList中呢 ,不知道你的意图
直接把数据读到
DataTable dt=new DataTable();
OleDbDataAdapter ada=......
ada.Fill(dt);
直接填充到DataTable中多好啊(如果你只是想存储数据以后访问的话)
dt.Rows[0]["列名"]
这样以后访问多直观,
灯火斑斓 2009-05-26
  • 打赏
  • 举报
回复
DB_Command.Connection = DB_Connect;
DB_Command.CommandText = SqlStr;
DB_Command.CommandType = CommandType.Text;

ArrayList tmpDataSet1 = null;
ArrayList tmpDataSet2 = null;

DB_Reader = DB_Command.ExecuteReader();

tmpDataSet1 = new ArrayList();
while (DB_Reader.Read())
{
tmpDataSet2 = new ArrayList();
for (int i = 0; i <= DB_Reader.FieldCount - 1; i++)
{
tmpDataSet2.Add(DB_Reader[i]);
}
tmpDataSet1.Add(tmpDataSet2);
}

ArrayList[] DataSet = new ArrayList[tmpDataSet1.Count];
for (int i = 0; i <= DataSet.Length - 1; i++)
{
DataSet[i] = new ArrayList();
DataSet[i] = (ArrayList)(tmpDataSet1[i]);
}
Simonzy 2009-05-26
  • 打赏
  • 举报
回复
这要看你的SQL返回的列数了,如果是多列采用ArrayList就不太好了。

以下存储多列值的情况:
while (df.Read())
{
// 获取当前行的所有列的值存储到ArrayList中
object[] oRow = new object[df.FieldCount];
df.GetValues(oRow);
al.Add(oRow);
}


以下取值,一样是按顺序取的:
for (int i = 0; i < al.Count; i++)
{
// 先获取该行的所有值
object[] oRow = al[i] as object[];
if (oRow != null)
{
foreach (object obj in oRow)
{
// obj 这就是该行对应的每一列的值
}
}
}
messi_yang 2009-05-26
  • 打赏
  • 举报
回复
頂4樓
zealot1021 2009-05-26
  • 打赏
  • 举报
回复
读取的时候循环读取就可以

for(int i=0;i<al.Count;i++)
{
this.dataGeidView1.Rows.Add(1);
employee emp=(employee)al[i];
this.dataGeidView1.Rows[i].Cells["ID"].value=emp.ID;
this.dataGeidView1.Rows[i].Cells["name"].value=emp.Name;
}
zgke 2009-05-26
  • 打赏
  • 举报
回复

ArrayList al = new ArrayList();
while (df.Read())
{
object[] _ObjectValue =new object[df.VisibleFieldCount];
df.GetValues(_ObjectValue);
al.Add(_ObjectValue);
}

不知道你打算怎么放..这个你参考下把.
zhaoweiting0609 2009-05-26
  • 打赏
  • 举报
回复
mark
zealot1021 2009-05-26
  • 打赏
  • 举报
回复


假设员工类employee有2个属性ID、Name

ArrayList al =new ArrayList();
while(reader.Read())
{
employee emp=new employee();
emp.ID=reader["ID"];
emp.Name=reader["name"]
al.Add(emp)
}

110,499

社区成员

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

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

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