DataAdapter.fill方法填充数据时怎样用一个进度条反映数据填充的进度? 可以考虑用异步来填充,如果同步操作,程序不能及时的响应刷新,可以参考一下IAsyncResult:在执行此对象的主线程上执行委托。IAsyncResult BeginInvoke( Delegate method, object[] args); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果大到这种程度,就不应该用DataSet了。可以算一下,DataSet是存放在内存中的,而要把1G的内存填满只需要几秒钟不到的时间,如果需要进度条,至少也要有10秒左右的时间才有意义,那么这个时候内存将被填充到10G甚至更多。结果就是硬盘狂响速度狂慢。这样的程序谁敢要? 楼上仁兄所言及是,我只想做一个异地服务器数据的更新程序,由于找不到更好的方法,才出此下策。对于委托的概念还不是很清楚。但我会继续研究。想到楼上hbxtlhx(最后一片绿叶) 说的“异步填充”,能不能给一个具体例子?再次感谢 具体的显示进度可能做不到,不过做一个表示正在读出数据的状态显示倒是可以的,我有一个做法不一定合适,但是你可以参考一下:private delegate DataSet dlgFillData(string conStr, string cmdText);private DataSet FillData(string conStr, string cmdText){ SqlConnection cn = new SqlConnection(conStr); cn.Open(); SqlCommand cm = cn.CreateCommand(); cm.CommandText = cmdText; cm.CommandType = CommandType.Text; SqlDataAdapter ada = new SqlDataAdapter(); ada.SelectCommand = cm; DataSet ds = new DataSet(); ada.Fill(ds); return ds;}private void button1_Click(object sender, System.EventArgs e){ string conStr = "server=server2;database=EPHAOCAI;uid=ephaocai_user;pwd=123;"; string cmdText = "SELECT * FROM dbo.BID_BidCommerceSubProduct"; dlgFillData fd = new dlgFillData(this.FillData); IAsyncResult sync = fd.BeginInvoke(conStr, cmdText,null,null); while (!sync.IsCompleted) { this.progressBar1.PerformStep();//min=0;step=1;max=1000000; if (this.progressBar1.Value == this.progressBar1.Maximum) { this.progressBar1.Value = 0; } Application.DoEvents(); } object tmpObj = fd.EndInvoke(sync); if (tmpObj is DataSet) { DataSet ds = (DataSet)tmpObj; this.dataGrid1.DataSource = ds.Tables[0]; }} 啊,异步调用!那正是我想要的。感觉很有意思,但是很让我费解private delegate DataSet dlgFillData(string conStr, string cmdText);dlgFillData fd = new dlgFillData(this.FillData);fd会返回一个DataSet吗?它是怎样运作的? up,顺便再请教一个问题假如我有一个DataSet,里面有相当多的数据,1.怎样对这些数据再筛选,比如使用Select语句检索?2.我可以将它保存为XML文件,怎么将它保存为Excel文件呀?请给出具体方法。再次感谢 假设DateSet中只有一个叫Table的表 TABLE可以支持条件选择,用DATAVIEW就可以实现,只是好像不支持SQL语句,呵,伤心的。所以,有些关键字不能用 过滤DataSet数据,用DataView最方便了,不过让人遗憾的是DataView的RowFilter只是相当于SQL语句的Where,所以,能在Where后面写的关键字和语句,RowFilter后面都能写,但像DISTINCT关键字就不能用了 过滤DataSet数据,用DataView最方便了能给出具体代码吗?太感谢了 用.net自带的打包工具如何让其安装完后自动执行一个bat文件 尝试读取或写入受保护的内存问题如何解决 microsoft .net framework sdk 2.0是什么 用.net控件怎么实现这种显示效果 a|b|c|d 求解 脱机浏览软件如何下载带SESSION验证的WEB网站呢? 项目与项目之间可以传递参数吗? 如何用C#或VB.net实现对网卡的启用和禁用 这样一个简单装置。。你会做么? 请教兄弟们bcd解码问题,如何转换成数字 如何创建成自定义风格的DataGrid列组件. 如何在winform中关闭登录窗体后打开主窗体?
对于委托的概念还不是很清楚。但我会继续研究。
想到楼上hbxtlhx(最后一片绿叶) 说的“异步填充”,能不能给一个具体例子?
再次感谢
{
SqlConnection cn = new SqlConnection(conStr);
cn.Open();
SqlCommand cm = cn.CreateCommand();
cm.CommandText = cmdText;
cm.CommandType = CommandType.Text;
SqlDataAdapter ada = new SqlDataAdapter();
ada.SelectCommand = cm; DataSet ds = new DataSet();
ada.Fill(ds); return ds;
}private void button1_Click(object sender, System.EventArgs e)
{
string conStr = "server=server2;database=EPHAOCAI;uid=ephaocai_user;pwd=123;";
string cmdText = "SELECT * FROM dbo.BID_BidCommerceSubProduct"; dlgFillData fd = new dlgFillData(this.FillData); IAsyncResult sync = fd.BeginInvoke(conStr, cmdText,null,null); while (!sync.IsCompleted)
{
this.progressBar1.PerformStep();//min=0;step=1;max=1000000;
if (this.progressBar1.Value == this.progressBar1.Maximum)
{
this.progressBar1.Value = 0;
} Application.DoEvents();
}
object tmpObj = fd.EndInvoke(sync); if (tmpObj is DataSet)
{
DataSet ds = (DataSet)tmpObj;
this.dataGrid1.DataSource = ds.Tables[0];
}
}
感觉很有意思,但是很让我费解
private delegate DataSet dlgFillData(string conStr, string cmdText);dlgFillData fd = new dlgFillData(this.FillData);
fd会返回一个DataSet吗?
它是怎样运作的?
假如我有一个DataSet,里面有相当多的数据,
1.怎样对这些数据再筛选,比如使用Select语句检索?2.我可以将它保存为XML文件,怎么将它保存为Excel文件呀?请给出具体方法。
再次感谢
能给出具体代码吗?太感谢了