1
我刚刚设法建立了从Visual Studio C++应用程序到我的SQL Server的连接,但是不能为我的生活做我的声明,因为他们应该。在Visual Studio C++中执行简单的SQL查询时出错
我有一些在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服务器的可理解指南,但我已经完全无法找到它。
编辑:
show_error提供了以下错误信息:
消息:0018ED9C
SQLSTATE:0018F5A4
你会得到什么错误? –
在编辑中添加了错误消息 – geostocker
在'show_error'中使用'wcout'来代替'cout'。这样您可以打印实际的消息文本,而不是存储它的地址(这根本没有帮助)。 –