2017-11-04 1 views
0

는 : RC2가 값을 얻을 것이다 동안SQLDriverConnect에 오류가 나는의 SQLDriverConnect를 사용하여 Microsoft SQL 데이터베이스에 연결하려고 어떤 진단 출력

int DatabaseHelper::ConnectDatabase() 
{ 
    SQLSMALLINT i, MsgLen; 
    SQLWCHAR SqlState[6]; 
    SQLRETURN rc2; 
    SQLINTEGER NativeError[1]; 
    SQLWCHAR Msg[SQL_MAX_MESSAGE_LENGTH]; 
    retCode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &sqlEnvHandle); 
    if (retCode != SQL_SUCCESS) 
     return retCode; 
    retCode = SQLSetEnvAttr(sqlEnvHandle, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0); 
    if (retCode != SQL_SUCCESS) 
     return retCode; 
    retCode = SQLAllocHandle(SQL_HANDLE_DBC, sqlEnvHandle, &sqlConnectionHandle); 
    if (retCode != SQL_SUCCESS) 
     return retCode; 
    retCode = SQLDriverConnect(sqlConnectionHandle, NULL, (SQLWCHAR*)L"Driver={SQL Server Native Client 11.0};Server = 192.168.56.56\SQLEXPRESS;Database = PCTOOLS; Uid = sa; Pwd = delphi2006; ", SQL_NTS, retConString, 1024, NULL, SQL_DRIVER_NOPROMPT); 
    i = 1; 
    rc2 = SQLGetDiagRec(SQL_HANDLE_STMT, sqlConnectionHandle, i, SqlState, NativeError, 
     Msg, sizeof(Msg), &MsgLen); 
    return retCode; 
} 

실행, RETCODE, 값 -1을 얻는다 -2. SqlState, NativeError 또는 Msg에 반환 된 값은 없습니다 (초기화되지 않은 값으로 유지됩니다). Visual C++ 2015를 사용 중입니다.

+0

생각 ++ ? –

답변

0

Server = 속성은 SQLDriverConnect 행에 의심됩니다.

Server = 192.168.56.56\\SQLEXPRESS (이중 백 슬래시에 유의하십시오)을 사용하여 전달하려는 단일 백 슬래시를 이스케이프 처리하십시오.

1

올바른 방향을 가리키는 Phil에게 감사드립니다.

서버 이름에 단일 백 슬래시가 있고 연결 문자열의 특성 사이에 공백이 있기 때문에 SQLDriverConnect가 실패했습니다.

SQLGetDiagRec 인해 잘못된 핸들 타입에 실패 - SQL_HANDLE_DBC

을 했어야

이 수정의 SQLDriverConnect 전화 :

retCode = SQLDriverConnect(sqlConnectionHandle, NULL, (SQLWCHAR*)L"Driver={SQL Server Native Client 11.0};Server=192.168.56.56\\SQLEXPRESS;Database=PCTOOLS;Uid=sa;Pwd=delphi2006;", SQL_NTS, retConString, 1024, &dwLength, SQL_DRIVER_NOPROMPT); 

올바른 SQLGetDiagRec 전화 : 그리고 당신은 C와 that'sa 문제를

rc2 = SQLGetDiagRec(SQL_HANDLE_DBC, sqlConnectionHandle, i, SqlState, NativeError, 
     Msg, sizeof(Msg), &MsgLen); 
관련 문제