我刚刚设法从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;
}
据我所知,我的代码
你们可以看一下,看看我可能犯过什么样的错误吗?
如果有关于如何使用C ++应用程序设置SQL Server的任何可理解的指南,我不会问这么简单的问题,但我完全找不到。
修改
show_error显示以下错误消息:
消息:0018ED9C
SQLSTATE:0018F5A4
答案 0 :(得分:0)
似乎SQLExecDirect不喜欢我明确地使用“USE Easier”的事实,因为它已经在连接字符串中声明了。