当前位置: 代码迷 >> Sql Server >> winCE使用sqlce数据库每次只能取一条记录的有关问题
  详细解决方案

winCE使用sqlce数据库每次只能取一条记录的有关问题

热度:61   发布时间:2016-04-24 09:25:47.0
winCE使用sqlce数据库每次只能取一条记录的问题
在winCE下使用sqlce数据库每次只能取一条记录,

pIRowset->GetNextRows(DB_NULL_HCHAPTER, 0, cRows , &cRowsObtained, &prghRows)

GetNextRows函数每次都执行失败,只获取到了一行数据,cRows等于1,。
我到网上查了资料,一般都是通过ICommandProperties::SetProperties函数设置每次可获取的记录数,我设置的代码如下:

HRESULT hr = NOERROR;
DBPROPSET dbpropset[1];
        DBPROP dbprop[1];

dbprop[0].dwPropertyID = DBPROP_MAXOPENROWS;
dbprop[0].dwOptions = DBPROPOPTIONS_REQUIRED;
VariantInit (&dbprop[0].vValue);
dbprop[0].vValue.vt =  VT_I4;
dbprop[0].vValue.intVal = 10;

dbpropset[0].guidPropertySet = DBPROPSET_ROWSET;
dbpropset[0].rgProperties  = dbprop;
dbpropset[0].cProperties  = sizeof(dbprop)/sizeof(dbprop[0]);

hr = pICommandProperties->SetProperties(1, dbpropset);

但是每次设置pICommandProperties->SetProperties函数都返回失败,返回值是-2147217887,因此设置失败,每次还是只能获得一条记录。
各位大神,有谁懂OLEDB的,帮忙看看这个问题,小弟不胜感激!
------解决思路----------------------
假如有10000条结果,就算客户端游标,也是通过一批批取数填充到记录集的。
并不是整体取记录比一条条取慢。反而是服务端游标可以在取了少量记录后就有界面相应。
两者在单纯用在取数上的时间没有明显的差异。

你可以用查询分析器执行一下SQL,先把查询慢的可能排除掉。
通常是初始进行连接会比较花时间,这个时间要排除;然后界面输出也比较花时间,也排除掉。单纯取数慢不慢。
------解决思路----------------------
要输出明细就分页、要输出汇总就直接用SQL汇总。
全取1万8是非常不合理的。
  相关解决方案