• <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

            厚積薄發. 勤為槳,思為帆

               :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理 ::
              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;//按存儲過程的參數順序給參數賦值
            }

            以執行這個存儲過程了,返回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 閱讀(615) 評論(0)  編輯 收藏 引用
            久久人妻无码中文字幕| 中文字幕久久欲求不满| 亚洲婷婷国产精品电影人久久| 无码乱码观看精品久久| 精品久久久无码21p发布| 久久66热人妻偷产精品9| 久久国产精品视频| 亚洲第一极品精品无码久久| 国产福利电影一区二区三区久久久久成人精品综合 | 国产亚洲精久久久久久无码77777 国产亚洲精品久久久久秋霞 | 国产精品美女久久久久| 精品久久久久久无码中文字幕| 久久亚洲精品无码VA大香大香| 2022年国产精品久久久久| 久久精品国产只有精品66| 久久精品国产亚洲av麻豆小说| 久久高潮一级毛片免费| 2021久久国自产拍精品| 一本大道久久香蕉成人网| 青青青青久久精品国产| 国内精品久久久久久久久电影网| 久久99国产一区二区三区| 国产精品久久自在自线观看| 久久久久久伊人高潮影院| 日韩欧美亚洲综合久久影院Ds| 国产精品福利一区二区久久| 国产偷久久久精品专区| 午夜福利91久久福利| 狠狠色丁香婷婷综合久久来来去| 狠狠狠色丁香婷婷综合久久五月 | 久久免费视频观看| 国产精品美女久久久久| 色婷婷综合久久久久中文| 亚洲综合日韩久久成人AV| 一本色道久久HEZYO无码| 久久WWW免费人成一看片| 久久99热这里只频精品6| 99精品国产免费久久久久久下载 | 婷婷综合久久中文字幕蜜桃三电影 | 99久久免费国产精精品| 99久久婷婷国产综合亚洲|