繁体   English   中英

[Microsoft] [ODBC驱动程序管理器]找不到数据源名称,未指定默认驱动程序

[英][Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

我正在尝试使用以下代码在C ++中连接SQL Server,但出现相同的错误“ [[Microsoft] [ODBC Driver Manager]数据源名称未找到,未指定默认驱动程序”

SQLHANDLE sqlenvhandle;    
SQLHANDLE sqlconnectionhandle;
SQLHANDLE sqlstatementhandle;
SQLRETURN retcode;

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;

    SQLWCHAR retconstring[1024];
    switch(SQLDriverConnect (sqlconnectionhandle, NULL, 
        (SQLWCHAR*)"DRIVER={SQL Server};SERVER=(IPADDRESS\\SQLEXPRESS);DATABASE=test;UID=sa;PWD=abcd$1234;",
        SQL_NTS, retconstring, 1024, NULL,SQL_DRIVER_NOPROMPT))
    {
    case SQL_SUCCESS_WITH_INFO:
        //show_error(SQL_HANDLE_DBC, sqlconnectionhandle);
        retcode = 0;
        break;
    case SQL_INVALID_HANDLE:
    case SQL_ERROR:
        //show_error(SQL_HANDLE_DBC, sqlconnectionhandle);
        SQLWCHAR sqlstate[1024];
        SQLWCHAR message[1024];
        if(SQL_SUCCESS == SQLGetDiagRec(SQL_HANDLE_DBC, sqlconnectionhandle, 1, sqlstate, NULL, message, 1024, NULL))
        {
            retcode = -1;
            break;
        }
    default:
        break;
    }

    if(retcode == -1)
        break;

    if(SQL_SUCCESS!=SQLAllocHandle(SQL_HANDLE_STMT, sqlconnectionhandle, &sqlstatementhandle))
        break;

    if(SQL_SUCCESS!=SQLExecDirect(sqlstatementhandle, (SQLWCHAR*)"select * from testtable", SQL_NTS))
    {
        //show_error(SQL_HANDLE_STMT, sqlstatementhandle);

        break;
    }
    else
    {
        char name[64];
        char address[64];
        int id;
        while(SQLFetch(sqlstatementhandle)==SQL_SUCCESS)
        {
            SQLGetData(sqlstatementhandle, 1, SQL_C_ULONG, &id, 0, NULL);
            SQLGetData(sqlstatementhandle, 2, SQL_C_CHAR, name, 64, NULL);
            SQLGetData(sqlstatementhandle, 3, SQL_C_CHAR, address, 64, NULL);
        }
    }
}
while(FALSE);
SQLFreeHandle(SQL_HANDLE_STMT, sqlstatementhandle );
SQLDisconnect(sqlconnectionhandle);
SQLFreeHandle(SQL_HANDLE_DBC, sqlconnectionhandle);
SQLFreeHandle(SQL_HANDLE_ENV, sqlenvhandle);

当前配置如下:

  • SQL服务正在运行。
  • TCP / IP也已启用。
  • 在ODBC中,系统DNS名称设置为“ SQL Server”。
  • ODBC Source管理员目标是“%windir%\\ System32 \\ odbcad32.exe”。
  • 尝试用IP地址替换连接字符串,并还添加了端口1433。

但是对于所有这些设置都会遇到相同的错误。

请让我知道我是否丢失任何东西,或者是否需要更改我的连接字符串,或者是否有任何其他方法可以使用C ++连接SQL Server。

我刚刚在连接字符串参数中添加了_T,并且它起作用了。

(SQLWCHAR*)_T("DRIVER={SQL Server};SERVER=(IPADDRESS\\SQLEXPRESS); 
DATABASE=test; UID=sa;PWD=abcd$1234;")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM