• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            kenlistian

            厚積薄發(fā). 勤為槳,思為帆

               :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理 ::
              73 隨筆 :: 4 文章 :: 22 評論 :: 0 Trackbacks
            使用_commandPtr 處理存儲過程時,當在存儲過程中需要返回結果集合和返回參數時,一般在任何語言調用的ado中
            存儲過程控件都無法同時返回,這里http://www.pkvs.com/data/mssql/19323.html給了我們答案。

            使用CreateParameter(),而是調用CommandPtr的Refresh()函數先從數據庫中查詢參數.
            _ConnectionPtr m_pConn;
            m_pConn.CreateInstance(__uuidof(Connection));
            m_pConn->Open("driver={SQL Server};server=127.0.0.1;DATABASE=pub;UID=sa;PWD=", "","",0);

            _CommandPtr  m_pCommand;
            m_pCommand.CreateInstance(__uuidof(Command));
            _RecordsetPtr m_pRecordset;
            m_pRecordset.CreateInstance(__uuidof(Recordset));

            m_pCommand->ActiveConnection = m_pConn;
            m_pCommand->CommandText = "SP_XX";              //存儲過程名
            m_pCommand->PutCommandType(adCmdStoredProc);
            m_pCommand->Parameters->Refresh();              //從數據庫查詢參數信息
            //我不建議使用refresh,這個內部的處理速度還不如用createparamter好,

            long cnt = m_pCommand->Parameters->GetCount();//取得參數的個數
            for(long k=1;k<cnt;k++)
            { //由于ADO中認為返回值是第一個參數,因此這里用k=1濾掉第一個參數
                   m_pCommand->Parameters->GetItem(k)->Value = XXX;//按存儲過程的參數順序給參數賦值
            }

            以執(zhí)行這個存儲過程了,返回m_pRecordset將返回集合,
                m_pRecordset = m_pCommand->Execute(0,0,adCmdStoredProc);
            這個時候,如果接下來用
               _variant_t ret_val = m_pCommand->Parameters->GetItem((long)0)->Value;
            那么將得不到值
            而如果像下面這樣調用的話就可以得到返回值了
            m_pRecordset->Close();
            _variant_t output_para = m_pCommand->Parameters->GetItem((long)0)->Value;
            MS ADO.net給這一現象的回復是:
             You can think of a stored procedure as a function in your code. The function doesn’t return a value until it has executed all of its code. If the stored procedure returns results and you haven’t finished processing these results, the stored procedure hasn’t really finished executing. Until you’ve closed the DataReader, the return and output parameters of your Command won’t contain the values returned by your stored procedure.
            也就是說Execute()函數應該看成是直到m_pRecordset關掉以后才會正確返回.


            posted on 2007-09-18 10:17 kenlistian 閱讀(616) 評論(0)  編輯 收藏 引用
            久久e热在这里只有国产中文精品99 | 一本久久知道综合久久| 一级a性色生活片久久无| 一本一道久久a久久精品综合| 欧洲人妻丰满av无码久久不卡| 夜夜亚洲天天久久| 四虎国产精品免费久久| 久久人人爽人人爽人人片AV不| 精品久久久久久久久久久久久久久| 日本亚洲色大成网站WWW久久| 久久久久久久97| 亚洲乱码日产精品a级毛片久久 | 亚洲精品成人久久久| 久久久久亚洲av无码专区导航| 国产精品久久久久一区二区三区| 亚洲国产欧洲综合997久久| 伊人久久综合热线大杳蕉下载| 亚洲香蕉网久久综合影视| 99久久免费只有精品国产| 久久婷婷五月综合色奶水99啪| 久久se精品一区精品二区国产| 欧美亚洲色综久久精品国产| 2021国内精品久久久久久影院| 国产精品无码久久综合网| 亚洲国产成人久久综合碰碰动漫3d| 亚洲精品乱码久久久久久蜜桃不卡 | 久久99热只有频精品8| 久久久久久久精品妇女99 | 中文字幕精品无码久久久久久3D日动漫| 精品国产乱码久久久久久1区2区| 久久人人爽人人爽人人片AV麻烦| 久久久久亚洲国产| 亚洲精品97久久中文字幕无码| 久久影视综合亚洲| 久久露脸国产精品| 久久天天日天天操综合伊人av| 久久久久久av无码免费看大片| 久久国产视屏| 99久久免费国产精品特黄| 伊人久久大香线蕉综合Av| 久久精品欧美日韩精品|