• <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 閱讀(603) 評論(0)  編輯 收藏 引用
            香蕉久久夜色精品国产2020 | 老司机午夜网站国内精品久久久久久久久 | 婷婷国产天堂久久综合五月| 亚洲精品99久久久久中文字幕 | 久久777国产线看观看精品| 99久久人妻无码精品系列| 91久久精品视频| 精品无码久久久久国产动漫3d| 久久青青草原精品影院| 一日本道伊人久久综合影| 国产国产成人精品久久| 亚洲国产精品无码久久久久久曰| 久久精品国产99久久无毒不卡 | 久久精品国产亚洲αv忘忧草| 久久免费的精品国产V∧| 国产香蕉97碰碰久久人人| 久久久久亚洲av综合波多野结衣| 秋霞久久国产精品电影院| 久久99这里只有精品国产| 国产精品岛国久久久久| 国产精品亚洲综合久久| 91精品国产91热久久久久福利| 久久人人爽人人爽人人av东京热| 久久噜噜电影你懂的| 亚洲午夜久久久久久噜噜噜| 精品久久人人爽天天玩人人妻| 天堂久久天堂AV色综合| 精品久久久久久久久免费影院| 亚洲成人精品久久| 久久国产精品久久国产精品| 亚洲国产另类久久久精品| 婷婷久久综合九色综合九七| 久久www免费人成精品香蕉| 伊人久久大香线蕉影院95| 国产精品无码久久久久久| 性欧美丰满熟妇XXXX性久久久| 久久久亚洲AV波多野结衣| 狠狠色婷婷久久综合频道日韩| 久久人人添人人爽添人人片牛牛| 无码人妻久久一区二区三区蜜桃| 久久中文字幕人妻熟av女|