• <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)  編輯 收藏 引用
            国内精品久久久久久麻豆| 精品久久久久久无码不卡| 精品午夜久久福利大片| 青青草原1769久久免费播放| 久久久久久久亚洲精品| 伊人久久五月天| 国产欧美久久久精品| 国产成人精品久久| 一本一本久久aa综合精品| 99久久夜色精品国产网站| 亚洲乱码日产精品a级毛片久久 | 中文字幕成人精品久久不卡| 欧美久久综合九色综合| 久久香蕉国产线看观看精品yw| 日本免费久久久久久久网站| 99久久无色码中文字幕人妻| 国产精品欧美久久久久无广告| 久久香蕉国产线看观看精品yw| 国产精品久久久久乳精品爆| 2020久久精品亚洲热综合一本| 色综合久久久久| 69SEX久久精品国产麻豆| 人妻少妇精品久久| 国产真实乱对白精彩久久| 日本欧美久久久久免费播放网| 久久精品无码一区二区日韩AV| 久久精品水蜜桃av综合天堂| 国产69精品久久久久APP下载| 91亚洲国产成人久久精品网址 | 久久久久亚洲AV无码去区首| 国产精品久久久久久| 久久精品人成免费| 久久精品国产亚洲AV电影| 亚洲中文久久精品无码| 精品久久久一二三区| 久久婷婷色综合一区二区| 免费一级欧美大片久久网| 日韩久久无码免费毛片软件 | 曰曰摸天天摸人人看久久久| 久久国产一区二区| 精品国产91久久久久久久|