比如我有一张销售表Sale
现在我要查询出里面的所有UserId==12的记录
因为我的过程里面已经有了
void DataTable SaleGetList()
{
String sql= "select * from sale ";
...
return ds.Table[0];
}
然后现在我想要取出UserId==12的记录
我就想要用
方法一:--------------------------------
void DataTable GetUserID(ID)
{
DataTable dt=SaleGetList();
DataTable dt_User=new DataTable();
for(int i=0;i <=dt.rows.count-1;i++)
{
这里判断UserId=12时将这记录添加到dt_User中
}
return dt_User;
}
方法二:-----------------------------
void DataTable GetUserID(ID)
{
String sql= "select * from sale where userid= "+id;
...
return ds.Table[0];
}
---------------------------------
我个人比较喜欢用 方法一;
问:
1:在一个有10000条记录的表中的话方法一;要比方法二慢多少
2:大家会用哪一种方法
------解决方案--------------------------------------------------------
1:客户邮购一本书,那么书店就寄仓库去,然后到了门口再选择.
2:翻仓库清单,选出需要的书,寄給人家.
你说用哪种.
------解决方案--------------------------------------------------------
10000条的话慢的不是很明显..
可是10万,100万,就明显效率低多了...
第一种.费那事干嘛
还是建议用第二种...
------解决方案--------------------------------------------------------
方法一 通过方法GetUserID 实例化了一个SaleGetList对象(在堆上的引用) 获取并返回一个DataSet 其流程相当于: 连接数据库-> 读取全部数据-> 生成DataSet并断开连接-> 讲ds进行筛选然后生成一个新的Table[1]放入数据集-> 最终返回你要的ds(其中包含2个Table)
方法二 新建一个GetUserID方法 直接从数据库读取符合条件的数据 生成数据集 只有你需要的那个Table
所以方法二好,我选方法二
2者的效率...显然
(注:纯属个人意见,有理论错误请指点)
------解决方案--------------------------------------------------------
附: 假如楼主觉得要运用OO的理念的话,可以这样: 定义个readonly的全局的DataSet对象(我没有定义过 不知道能不能)。然后在构造函数中对DataSet赋值(即执行select * from sale的数据写入数据集)
接下来在所有的方法中可以对该对象中的数据进行筛选
------解决方案--------------------------------------------------------
1、不管怎么说,邮寄仓库的做法都是下下策。应该极力避免的。
即使是要仓库的里所有货物的话也应该分期分批的邮购,毕竟运力有限。
2、面向对象也不是这个方式吧。
------解决方案--------------------------------------------------------
即使怎地用方法一的话,也应该用
DataView dv = dt.DefaultView();
dv.RowFilter = "UserID = 12 ";
来过滤,何必自己写循环呢?
------解决方案--------------------------------------------------------
假如楼主觉得要运用OO的理念的话,可以这样: 定义个readonly的全局的DataSet对象
===========
真的是这样的话,那OO也太简单了呀。
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
个人认为是方法二.
------解决方案--------------------------------------------------------
重载你的过程
void DataTable SaleGetList(int id)
{
String sql= "select * from sale where id= "+id;
...
return ds.Table[0];
}
------解决方案--------------------------------------------------------
第二种方法效率高些
楼上
1:客户邮购一本书,那么书店就寄仓库去,然后到了门口再选择.
2:翻仓库清单,选出需要的书,寄給人家.
形容得很贴切啊
------解决方案--------------------------------------------------------
当然是第二种好.你的第一种方法是重复了数据库的检索功能,且效率大不如数据库.并且需将数据从数据库中取到web程序的内存中.会造成1.web服务器与数据库通讯数据量过大可能会对网络造成阻塞2.数据库服务器压力增大(需查询大量数据)3.web服务器压力增大(内存中保存大量数据,并处理)再者处理时用循环也不是高效的作法。(datatable 有select方法或dataview的rowfilter属性