hr = pIRowset->GetNextRows(DB_NULL_HCHAPTER, 0, 20, &cRowsObtained, &prghRows);        //这里写的要求返回20行,但是执行之后cRowsObtained总是1
if(FAILED(hr))
{
goto Exit;
} for(i=0;i<cRowsObtained;i++)
{
// Fetch actual data
//
hr = pIRowset->GetData(prghRows[0], hAccessor, pData);
if (FAILED(hr))
{
goto Exit;
} CString str;
tvInsert.item.pszText = (WCHAR*)(pData+prgBinding[1].obValue);
hArea = pCtrl->InsertItem(&tvInsert); str = (WCHAR*)(pData+prgBinding[2].obValue);
hSecItem = pCtrl->InsertItem( TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_TEXT,
str, 0, 1, 0, 0, 0, hArea, NULL); str = (WCHAR*)(pData+prgBinding[3].obValue);
pCtrl->InsertItem( TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_TEXT,
str, 0, 1, 0, 0, 0, hSecItem, NULL);
}

解决方案 »

  1.   

    楼上的什么意思?
    我在做SQL CE应用的程序,WM5上面的数据库访问只能用oledb,好烦
      

  2.   

    hr   =   pIRowset- >GetData(prghRows[0],   hAccessor,   pData); 
    中的 prghRows[0],   是不是应该改成 prghRows[i] 啊,   
      

  3.   

    If the DBPROP_MAXOPENROWS property is writeable for the provider, then you should set it to the number of rows you want.
      

  4.   

    非常感谢dyw的帮助,另外还想请教一个问题:
        我现在用OLEDB连接上了SQLCE的数据库,在执行SQL语句的时候,总是感觉有个延迟,比如说我的程序初始化的时候,建立数据库和相关的表,调试的时候,看到执行返回的结果已经是S_OK了的,但如果我在程序一启动好,很快就把程序关掉的话,表实际上是没有建立的;如果等一会(10秒钟)再关,则一般就建好了,这是什么原因?
      

  5.   

    现在我是这么做的,每次执行sql语句都重新连接数据库,执行完以后又断开,这样就可以保证每次的都已执行。
    我只是觉得,不应该是这样的,应该还有什么应该注意的吧?不知道有没有高手,能给一点指示。
      

  6.   

    用OLEDB的人不多阿,算了,结贴吧。