C ODBC SQL — вставка в таблицу не работает

#c #sql-server #odbc

#c #sql-сервер #odbc

Вопрос:

Я пытался вставить строку в свою таблицу SQL, я не получаю синтаксической ошибки, но, к сожалению, когда я проверяю свою таблицу в среде SQL Server Management Studio, новая запись не добавляется. При отладке повторный код становится меньше нуля, начиная с функции SQLConnect().

 int main()
{
    SQLHANDLE SQLEnvHandle = NULL;
    SQLHANDLE SQLConnectionHandle = NULL;
    SQLHANDLE SQLStatementHandle = NULL;
    SQLRETURN retCode = 0;

    // Insert Query
    char SQLQuery[] = "insert into crm.dbo.company_name values (22,'01 electronics','@01electronics.net');";
    // SQL Server Identifier
    char SQLServer[] = "DRIVER={SQL Server}; SERVER=localhost, 8000; DATABASE=xxxx; UID=xxxx_xxxx; PWD=xxxx;";

    do
    {
        // Allocate environment
        retCode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, amp;SQLEnvHandle);

        // Set ODBC Version
        retCode = SQLSetEnvAttr(SQLEnvHandle, SQL_ATTR_ODBC_VERSION,(SQLPOINTER*)SQL_OV_ODBC3, 0);

        // Allocate Connection
        retCode = SQLAllocHandle(SQL_HANDLE_DBC, SQLEnvHandle, amp;SQLConnectionHandle);

        // Set Login Timeout
        retCode = SQLSetConnectAttr(SQLConnectionHandle, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, 0);

        // Set Auto Commit
        retCode = SQLSetConnectAttr(SQLConnectionHandle, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)TRUE, 0);

        // Connect to DSN
        retCode = SQLConnect(SQLConnectionHandle, (SQLCHAR*) SQLServer, SQL_NTS, (SQLCHAR*)NULL, 0, NULL, 0);

        // Allocate Statement Handle
        retCode = SQLAllocHandle(SQL_HANDLE_STMT, SQLConnectionHandle, amp;SQLStatementHandle);

        // Prepare Statement
        retCode = SQLPrepare(SQLStatementHandle, (SQLCHAR*)SQLQuery, SQL_NTS);

        // Execute Statement    
        if (SQLExecute(SQLStatementHandle) == SQL_SUCCESS || SQLExecute(SQLStatementHandle) == SQL_SUCCESS_WITH_INFO)
            cout << "SUCCESS";
        else
            cout << "FAILURE";
    } while (FALSE);

    // Frees the resources and disconnects
    SQLFreeHandle(SQL_HANDLE_STMT, SQLStatementHandle);
    SQLDisconnect(SQLConnectionHandle);
    SQLFreeHandle(SQL_HANDLE_DBC, SQLConnectionHandle);
    SQLFreeHandle(SQL_HANDLE_ENV, SQLEnvHandle);

    getchar();
}
  

Ответ №1:

При отладке повторный код становится меньше нуля, начиная с функции SQLConnect().

Из документации:

Когда SQLConnect возвращает SQL_ERROR или SQL_SUCCESS_WITH_INFO, связанное значение SQLSTATE может быть получено путем вызова SQLGetDiagRec с типом обработки SQL_HANDLE_DBC и дескриптором ConnectionHandle

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

1. Решаемая проблема заключалась в том, что полномочия записи и редактирования в базе данных были отключены.