久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

VC++調(diào)用帶參數(shù)的存儲過程

 MikeDoc 2010-09-08
最近由于工作之需,要利用VC進(jìn)行一些高級的數(shù)據(jù)庫操作,,如執(zhí)行存儲過程等。遍尋網(wǎng)絡(luò)資源發(fā)現(xiàn)好使的不多(經(jīng)常#30XX錯誤,大部分應(yīng)該是COM的VARIANT數(shù)據(jù)類型所致,,其實有個討巧的方法,請看下文),,在自己的實驗下小有所得,。記下學(xué)習(xí)筆記以備參考:
1 進(jìn)行ADO編程的必備步驟:引入msado15.dll
 #import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")//避免與文件的結(jié)束符號混淆,將EOF改為adoEOF
 當(dāng)然要記得在所有#include之后加入啊

2 也是必備的:初始化Com庫
 ::CoInitialize(NULL);///初始化COM庫
3 建立數(shù)據(jù)庫連接
 _ConnectionPtr m_pConnection;//連接數(shù)據(jù)庫的Com智能指針,,可以自動Release ^_^
 m_pConnection.CreateInstance("ADODB.Connection");//建立實例返回HRESULT 所以最好if一下看看成功否
4 連接數(shù)據(jù)庫
 m_pConnection->Open("Driver={SQL Server};Server=localhost;Database=Northwind;UID=sa;PWD=wxy","","",adModeUnknown);
 
 最好用Try的,,可以捕獲錯誤啊,例如
 try
 {
 m_pConnection->Open("Driver={SQL Server};Server=localhost;Database=Northwind;UID=sa;PWD=wxy","","",adModeUnknown);
  .........//其他數(shù)據(jù)庫操作
 }
 catch(_com_error e)
 {
  //處理錯誤吧
 }
5 創(chuàng)建執(zhí)行存儲過程的命令對象
 _CommandPtr m_pCommand;//還是智能指針
 m_pCommand.CreateInstance("ADODB.Command");//實例
 m_pCommand->ActiveConnection = m_pConnection;//設(shè)置連接,,別忘了啊
 m_pCommand->CommandText = "Test";//存儲過程為Test
 假設(shè)我的存儲過程如下:
  CREATE PROCEDURE Test
  @id int,
  @Name varchar(20),
  @sdate datetime,
  @ret char(1) output
   AS
  insert into VCStorproc values(@id,@Name,@sdate)
  if @@error=0
   set @ret=1
  else
   set @ret=0
  go
 
6 建立傳入存儲過程的參數(shù)
 存儲過程Test中輸入?yún)?shù)id,name,sdate 輸出參數(shù)ret  記住他們的類型和大小啊
 下面就來創(chuàng)建4個參數(shù)
 VC中用_ParameterPtr智能指針來建立參數(shù),,具體如下:
 _ParameterPtr m_pParam;
 m_pParam.CreateInstance("ADODB.Parameter");
 _ParameterPtr m_pParam1;//附加數(shù)字的命名習(xí)慣不好別學(xué)我啊
 m_pParam1.CreateInstance("ADODB.Parameter");
 _ParameterPtr m_pParam2;
 m_pParam2.CreateInstance("ADODB.Parameter");
 _ParameterPtr m_pParamRet;
 m_pParamRet.CreateInstance("ADODB.Parameter");
 別高興還沒有真正的建立好參數(shù)
 m_pParam = m_pCommand->CreateParameter("id",adInteger,adParamInput,-1,(_variant_t)"10");//給參數(shù)設(shè)置各屬性
 m_pCommand->Parameters->Append(m_pParam);//加入到Command對象的參數(shù)集屬性中
 m_pParam1 = m_pCommand->CreateParameter("Name",adVarChar,adParamInput,20,(_variant_t)"songwenfeng");
 m_pCommand->Parameters->Append(m_pParam1);
 m_pParam2 = m_pCommand->CreateParameter("sdate",adVarChar,adParamInput,32,(_variant_t)"2004-6-8");
 m_pCommand->Parameters->Append(m_pParam2);
 
 //**************
  這里有個問題:就是DateTime數(shù)據(jù)類型要用adVarChar來傳遞,由于我們的時間格式為XXXX-XX-XX XX:XX:XX所以32位足夠了,,有時我們會用adDate或adDBDate類型來傳遞DateTime,,這就是導(dǎo)致error #3015的原因之一,當(dāng)然用它來傳遞應(yīng)該是可以的,,但是小弟至今沒有成功過,,哪位大蝦知道告訴小弟一聲啊
*******//

 m_pParamRet=m_pCommand->CreateParameter("ret",adChar,adParamOutput,1);
 m_pCommand->Parameters->Append(m_pParamRet);

 大功告成,執(zhí)行吧
 m_pCommand->Execute(NULL,NULL,adCmdStoredProc);
 //***
 第一個參數(shù)是被影響的記錄數(shù)是一個VARIANT的指針變量,,需要的話設(shè)個變量取過來就是了 但是MSDN說
 The RecordsAffected parameter applies only for action queries or stored procedures. RecordsAffected does not return the number of records returned by a result-returning query or stored procedure. To return this information, use the RecordCount property,。就是說有返回值的存儲過程是不會返回影響的記錄數(shù)的,要使用RecordCount屬性
 第二個參數(shù)是指向Parameters的VARIANT指針,,是可選的,,既然設(shè)置好了參數(shù)指針就把它設(shè)為NULL吧,。MSDN說
A Variant array of parameter values passed with an SQL statement. (Output parameters will not return correct values when passed in this argument.)用這個參數(shù)的話輸出參數(shù)將不會返回正確的值。微軟是不是挺有意思
*************//

 數(shù)據(jù)庫里已經(jīng)有了一條新記錄了,,看看
 id name  sdate
 10 songwenfeng 2004-6-8
7 最后一步,,關(guān)閉連接,釋放Com,,走人?。?/div>
 m_pConnection->Close();
 CoUninitialize();

 VC操作數(shù)據(jù)庫真是麻煩帶氣人,,不過微軟在.net中做的十分不錯,,畢竟現(xiàn)在VC在數(shù)據(jù)庫工程中已經(jīng)很少用了(除非要求很高的效率),可是對一些老程序還得更新不是,。
 
本文來自CSDN博客,,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/aa211314/archive/2008/02/28/2128756.aspx

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多