我一直致力于一个应用程序(在VC ++上开发)。 通过使用此应用程序,我必须通过ODBC连接到SQL。我们有自己的数据源,用户名和密码。
此应用程序运行良好(我的意思是SQL连接)可以使用Windows 2003 + SQL 2008操作系统。 但这与Windows 2008 + SQL 2008不一样。
我怀疑很少有SQL API / ODBC API被更改。
以下是示例代码。你能告诉我Windows 2008 + SQL 2008环境中出了什么问题。
=============================================== ==============
BOOL ODBWithTimeout(char *DbSource, char *UserName, char *Password, char *DbName, int sec)
{
RETCODE rc;
HSTMT hstmt;
char szBuffer[MAX_QUERY_LENGTH];
SQLHANDLE EnvHandle;
rc = SQLAllocEnv(&henv);
if (rc==SQL_ERROR)
{
return FALSE;
}
rc = SQLAllocConnect(henv, &hdbc);
if (rc==SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO);
else
{
SQLFreeEnv(henv);
// return DbErrorHandler(NULL,"SQLSetConnectOption");
return FALSE;
}
rc=SQLSetConnectOption(hdbc,SQL_LOGIN_TIMEOUT,sec);
if (rc==SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO)
;
else
{
SQLFreeConnect(hdbc);
SQLFreeEnv(henv);
// return DbErrorHandler(NULL,"SQLSetConnectOption");
return FALSE;
}
rc=SQLSetConnectOption(hdbc,SQL_AUTOCOMMIT,SQL_AUTOCOMMIT_OFF);
if (rc==SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO)
;
else
{
SQLFreeConnect(hdbc);
SQLFreeEnv(henv);
// return DbErrorHandler(NULL,"SQLSetConnectOption");
return FALSE;
}
rc=SQLSetConnectOption(hdbc, SQL_PACKET_SIZE, 10240);
rc=SQLConnect(hdbc,DbSource,SQL_NTS,UserName,SQL_NTS,Password,SQL_NTS);
if (rc==SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO)
{
rc = SQLAllocStmt(hdbc, &hstmt);
if ((rc == SQL_SUCCESS) || (rc == SQL_SUCCESS_WITH_INFO))
{
strcpy(szBuffer, "SET ANSI_NULL_DFLT_ON OFF");
rc = SQLExecDirect(hstmt, (UCHAR*)szBuffer, SQL_NTS);
SQLFreeStmt(hstmt, SQL_DROP);
}
//turn off SET QUOTED_IDENTIFIER OFF
//
rc = SQLAllocStmt(hdbc, &hstmt);
if ((rc == SQL_SUCCESS) || (rc == SQL_SUCCESS_WITH_INFO))
{
strcpy(szBuffer, "SET QUOTED_IDENTIFIER OFF");
rc = SQLExecDirect(hstmt, (UCHAR*)szBuffer, SQL_NTS);
SQLFreeStmt(hstmt, SQL_DROP);
}
SQLAllocStmt(hdbc,&hstmt);
wsprintf(usedb,"use %s",DbName);
rc=SQLExecDirect(hstmt,usedb,SQL_NTS);
if (rc==SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO)
{
rc=SQLTransact(henv,hdbc,SQL_COMMIT);
}
// else return DbErrorHandler(hstmt,"OpenDatabase");
else
{
return FALSE;
}
}
else
{
SQLFreeConnect(hdbc);
SQLFreeEnv(henv);
// return DbErrorHandler(NULL,"OpenDatabase");
return FALSE;
}
return TRUE;
}
=============================================== ==============
感谢您的帮助。
谢谢, JAG
==================== 我的应用程序无法在此特定环境中与SQL建立连接:Windows 2008 + SQL 2008