Get the App
SLTechnology News&Howtos  ›  Database  › 

C++ operates to the database through ADO

Shulou Source: shulou.com Published: 2022-06-01 11:38:16 10月03日 Update

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

}

Tags: Data database parameters procedures storage handles types success instances commands digits variables characters strings results resources variable input output C++ Apple Docker Huawei Linux macOS MariaDB Microsoft MySQL NVidia OPPO Reno Xiaomi Linux Apple Shulou Information Huawei