讨论:关于dataAdapter.Fill()时,数据是否全部装入dataSet

CnEve 2005-07-07 11:33:28
在一个10000条记录的新闻库中做了测试
Select * From Table;

在不分页的情况下执行时间是30多秒,如:da.Fill(ds,"Table");

而使用了分页后,执行时间不到30毫秒,如:
da.Fill(ds, currentIndex, pageSize, "Table");
dataGrid1.DataSource = ds.Tables["Table"].DefaultView;

想知道这样分页的方法是否已经把all数据装入了dataSet
...全文
297 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ivony 2005-07-09
  • 打赏
  • 举报
回复
在一个10000条记录的新闻库中做了测试
Select * From Table;

在不分页的情况下执行时间是30多秒,如:da.Fill(ds,"Table");

而使用了分页后,执行时间不到30毫秒,如:
da.Fill(ds, currentIndex, pageSize, "Table");
dataGrid1.DataSource = ds.Tables["Table"].DefaultView;

想知道这样分页的方法是否已经把all数据装入了dataSet



1、并没有把所有的数据全部取出来。
2、DataAdapter不需要打开数据库连接,它会自动打开自动关闭。
3、DataAdapter的分页,在取前面几页时效率很高,但是越往后面效率越差。因为它的原理不过是不断的调用DataReader.Read方法跳过前面的数据罢了。。。。
CnEve 2005-07-09
  • 打赏
  • 举报
回复
.......
CnEve 2005-07-09
  • 打赏
  • 举报
回复
我顶上去
CnEve 2005-07-08
  • 打赏
  • 举报
回复
如果没全部装入ds的话,那后面的 btnNext_Click() 事件中为什么不需要再 conn.Open()了呢?
记得以前看孟老大的一篇dataGrid分页文章中也有说过
da.Fill(ds,currentIndex,pageSize,"Table"); 会将数据全部装入的..
大家都说说啊.
LHA 2005-07-07
  • 打赏
  • 举报
回复
这样应该没有把所有的数据放入dataSet
如果所有数据都放入了ds,那你的DataGrid里面就会显示所有的数据了
CnEve 2005-07-07
  • 打赏
  • 举报
回复
以下为使用此方法进行datagrid分页的例子

//////在.NET Framework中,您可以通过DataAdapter的如下Fill方法,来填充一页的记录:
public int Fill(
DataSet dataSet,
int startRecord,
int maxRecords,
string srcTable
);
///////下面提供一段示例代码,供您参考:
public class Form1 : System.Windows.Forms.Form
{
int currentIndex = 0;
int pageSize =10;
int totalRecords = 0;
DataSet myDs;
SqlDataAdapter myDa;
……
private void Form1_Load(object sender, System.EventArgs e)
{
string connStr = "Server=SHA-RICKIE-01;Database=northwind;uid=user;pwd=user";
SqlConnection myConn = new SqlConnection(connStr);
myConn.Open();
string sqlStr = "Select CustomerID, CompanyName FROM Customers";
myDs = new DataSet();
myDa = new SqlDataAdapter(sqlStr,myConn);
myDa.Fill(myDs,currentIndex,pageSize,"Customers");
// Determine total pages.
SqlCommand totCMD = new SqlCommand("SELECT Count(*) FROM Customers", myConn);
totalRecords = (int)totCMD.ExecuteScalar();

myConn.Close();
dataGrid1.DataSource = myDs.Tables["Customers"].DefaultView;
}
//下一页 Button
private void btnNext_Click(object sender, System.EventArgs e)
{
currentIndex = currentIndex + pageSize;
if(currentIndex >= totalRecords) currentIndex = currentIndex - pageSize;
myDs.Tables["Customers"].Clear();
myDa.Fill(myDs,currentIndex,pageSize,"Customers");
}
//上一页 Button
private void btnPrevious_Click(object sender, System.EventArgs e)
{
currentIndex = currentIndex - pageSize;
if(currentIndex < 0) currentIndex = 0;
myDs.Tables["Customers"].Clear();
myDa.Fill(myDs,currentIndex,pageSize,"Customers");
}
}

110,533

社区成员

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

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

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