我使用QTP / UFT进行应用程序测试。 我不得不访问我的oracle DB(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()
期间的以下代码引发错误。它有时会起作用有时会抛出一个错误,即## Object引用不设置对象的实例&#39;在同一台机器上。
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()
注意:
这不是资源泄漏。我只是建立一个连接并处理掉。没有其他人连接到数据库。
问题发生 - 当QTP有COM lib时。当我用它来自动化&amp;使它不可见(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()
答案 0 :(得分:0)
试试这个
conn = New Oracle.ManagedDataAccess.Client.OracleConnection(ConnectionString)
答案 1 :(得分:-1)
您是否尝试使用ADOB连接对象进行oracle连接?您需要安装Oracle驱动程序,它将通过创建ADOB连接对象来帮助您连接到数据库