Как исправить ошибку выполнения соединения с использованием ADO в C

#c #sql-server #ado #execute

#c #sql-сервер #ado #выполнить

Вопрос:

Я использую ado для подключения SQL Server в моем проекте на C .

Итак, я хочу вставить / обновить свою базу данных, и я написал несколько запросов (см. Код), и я пытаюсь выполнить свое соединение или команду.

Но при pConnection->Execute(InsertQuery, NULL, adCmdUnspecified); этом появляется сообщение об ошибке Microsoft C exception: _com_error at memory location , а в окне отладки появляется _hr со значением _hr : DB_E_ERRORSINCOMMAND One or more errors occurred during processing of command. TYPE: HRESULT

Я также пытался выполнить команду, но у меня тот же результат, что и при подключении.

Должен ли я изменить adCmdUnspecified на что-то или я где-то ошибаюсь? Каково решение? Заранее благодарю вас.

 //connections above
VARIANT vNameStringType;

_bstr_t InsertQuery(L"Insert Into TestTB(AccountID, Name) Values(@AccountID, @Name)");

hr = pCommand.CreateInstance(__uuidof(Command));

pCommand->ActiveConnection = pConnection;
pCommand->CommandText = InsertQuery;
pCommand->CommandType = adCmdText;

for (int i = 0; i < size; i  )
{
    a[i].name;
    a[i].login;

    vIntegerType.vt = VT_I4;
    vIntegerType.intVal = a[i].login;
    vNameStringType.vt = VT_BSTR;
    vNameStringType.bstrVal = _bstr_t(a[i].name);

    int DataExistCounter = 0;       

    NameParam = pCommand->CreateParameter(_bstr_t("@Name"), adVarChar, adParamInput, 150, _bstr_t(vNameStringType));
    pCommand->Parameters->Append(NameParam);
    AccIDParam = pCommand->CreateParameter("@AccountID", adInteger, adParamInput, sizeof(int), vIntegerType);
    pCommand->Parameters->Append(AccIDParam);
    pRecordset->MoveFirst();
    while (!pRecordset->EndOfFile)
    {
        valFieldNam = pRecordset->Fields->GetItem("Name")->Value;
        valFieldAcc = pRecordset->Fields->GetItem("AccountID")->Value;
        if (valFieldAcc == a[i].login)
        {
            DataExistCounter  ;
        }
        pRecordset->MoveNext();
    }

    if (DataExistCounter > 0)
    {
        //update    
    }
    else
    {
        pConnection->Execute(InsertQuery, NULL, adCmdUnspecified);
    }
}
pRecordset->Close();
pConnection->Close();
CoUninitialize();
  

Комментарии:

1. Какие еще сообщения об ошибках вы получаете? Я не знаю ADO в C , но я был бы очень удивлен, если бы не было других сообщений, дополняющих то, которое вы разместили здесь.

2. у меня нет никакой другой ошибки, кроме этой

3. Если действительно нет другого сообщения об ошибке, то это первый случай за ~ 20 лет моего программирования, когда сообщение ADO «произошла одна или более ошибок» не сопровождалось другими сообщениями об ошибках. Как вы подтвердили, что ваш pConnection объект действителен и подключен?

4. я использую строку подключения, которую я создал с помощью ODBC, но если я использую полное имя строки подключения, это не работает ("Provider=sqloledb; Data Source=...\SQLEXPRESS;Initial Catalog=TestDB;Integrated Security=True") вот мое соединение, и ошибки нет _bstr_t strCon("ADOSQL"); hr = pConnection.CreateInstance(__uuidof(Connection)); hr = pConnection->Open(strCon, "", "", adConnectUnspecified); if (FAILED(hr)) { printf("Error Opening Database object using ADO _ConnectionPtr n"); }

5. спасибо, этот вопрос, возможно, поможет мне