Я использую ado для подключения к моей базе данных. Я уже импортировал "msado15.dll". Я хочу вставить данные в SQL Server. Я использую параметр, но он идет к ошибке, он говорит DB_E_ERRORSOCCURRED Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.
. но если я не использую параметр (который не является рекомендуемой причиной внедрения SQL), это работает. (см. код ниже)
Правильно ли написан этот код параметра? или я должен импортировать другой "msadox.dll", потому что я где-то читал. Спасибо заранее.
_ParameterPtr NameParam, AccIDParam, BalParam;
VARIANT vLoginType;
VARIANT vNameType;
VARIANT vBalanceType;
for (int i = 0; i < size; i++)
{
int DataExistCounter = 0;
a[i].login;
a[i].name;
a[i].leverage;
a[i].balance;
a[i].group;
//_bstr_t InsertQuery("Insert Into personal(AccountID, Balance) Values(" + _bstr_t(a[i].login) + "," + _bstr_t(a[i].balance) + ")"); //this works
_bstr_t InsertQuery("Insert Into personal(AccountID, Name, Balance) Values(@AccountID, @Name, @Balance)");
pCommand->CommandText = InsertQuery;
pCommand->ActiveConnection = pConnection;
pCommand->CommandType = adCmdText;
vLoginType.vt = VT_I4;
vLoginType.intVal = a[i].login;
vNameType.vt = VT_BSTR; //VT_CARRAY p.s name is char type, idk vt_carray would be better or vt_bstr
vNameType.cyVal = _bstr_t(a[i].name);
vBalanceType.vt = VT_R8;
vBalanceType.dblVal = a[i].balance;
AccIDParam = pCommand->CreateParameter(_bstr_t("@AccountID"), adInteger, adParamInput, sizeof(int), _bstr_t(vLoginType));
pCommand->Parameters->Append((IDispatch*)AccIDParam);
NameParam = pCommand->CreateParameter(("@Name"), adVarWChar, adParamInput, 128, vNameType);
pCommand->Parameters->Append((IDispatch*)NameParam);
BalParam = pCommand->CreateParameter(_bstr_t("@Balance"), adDouble, adParamInput, sizeof(double), _bstr_t(vBalanceType));
pCommand->Parameters->Append((IDispatch*)BalParam);
pRecordset->MoveFirst();
while (!pRecordset->EndOfFile)
{
valFieldNam = pRecordset->Fields->GetItem("Name")->Value;
valFieldAcc = pRecordset->Fields->GetItem("AccountID")->Value;
valFieldBal = pRecordset->Fields->GetItem("Balance")->Value;
if (valFieldAcc == a[i].login)
{
DataExistCounter++;
}
pRecordset->MoveNext();
}
if (DataExistCounter > 0)
{
//update
}
else
{
pCommand->Execute(NULL, NULL, adExecuteNoRecords);
//pConnection->Execute(InsertQuery, NULL, adCmdText);
}
}
//closing recordest and connection