如何解决视觉工作室-SQLDriverConnect失败返回SQL_ERROR
我正在尝试连接到我从C ++中的Visual Studio 2017在SQL Server Management Studio中创建的数据库,但是函数SQLDriverConnect无法连接,由于某些原因它失败并返回SQL_ERROR。
这是我正在使用的代码:(我是从互联网上获得的,并且在许多其他网站上也看到了)
#include <iostream>
#include <windows.h>
#include <sqlext.h>
#include <sqltypes.h>
#include <sql.h>
using namespace std;
void showSQLError(unsigned int handleType,const SQLHANDLE& handle)
{
SQLCHAR SQLState[1024];
SQLCHAR message[1024];
if (SQL_SUCCESS == SQLGetDiagRec(handleType,handle,1,SQLState,NULL,message,1024,NULL))
cout << "SQL driver message: " << message << "\nSQL state: " << SQLState << "." << endl;
}
int main()
{
SQLHANDLE SQLEnvHandle = NULL;
SQLHANDLE SQLConnectionHandle = NULL;
SQLHANDLE SQLStatementHandle = NULL;
SQLRETURN retCode = 0;
do {
if (SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&SQLEnvHandle))
break;
if (SQL_SUCCESS != SQLSetEnvAttr(SQLEnvHandle,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,0))
break;
if (SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_DBC,SQLEnvHandle,&SQLConnectionHandle))
break;
if (SQL_SUCCESS != SQLSetConnectAttr(SQLConnectionHandle,SQL_LOGIN_TIMEOUT,(SQLPOINTER)5,0))
break;
SQLCHAR retConString[1024];
switch (SQLDriverConnect(SQLConnectionHandle,(SQLCHAR*)"DRIVER={SQL Server}; SERVER=DESKTOP-MYSERVER\\SQLEXPRESS,1433; DATABASE=mydatabase; UID=sa; PWD=mypassword;",SQL_NTS,retConString,SQL_DRIVER_NOPROMPT)) {
case SQL_SUCCESS:
std::cout << "YES" << std::endl;
break;
case SQL_SUCCESS_WITH_INFO:
std::cout << "YES" << std::endl;
break;
case SQL_NO_DATA_FOUND:
showSQLError(SQL_HANDLE_DBC,SQLConnectionHandle);
retCode = -1;
break;
case SQL_INVALID_HANDLE:
showSQLError(SQL_HANDLE_DBC,SQLConnectionHandle);
retCode = -1;
break;
case SQL_ERROR:
cout << "Here" << endl; // it is failing here <<<<<<
showSQLError(SQL_HANDLE_DBC,SQLConnectionHandle);
retCode = -1;
break;
default:
break;
}
if (retCode == -1)
break;
if (SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_STMT,SQLConnectionHandle,&SQLStatementHandle))
break;
//Some sql query execution after connecting to the database.
} while (FALSE);
SQLFreeHandle(SQL_HANDLE_STMT,SQLStatementHandle);
SQLDisconnect(SQLConnectionHandle);
SQLFreeHandle(SQL_HANDLE_DBC,SQLConnectionHandle);
SQLFreeHandle(SQL_HANDLE_ENV,SQLEnvHandle);
getchar();
}
我已经尝试了Internet上建议的所有可能解决方案,例如以管理员身份运行VS,将Trusted_Connection=yes;
代替UID / PWD,将localhost
放入SERVER,或者有些建议我应该启用TCP / SQL Server配置中的IP和命名管道以及服务中的SQL Server浏览器。
但是这些都不起作用,我将用户名为sa
的数据库添加到ODBC DSN用户和DSN系统,也没有运气。
这就是我在控制台中得到的:
我错过了什么吗?怎么回事?
预先感谢
解决方法
任何人都遇到问题,我通过在SQL Server配置> TCP / IP>属性> IP地址选项卡(最后)中添加端口1433来解决此问题。 同时启用TCP / IP。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。