C ++ ODBC SQL-插入表不起作用

时间:2019-04-15 16:06:05

标签: c++ sql-server odbc

我一直试图在SQL表中插入一行,但没有语法错误,但是很遗憾,当我在SQL Server Management Studio中检查表时,没有添加新条目。调试时,从SQLConnect()函数开始,retCode会变得小于零。

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, &SQLEnvHandle);

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

        // Allocate Connection
        retCode = SQLAllocHandle(SQL_HANDLE_DBC, SQLEnvHandle, &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, &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 个答案:

答案 0 :(得分:0)

  

调试时,retCode从SQLConnect()函数开始小于零。

来自docs

  

当SQLConnect返回SQL_ERROR或SQL_SUCCESS_WITH_INFO时,   可以通过调用SQLGetDiagRec获得关联的SQLSTATE值   具有SQL_HANDLE_DBC的HandleType和ConnectionHandle的句柄