トップ回答者
VC++で作成したアプリを64bitOSで実行すると、SQL Server 2008 express R2に接続できない

質問
-
VC++で作成した下記ソースのアプリを64bitOS(Windows2008)で実行すると、SQL Server 2008 Express R2に接続できません。(SQLConnectがエラーになります)
接続先がSQL Server 2008 Standardだと接続が成功します。またExpressでも、アプリを実行するOSが32bitだと接続が成功します。
ODBCの接続テストは、OSが64bitでも、ExpressとStandard共に成功しています。
Express エディションは、64bitで実行したアプリでExpressエディションに接続できないのでしょうか。
<VC++のソース抜粋>
CString strErr;
SQLRETURN nRet = SQL_SUCCESS;nRet = SQLAllocEnv( &m_hEnv );
if( SQL_SUCCESS != nRet )
{
strErr.Format( _T("Unknown Error! File =%s, Line = %d"), CString( __FILE__ ), __LINE__ );
throw strErr;
}
m_bFreeEnv = true;nRet = SQLAllocConnect( m_hEnv, &m_hDbc );
if( SQL_SUCCESS != nRet )
{
strErr.Format( _T("Unknown Error! File =%s, Line = %d"), CString( __FILE__ ), __LINE__ );
throw strErr;
}
m_bFreeCon = true;CString strDSN = _T("TLPDB");
CString strUID = _T("sa");
CString strAuth = _T("password");
nRet = SQLConnect( m_hDbc, strDSN.AllocSysString(), static_cast<SQLSMALLINT>( strDSN.GetLength() ),
strUID.AllocSysString(), static_cast<SQLSMALLINT>( strUID.GetLength() ),
strAuth.AllocSysString(), static_cast<SQLSMALLINT>( strAuth.GetLength() ) );
if( SQL_SUCCESS != nRet &&
SQL_SUCCESS_WITH_INFO != nRet )
{
strErr.Format( _T("Unknown Error! File =%s, Line = %d"), CString( __FILE__ ), __LINE__ );
throw strErr;
}
m_bDisconnect = true;
}
回答
すべての返信
-
-
K.Takaoka様、返信ありがとうございます。
アプリケーションはx86でビルドしています。
32bit 用の設定(WOW64のODBC設定)方法の知識が無いので、現在調べながらやっております。
⇒この設定は、接続先がExpressエディションの場合に必要になる認識でよろしいでしょうか。(Standard版では現在の設定でも SQLConnectが成功します。)
※設定前は、Expressエディションに接続した時の、SQLConnectのエラーが下記の状況となります。
【ODBCのユーザーDNSに作成した場合】
[Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server が存在しないか、アクセスが拒否されました
【ODBCのシステムDNSに作成した場合】
[Microsoft][ODBC Driver Manager] 指定された DSN には、ドライバーとアプリケーションとのアーキテクチャの不一致が含まれています