• <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 閱讀(618) 評論(0)  編輯 收藏 引用
            中文字幕精品无码久久久久久3D日动漫| 无码超乳爆乳中文字幕久久| 国产精品久久久99| 无码人妻少妇久久中文字幕| 中文字幕精品久久久久人妻| 久久精品中文字幕无码绿巨人| 久久综合综合久久97色| 日韩精品久久久久久久电影| 国产精品一久久香蕉产线看| 久久婷婷五月综合色99啪ak| 久久精品国产亚洲av麻豆色欲| 狠狠色综合网站久久久久久久| 亚洲欧美日韩精品久久亚洲区 | 久久久亚洲欧洲日产国码aⅴ | 久久久精品波多野结衣| 亚洲精品无码久久久久sm| 无码人妻久久一区二区三区蜜桃| 青青国产成人久久91网| 久久人妻AV中文字幕| 国内精品免费久久影院| 久久久久一区二区三区| 久久久久成人精品无码中文字幕 | 青青青国产成人久久111网站| 精品国产乱码久久久久久人妻 | 久久精品国产男包| 一级女性全黄久久生活片免费 | 一级做a爰片久久毛片人呢| 一本色道久久88综合日韩精品| 九九精品99久久久香蕉| 欧美激情精品久久久久久久| 美女写真久久影院| 久久婷婷综合中文字幕| 99久久久精品| 丁香狠狠色婷婷久久综合| 国产欧美一区二区久久| 97久久久精品综合88久久| 国产成人精品久久二区二区| 久久天堂电影网| 亚洲第一永久AV网站久久精品男人的天堂AV | 国产精品亚洲综合专区片高清久久久| 久久精品免费一区二区三区|