• <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 閱讀(619) 評論(0)  編輯 收藏 引用
            久久电影网2021| 无码8090精品久久一区| 精品综合久久久久久97超人| 久久久久久久尹人综合网亚洲| 成人a毛片久久免费播放| 97视频久久久| 国内精品久久久久国产盗摄| 久久香综合精品久久伊人| 99热热久久这里只有精品68| 久久午夜无码鲁丝片秋霞 | 久久久久九国产精品| 天天爽天天狠久久久综合麻豆| 久久久精品人妻无码专区不卡| 久久无码人妻一区二区三区| 久久久噜噜噜久久中文字幕色伊伊 | 性做久久久久久久久| 人人狠狠综合久久亚洲婷婷| 久久精品国产久精国产果冻传媒 | 免费一级做a爰片久久毛片潮 | 久久夜色撩人精品国产| 青青草原综合久久大伊人精品| 婷婷久久久亚洲欧洲日产国码AV| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区| 72种姿势欧美久久久久大黄蕉| 亚洲成色WWW久久网站| 手机看片久久高清国产日韩| 亚洲国产天堂久久综合网站| 国产精品岛国久久久久| 99久久久精品免费观看国产| 婷婷久久香蕉五月综合加勒比| 久久人人爽人人爽人人av东京热 | 亚洲精品无码久久久| 久久久久久久久久久免费精品| AA级片免费看视频久久| 国产三级观看久久| 久久久无码精品亚洲日韩软件| 国产三级观看久久| 欧美伊人久久大香线蕉综合69| 欧美成a人片免费看久久| 亚洲欧洲久久久精品| 要久久爱在线免费观看|