none
64bit環境のVisualStudio2008で、x86用のプログラムを作成するとSQLServerに接続できない。 RRS feed

  • 質問

  • Windows7Pro 64 にて、VisualStudio2008のVBを使用しています。

    .NET FrameWork2.0の環境で
    32bit用のDLLを利用する都合上、
    「コンパイラの詳細設定」-「ターゲットCPU」を 「x86」でビルドすると
    SQLServerの接続時にエラーが発生します。

    コードは、
     Using connection As New SqlConnection(ConnectionString)
                    Dim command As SqlClient.SqlCommand = connection.CreateCommand()
                    connection.Open()          <---ここでエラー発生
                    command.CommandText = strSQL : command.ExecuteNonQuery()
                    connection.Close()
                    connection.Dispose()
    End Using

    エラー内容は、
    タイムアウトに達しました。操作が完了する前にタイムアウト期間が過ぎたか、またはサーバーが応答していません。  
    場所 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
    場所 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
    場所 System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error)
    場所 System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)
    場所 System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()
    場所 System.Data.SqlClient.TdsParser.ConsumePreLoginHandshake(Boolean encrypt, Boolean trustServerCert, Boolean& marsCapable)
    場所 System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, SqlConnection owningObject)
    場所 System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject)
    場所 System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart)
    場所 System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
    場所 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
    場所 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection)
    場所 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options)
    場所 System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
    場所 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
    場所 System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
    場所 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
    場所 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
    場所 System.Data.SqlClient.SqlConnection.Open()

    で、SQLServerに接続できません。

    そこで、「コンパイラの詳細設定」-「ターゲットCPU」を 「x64」でビルドすると、SQLServerに接続できます。
    ただし、32bit用のDLLは動作しません。

    色々調べては見たのですが、よくわかりません。
    どうやって、解決したらよいの出しょうか?

    2009年12月3日 11:14