我试图从新创建的C++应用程序连接到本地SQL Server 2008实例。我仍然在学习C++,所以我可能会错过一些明显的东西。C++ ODBC SQL Server 2008连接
我正在使用Microsoft Visual Studio 2010,创建一个Win32控制台应用程序作为空白项目并添加main.cpp自己。
SQL Server实例已启动并正在运行,我可以使用SQL或集成认证从其他计算机连接到它,我甚至可以让我的C#应用程序使用.net对象进行连接。
但是在C++中,我只是无法获得连接,它总是报告失败。
到目前为止我的代码如下所示
#include <iostream>
#include <windows.h>
#include <sqltypes.h>
#include <sql.h>
#include <sqlext.h>
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=(local)\DB1;DATABASE=master;UID=sa;PWD=password;", 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";
}
std::cin.get();
return 0;
}
我已经根据这个上看到一些网上的例子如http://www.easysoft.com/developer/languages/c/odbc_tutorial.html
一直以来,我的代码是进入到无法连接块,即使有效的凭据。并尝试从上面链接的文章中使用extract_error,根本不会产生任何错误消息。
我在这里做错了什么?由于
'(SQLWCHAR *)'是一个明显的错误。尝试使用'L'而不是使字符串文字变成宽字符串文字。 – ildjarn 2012-07-17 20:09:44
谢谢,现在需要更长的时间。需要一分钟左右才能返回“无法连接”。 – Elarys 2012-07-17 20:17:42
我记得,默认的连接超时时间是60秒,所以你可能会遇到这种情况。检查你的SQL协议设置,如果它被配置为在本地使用TCP,请检查你的防火墙设置。 – ildjarn 2012-07-17 20:19:02