三层架构中如何使用DataReader高手请进!!!

fishermen 2010-07-02 05:10:01
DataReader比DataSet速度快,因为在填充DataSet时,实际.net会调用DataReader的。所以我的程序有点地方想用DataReader,但是做为三层架构怎样传递DataReader或者DataReader中的数据。小弟想了很久,发觉不太现实。请哪位高手给个提示!
...全文
742 63 打赏 收藏 转发到动态 举报
写回复
用AI写文章
63 条回复
切换为时间正序
请发表友善的回复…
发表回复
boringame 2010-08-31
  • 打赏
  • 举报
回复
public List<UserInfor> GetList()
{
List<UserInfor> list = new List<UserInfor>();
SQLHelper helper = new SQLHelper();
string sql = "select * from UserInfor";
SqlParameter[] prams = null;
SqlDataReader sdr = helper.ExecuteDataReader(sql, prams);
while (sdr.Read())
{
UserInformodel = new UserInfor();
model.Username = sdr["Username"].ToString();
model.Usertype =sdr["Usertype"].ToString();
list.Add(model);
}
sdr.Close();
return list;
}

UserInfor 是实体类, 用List<T> 传数据
参考答案来源于:topic.csdn.net

我正在使用《Csdn收音机》第一时间获取最新动态!
fishermen 2010-07-28
  • 打赏
  • 举报
回复
结贴了!!还是直填充DataSet吧
liuguangzhou123 2010-07-22
  • 打赏
  • 举报
回复
设置返回类型为DataReader应该就可以了
fishermen 2010-07-06
  • 打赏
  • 举报
回复
[Quote=引用 54 楼 angel6709 的回复:]
引用楼主 fishermen 的回复:
DataReader比DataSet速度快,因为在填充DataSet时,实际.net会调用DataReader的。所以我的程序有点地方想用DataReader,但是做为三层架构怎样传递DataReader或者DataReader中的数据。小弟想了很久,发觉不太现实。请哪位高手给个提示!

如果你读取的数据只有一条datareader是比DataAdap……
[/Quote]
其实我一直怀疑.Net用DataAdapter填充DataSet是不自己也调用DataReader,然后赋值到DataSet中,关闭连接,所以我自己手动用DataReader循环赋值给DataSet,就相当与重新写DataAdapter的Fill()函数。不知这个效率是否比.Net的DataAdapter的Fill()函数效率高。数据量在10万条以上
LovingAlison 2010-07-06
  • 打赏
  • 举报
回复
接分。
liye9801 2010-07-06
  • 打赏
  • 举报
回复
要提高效率可以考虑压缩Dataset再传输,我再webservice中用过,效率提升很明显。
remoting没测过,你可以试试看
zhoubupt 2010-07-06
  • 打赏
  • 举报
回复
支持ls,而且datareader需要保持数据库连接,而DataAdapter只需要一次连接就ok
angel6709 2010-07-06
  • 打赏
  • 举报
回复
如果你用datareader来填充DataSet,那相当于用了杀鸡的刀来宰牛。。。
angel6709 2010-07-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 fishermen 的回复:]
DataReader比DataSet速度快,因为在填充DataSet时,实际.net会调用DataReader的。所以我的程序有点地方想用DataReader,但是做为三层架构怎样传递DataReader或者DataReader中的数据。小弟想了很久,发觉不太现实。请哪位高手给个提示!
[/Quote]
如果你读取的数据只有一条datareader是比DataAdapter(不是dataset)快
如果你读取出来的是一个结果集,还是用DataAdapter快,不浪费数据库连接。
datareader在读取数据的过程中始终保持一个连接,直到你把它释放。
DataAdapter可以一次性读取数据到dataset释放连接,所以不浪费数据库连接
如果你从数据库中得到的是一个值,如int或string
你可以用cmd.ExecuteScalar返回object,这是最快的
woai5354 2010-07-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 junjieok 的回复:]
public List<UserInfor> GetList()
{
List<UserInfor> list = new List<UserInfor>();
SQLHelper helper = new SQLHelper();
string sql = "select * from UserInfor";
SqlParameter[] prams = null;
……
[/Quote]
++
yidongliange4 2010-07-06
  • 打赏
  • 举报
回复
学习了
mine566 2010-07-06
  • 打赏
  • 举报
回复
由于非常想学习软件开发。但是个人能力有限。希望那位高手能帮我。。谢谢了。。。。

我会好好学的。。。。。

QQ:513277603

真心愿意的来了。。。。。。
xeon_pan 2010-07-06
  • 打赏
  • 举报
回复
既然三层架构,当然不是传递reader了,三层架构你传递的应该是对象,而不是reader
另外 手工和自动填dataset速度几乎没区别
amandag 2010-07-06
  • 打赏
  • 举报
回复
如果只是读取可以用DataReader,如果需要传递个人倾向与List<Entity>
Hidden518 2010-07-06
  • 打赏
  • 举报
回复
DBhelpaer类
public static SqlDataReader GetReader(string sql)
{
SqlCommand cmd = new SqlCommand(sql, Conn);
return cmd.ExecuteReader();
}


DAO

public IList<Class> GetClasslist()
{
List<Class> Class = new List<Class>();
StringBuilder strsql = new StringBuilder();
strsql.Append("select top 10 * from gg_sys_class");
SqlDataReader dr=DBhelpaer.GetReader(strsql.ToString());
if (dr.HasRows)
{
while (dr.Read())
{
Class.Add(SetClass(dr));
}
}
return Class;
}

public Class SetClass(SqlDataReader reader)
{
Class sclass = new Class();
sclass.acadyear = reader["acadyear"].ToString();
sclass.artsciencetype = reader["artsciencetype"].ToString();
sclass.classid = reader["classid"].ToString();
//sclass.classintid = reader["classintid"].ToString();
sclass.classname = reader["classname"].ToString();
sclass.classno = reader["classno"].ToString();
sclass.classtype = reader["classtype"].ToString();
sclass.gradeid = reader["gradeid"].ToString();
sclass.schid = reader["schid"].ToString();
sclass.schooling_length =Convert.ToInt32( reader["schooling_length"]);
sclass.section = reader["section"].ToString();
//sclass.GradeName = reader["gradename"].ToString();
return sclass;

}

keyouea 2010-07-06
  • 打赏
  • 举报
回复
概念问题:
DataReader是数据读取用的 ,
读出来的数据需要存放容器,如Dataset,datatable,IList等
你要传值,首先要有数据容器.
JiuchunYoung 2010-07-06
  • 打赏
  • 举报
回复
可以在DBHelper 里面 写个方法啊
yefenghebaobao 2010-07-06
  • 打赏
  • 举报
回复
围观学习了 帮顶
fishermen 2010-07-06
  • 打赏
  • 举报
回复
看来只有自己测试一下,用DataReader读出,手动赋值到数组或者DataSet中,然后把该数组或者DataSet传入界面层。与直接填充DataSet比较,哪个速度快。测试结果我会与大家一起分享。
铛铛 2010-07-06
  • 打赏
  • 举报
回复
所谓的三层并非只有三个程序集

其实还有一个模型层,是用来传递数据的
加载更多回复(41)

110,571

社区成员

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

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

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