2012-07-17 210 views
2

我试图从新创建的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,根本不会产生任何错误消息。

我在这里做错了什么?由于

+1

'(SQLWCHAR *)'是一个明显的错误。尝试使用'L'而不是使字符串文字变成宽字符串文字。 – ildjarn 2012-07-17 20:09:44

+0

谢谢,现在需要更长的时间。需要一分钟左右才能返回“无法连接”。 – Elarys 2012-07-17 20:17:42

+0

我记得,默认的连接超时时间是60秒,所以你可能会遇到这种情况。检查你的SQL协议设置,如果它被配置为在本地使用TCP,请检查你的防火墙设置。 – ildjarn 2012-07-17 20:19:02

回答

3

从评论转贴这样的问题可以被关闭:

  • (SQLWCHAR*)是一个明显的错误。尝试L而不是使字符串文字为字符串文字。

  • 默认的连接超时时间是60秒,所以你可能会遇到这种情况。检查你的SQL协议设置,如果它被配置为在本地使用TCP,请检查你的防火墙设置。

+0

伟大的职位,一些VC++ ODBC连接的例子没有提到这个! – hkdeveloper758 2012-12-28 03:38:42