VC存儲過程

最近由於工作之需,要利用VC進行一些高級的數據庫操作,如執行存儲過程等。遍尋網絡資源發現好使的不多(經常#30XX錯誤,大部分應該是COM的VARIANT數據類型所致,其實有個討巧的方法,請看下文),在自己的實驗下小有所得。記下學習筆記以備參考:

1 進行ADO編程的必備步驟:引入msado15.dll

#import "c:/program files/common files/system/ado/msado15.dll" no_namespace rename("EOF","adoEOF")//避免與文件的結束符號混淆,將EOF改爲adoEOF

當然要記得在所有#include之後加入啊


2 也是必備的:初始化Com庫

::CoInitialize(NULL);///初始化COM庫

3 建立數據庫連接

_ConnectionPtr m_pConnection;//連接數據庫的Com智能指針,可以自動Release ^_^
m_pConnection.CreateInstance("ADODB.Connection");//建立實例返回HRESULT 所以最好if一下看看成功否

4 連接數據庫

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);

   .........//其他數據庫操作
}
catch(_com_error e)
{
   //處理錯誤吧
}

5 創建執行存儲過程的命令對象

_CommandPtr m_pCommand;//還是智能指針
m_pCommand.CreateInstance("ADODB.Command");//實例
m_pCommand->ActiveConnection = m_pConnection;//設置連接,別忘了啊
m_pCommand->CommandText = "Test";//存儲過程爲Test

假設我的存儲過程如下:
   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 建立傳入存儲過程的參數

存儲過程Test中輸入參數id,name,sdate 輸出參數ret 記住他們的類型和大小啊

下面就來創建4個參數

VC中用_ParameterPtr智能指針來建立參數,具體如下:

_ParameterPtr m_pParam;
m_pParam.CreateInstance("ADODB.Parameter");

_ParameterPtr m_pParam1;//附加數字的命名習慣不好別學我啊
m_pParam1.CreateInstance("ADODB.Parameter");

_ParameterPtr m_pParam2;
m_pParam2.CreateInstance("ADODB.Parameter");

_ParameterPtr m_pParamRet;
m_pParamRet.CreateInstance("ADODB.Parameter");

別高興還沒有真正的建立好參數

m_pParam = m_pCommand->CreateParameter("id",adInteger,adParamInput,-1,(_variant_t)"10");//給參數設置各屬性
m_pCommand->Parameters->Append(m_pParam);//加入到Command對象的參數集屬性中

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);

//


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


大功告成,執行吧

m_pCommand->Execute(NULL,NULL,adCmdStoredProc);
//


數據庫裏已經有了一條新記錄了,看看

id name   sdate
10 songwenfeng 2004-6-8

7 最後一步,關閉連接,釋放Com,走人!!

m_pConnection->Close();
CoUninitialize();

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章