C++ operates to the database through ADO
C _ blank + operates on the database through ADO
Example: C++ writes data to sql server through ADO call stored procedure
1. Import the dynamic library of ado provided by Microsoft in the .h header file
# pragma warning (disable:4146)
# import "C:\\ Program Files\\ Common Files\ System\\ ado\\ msado15.dll" named_guids rename ("EOF", "adoEOF"), rename ("BOF", "adoBOF")
# pragma warning (default:4146)
Using namespace ADODB
two。 Write a function call stored procedure
/ / Save database records
Void SaveDbTran (char * devID,char * traceNo,char * refNo,char * batchNo, char * bankCardNo, char * tranDate, char * tranTime,char * amt,char * hosCardNo,char * hosName,char * hosIDCardNo, char * msg)
{
/ / 2.1 create a database connection handle
_ ConnectionPtr pMyConnect
HRESULT hr
Try
{
/ / 2.1.1 build connection database string
Char * dbConStr = new char [400]
Strcpy (dbConStr, "Provider=SQLOLEDB;Server=sqlserver server address, 1433 database = database name; uid= login user; pwd= login password")
CoInitialize (NULL)
Sleep (300)
/ / 2.1.2 handle instantiation to achieve connection
Hr = pMyConnect.CreateInstance ("ADODB.Connection")
If (SUCCEEDED (hr))
{
Ct.SaveLog ("database connection object created successfully, waiting for connection to be opened", 0ddbConStr)
PMyConnect- > Open (_ bstr_t (dbConStr), ",", adModeUnknown)
}
Else
{
CoUninitialize ()
Return
}
}
Catch (_ com_error & err)
{
CoUninitialize ()
Return
}
/ / 2.2 build run command parameter handle
_ CommandPtr m_pCommand
_ RecordsetPtr m_pRecordset
Try
{
/ / 2.2.1 handle instantiation
M_pCommand.CreateInstance (_ _ uuidof (Command)); / / Command does not need to change
MSecretpCommand-> ActiveConnection = pMyConnect;//pMyConnect is the connection database handle
No need to change CommandType order-> CommandType = adCmdStoredProc;//adCmdStoredProc
MroompCommand-> CommandText = _ bstr_t ("p_d_tra"); / / p_d_tra is the stored procedure name
/ / 2.2.2 set to assign values to variable parameters
_ variant_t vv_dotype,vv_TranNo,vv_devID,vv_TranDate,vv_TranTime
_ variant_t vv_RetCode,vv_BusType,vv_CardNo,vv_IDCard,vv_Name
_ variant_t vv_Amt,vv_Notes,vv_SerID,vv_DesCont,vv_tranFlag
_ variant_t vv_bankCardNo,vv_bankGroupNo,vv_bankFlowNo,vv_DevName,vv_ExeCount
/ / value to variant
Vv_dotype = _ variant_t (_ bstr_t ("1"))
Vv_TranNo = _ variant_t (_ bstr_t (temp_traceNo))
Vv_devID = _ variant_t (_ bstr_t (devID))
Vv_TranDate = _ variant_t (_ bstr_t (datetime))
Vv_TranTime = _ variant_t (_ bstr_t (datetime))
Vv_RetCode = _ variant_t (_ bstr_t (""))
Vv_BusType = _ variant_t (_ bstr_t ("14"))
Vv_CardNo = _ variant_t (_ bstr_t (hosCardNo))
Vv_IDCard = _ variant_t (_ bstr_t (hosIDCardNo))
Vv_Name = _ variant_t (_ bstr_t (hosName))
Vv_Amt = _ variant_t (_ bstr_t (amt))
Vv_Notes = _ variant_t (_ bstr_t ("transaction succeeded"))
Vv_SerID = _ variant_t (_ bstr_t (""))
Vv_DesCont = _ variant_t (_ bstr_t (""))
Vv_tranFlag = _ variant_t (_ bstr_t ("0"))
Vv_bankCardNo = _ variant_t (_ bstr_t (temp_bankCardNo))
Vv_bankGroupNo=_variant_t (_ bstr_t (batchNo))
Vv_bankFlowNo = _ variant_t (_ bstr_t (refNo))
Vv_DevName = _ variant_t (_ bstr_t (""))
Vv_ExeCount = _ variant_t (ret_ExeCount)
/ / 2.2.3 create database stored procedure input parameters
_ ParameterPtr mp_dotype,mp_TranNo,mp_devID,mp_TranDate,mp_TranTime
_ ParameterPtr mp_RetCode,mp_BusType,mp_CardNo,mp_IDCard,mp_Name
_ ParameterPtr mp_Amt,mp_Notes,mp_SerID,mp_DesCont,mp_tranFlag
_ ParameterPtr mp_bankCardNo,mp_bankGroupNo,mp_bankFlowNo,mp_DevName,mp_ExeCount
/ / 2.2.3.1 instantiate database parameters
/ / create ParameterPtr instance
Mp_dotype.CreateInstance (_ _ uuidof (Parameter))
Mp_TranNo.CreateInstance (_ _ uuidof (Parameter))
Mp_devID.CreateInstance (_ _ uuidof (Parameter))
Mp_TranDate.CreateInstance (_ _ uuidof (Parameter))
Mp_TranTime.CreateInstance (_ _ uuidof (Parameter))
Mp_RetCode.CreateInstance (_ _ uuidof (Parameter))
Mp_BusType.CreateInstance (_ _ uuidof (Parameter))
Mp_CardNo.CreateInstance (_ _ uuidof (Parameter))
Mp_IDCard.CreateInstance (_ _ uuidof (Parameter))
Mp_Name.CreateInstance (_ _ uuidof (Parameter))
Mp_Amt.CreateInstance (_ _ uuidof (Parameter))
Mp_Notes.CreateInstance (_ _ uuidof (Parameter))
Mp_SerID.CreateInstance (_ _ uuidof (Parameter))
Mp_DesCont.CreateInstance (_ _ uuidof (Parameter))
Mp_tranFlag.CreateInstance (_ _ uuidof (Parameter))
Mp_bankCardNo.CreateInstance (_ _ uuidof (Parameter))
Mp_bankGroupNo.CreateInstance (_ _ uuidof (Parameter))
Mp_bankFlowNo.CreateInstance (_ _ uuidof (Parameter))
Mp_DevName.CreateInstance (_ _ uuidof (Parameter))
Mp_ExeCount.CreateInstance (_ _ uuidof (Parameter))
/ / 2.2.3.2 append the database parameter to the end of the parameter attribute of the command variable handle
/ / append parameterPtr set to _ CommandPtr parameters lists
/ / Database parameter = command variable handle-> create parameter method (_ bstr_t ("stored procedure parameter name"), stored procedure parameter data type, stored procedure parameter input and output type, default size, variable parameter value)
Mp_dotype=m_pCommand- > CreateParameter (_ bstr_t ("dotype"), adInteger,adParamInput,-1,vv_dotype); / / Integer type
MSecretpCommand-> Parameters- > Append (mp_dotype)
Mp_TranNo=m_pCommand- > CreateParameter (_ bstr_t ("TranNo"), adVarChar,adParamInput,32,vv_TranNo); / / string type
MSecretpCommand-> Parameters- > Append (mp_TranNo)
Mp_devID=m_pCommand- > CreateParameter (_ bstr_t ("devID"), adVarChar,adParamInput,20,vv_devID)
MSecretpCommand-> Parameters- > Append (mp_devID)
Mp_TranDate=m_pCommand- > CreateParameter (_ bstr_t ("TranDate"), adVarChar,adParamInput,25,vv_TranDate); / / time type
MSecretpCommand-> Parameters- > Append (mp_TranDate)
Mp_TranTime=m_pCommand- > CreateParameter (_ bstr_t ("TranTime"), adVarChar,adParamInput,25,vv_TranTime)
MSecretpCommand-> Parameters- > Append (mp_TranTime)
Mp_RetCode=m_pCommand- > CreateParameter (_ bstr_t ("RetCode"), adVarChar,adParamInput,20,vv_RetCode)
MSecretpCommand-> Parameters- > Append (mp_RetCode)
Mp_BusType=m_pCommand- > CreateParameter (_ bstr_t ("BusType"), adInteger,adParamInput,-1,vv_BusType)
MSecretpCommand-> Parameters- > Append (mp_BusType)
Mp_CardNo=m_pCommand- > CreateParameter (_ bstr_t ("CardNo"), adVarChar,adParamInput,20,vv_CardNo)
MSecretpCommand-> Parameters- > Append (mp_CardNo)
Mp_IDCard=m_pCommand- > CreateParameter (_ bstr_t ("IDCard"), adVarChar,adParamInput,20,vv_IDCard)
MSecretpCommand-> Parameters- > Append (mp_IDCard)
Mp_Name=m_pCommand- > CreateParameter (_ bstr_t ("Name"), adVarChar,adParamInput,10,vv_Name)
MSecretpCommand-> Parameters- > Append (mp_Name)
Mp_Amt=m_pCommand- > CreateParameter (_ bstr_t ("Amt"), adDecimal,adParamInput,10,vv_Amt); / / floating point type
Mp_Amt- > NumericScale = 2; / / set the number of decimal places
Mp_Amt- > Precision = 10; / / set integer digits
MSecretpCommand-> Parameters- > Append (mp_Amt)
Mp_Notes=m_pCommand- > CreateParameter (_ bstr_t ("Notes"), adVarChar,adParamInput,2000,vv_Notes)
MSecretpCommand-> Parameters- > Append (mp_Notes)
Mp_SerID=m_pCommand- > CreateParameter (_ bstr_t ("SerID"), adVarChar,adParamInput,20,vv_SerID)
MSecretpCommand-> Parameters- > Append (mp_SerID)
Mp_DesCont=m_pCommand- > CreateParameter (_ bstr_t ("DesCont"), adVarChar,adParamInput,2000,vv_DesCont)
MSecretpCommand-> Parameters- > Append (mp_DesCont)
Mp_tranFlag=m_pCommand- > CreateParameter (_ bstr_t ("tranFlag"), adInteger,adParamInput,-1,vv_tranFlag)
MSecretpCommand-> Parameters- > Append (mp_tranFlag)
Mp_bankCardNo=m_pCommand- > CreateParameter (_ bstr_t ("bankCardNo"), adVarChar,adParamInput,25,vv_bankCardNo)
MSecretpCommand-> Parameters- > Append (mp_bankCardNo)
Mp_bankGroupNo=m_pCommand- > CreateParameter (_ bstr_t ("bankGroupNo"), adVarChar,adParamInput,12,vv_bankGroupNo)
MSecretpCommand-> Parameters- > Append (mp_bankGroupNo)
Mp_bankFlowNo=m_pCommand- > CreateParameter (_ bstr_t ("bankFlowNo"), adVarChar,adParamInput,12,vv_bankFlowNo)
MSecretpCommand-> Parameters- > Append (mp_bankFlowNo)
Mp_DevName=m_pCommand- > CreateParameter (_ bstr_t ("DevName"), adVarChar,adParamInput,40,vv_DevName)
MSecretpCommand-> Parameters- > Append (mp_DevName)
Mp_ExeCount=m_pCommand- > CreateParameter (_ bstr_t ("ExeCount"), adInteger,adParamOutput,-1,vv_ExeCount); / / output type
MSecretpCommand-> Parameters- > Append (mp_ExeCount)
/ / 2.2.4 get the result by execution
_ variant_t vNull
VNull.vt = VT_ERROR
VNull.scode = DISP_E_PARAMNOTFOUND
/ / 2.2.4.1 execute database stored procedures
M_pRecordset = mSecretpCommand-> Execute (& vNull,&vNull,adCmdStoredProc); / / adCmdStoredProc do not change
/ / the result of executing SQL in m_pRecordset can be used to determine the success and the cause of error.
If (mp_ExeCount- > Value! = 0)
{
Ct.SaveLog ("failed to insert data", 0, ")
}
Else
{
Ct.SaveLog ("data inserted successfully", 0, ")
}
}
Catch (_ com_error & err)
{
If (pMyConnect- > State) pMyConnect- > Close ()
PMyConnect = NULL
CoUninitialize ()
}
/ / 2.2.5 close the connection and release resources
If (pMyConnect- > State) pMyConnect- > Close ()
PMyConnect = NULL
CoUninitialize (); / / remember to call whether it succeeds or not to release resources
Return
}