在Visual Studio c ++中执行简单SQL查询时出错

时间:2016-03-06 15:31:17

标签: c++ sql-server visual-c++

我刚刚设法从Visual Studio c ++应用程序建立了与我的SQL Server的连接,但在我的生活中不能让我的语句按照他们应该的方式工作。

我有一些在SQL Server中创建中大型脚本的经验,但由于某些原因,下面的代码只是给我错误,而不是让我获取数据并完成它。

正如我所提到的,我对连接没有任何问题,因为在检查连接状态时我没有发现任何错误。

这是我的代码:

#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <sqltypes.h>
#include <sql.h>
#include <sqlext.h>
using namespace std;

void show_error(unsigned int handletype, const SQLHANDLE& handle)
{
    SQLWCHAR sqlstate[1024];
    SQLWCHAR message[1024];
    if (SQL_SUCCESS == SQLGetDiagRec(handletype, handle, 1, sqlstate, NULL, message, 1024, NULL))
        cout << "Message: " << message << "\nSQLSTATE: " << sqlstate << endl;
}

int main() {

    SQLHENV env;
    SQLHDBC dbc;
    SQLHSTMT stmt;
    SQLRETURN ret;
    SQLSMALLINT columns;
    int row = 0;

    /* Allocate an environment handle */
    SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
    /* We want ODBC 3 support */
    SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0);
    /* Allocate a connection handle */
    SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);

    /* Connect to the DSN */
    SQLDriverConnectW(dbc, NULL, L"DRIVER={SQL Server};SERVER=DESKTOP-L5OT4OH\\SQLEXPRESS;DATABASE=Easier;UID=geo;PWD=password123;", SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE);

    /* Check for success */
    if (SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt))
    {
        std::cout << "Failed to connect";
    }
    if (SQL_SUCCESS != SQLExecDirect(stmt, (SQLWCHAR*)" USE Easier select personid from dbo.TPERSON", SQL_NTS)) {
        show_error(SQL_HANDLE_STMT, stmt);
    }
    else {
        int id;
        while (SQLFetch(stmt) == SQL_SUCCESS) {
            SQLGetData(stmt, 1, SQL_C_ULONG, &id, 0, NULL);
            cout << id << endl;
        }
    }

    return 0;
}

据我所知,我的代码

  • 通过ODBC(?)
  • 建立与本地SQL Server数据库的连接
  • 检查连接
  • 尝试创建并执行一个非常基本的SQL查询(在我的SQL管理器中工作,在任何人要求之前)。
  • 遍历获取的数据以解析并将数据发送到cout。

你们可以看一下,看看我可能犯过什么样的错误吗?

如果有关于如何使用C ++应用程序设置SQL Server的任何可理解的指南,我不会问这么简单的问题,但我完全找不到。

修改

show_error显示以下错误消息:

  

消息:0018ED9C

     

SQLSTATE:0018F5A4

1 个答案:

答案 0 :(得分:0)

似乎SQLExecDirect不喜欢我明确地使用“USE Easier”的事实,因为它已经在连接字符串中声明了。