Я использую QTP/UFT для тестирования приложений. Мне пришлось получить доступ к моей базе данных оракула (11g), чтобы выполнить некоторую настройку базы данных (для обновления записей).
Я использую oracle.manageddataaccess.dll
(ссылка на проект библиотеки классов myDBWrapper).
у меня ниже dll
(myDBWrapper - это тот, который я создал, где присутствует проблема)
Моя строка подключения:
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=<HOST>)(PORT=<PORT>>)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=<SERVICENAME>)));User Id=<USERNAME>;Password=<PASSWORD>;
Проблема:
Приведенный ниже код во время conn.open()
выдает ошибку. Иногда это работает, а иногда выдает ошибку, что «Ссылка на объект не устанавливает экземпляр объекта» на том же компьютере.
conn = New OracleConnection()
conn.ConnectionString = ConnectionString
MsgBox("isnothing? : " & (conn Is Nothing).ToString) 'it is always False. So , not null
conn.Open() ' It throws an error that "Object reference not to set an instance of an object"
Dim cmd As OracleCommand = New OracleCommand(strQuery)
cmd.BindByName = True
cmd.Connection = conn
RowsAffected = cmd.ExecuteNonQuery()
cmd.Dispose()
conn.Dispose()
Примечание:
Это не утечка ресурсов. Я просто делаю 1 соединение и избавляюсь. Никто больше не подключается к БД.
Возникает проблема - когда QTP имеет COM-библиотеку. Когда я использую это, чтобы автоматизировать и сделать его невидимым (QTP.Visible = FALSE
). Если я использую QTP.Visible = TRUE - проблема не возникает. Что это за проблема!!!
StackTrace:
Object reference not set to an instance of an object.
at OracleInternal.I18N.Conv.GetMaxBytesPerChar(Int32 charsetId)
at OracleInternal.ServiceObjects.OracleConnectionImpl.Connect(ConnectionString cs, Boolean bOpenEndUserSession)
at OracleInternal.ConnectionPool.PoolManager`3.CreateNewPR(Int32 reqCount, Boolean bForPoolPopulation, ConnectionString csWithDiffOrNewPwd)
at OracleInternal.ConnectionPool.PoolManager`3.Get(ConnectionString csWithDiffOrNewPwd)
at OracleInternal.ConnectionPool.OraclePoolManager.Get(ConnectionString csWithNewPassword)
at OracleInternal.ConnectionPool.OracleConnectionDispenser`3.Get(ConnectionString cs, PM conPM, ConnectionString pmCS, SecureString securedPassword, SecureString securedProxyPassword)
at Oracle.ManagedDataAccess.Client.OracleConnection.Open()
at myDBWrapper.Utility.DBUtil.OpenConnection()