【QTP专题】连接数据库

  1. 获取数据库连接串

    在本地新建一个.txt文件,修改扩展名名*.udl;双击*.udl文件,打开数据库链接属性,定位到"提供程序"选显卡,选中sqlserver的连接  Microsoft  for OLE DB Provider for sql server,点击下一步;输入数据源,数据库用户名以及密码,选择数据库,点击测试连接,测试成功后,点击"确定"。如图所示 【QTP专题】连接数据库

    然后用UE或记事本打开*.udl文件,sqlserver的连接串已经生成了,如下:

Provider=SQLOLEDB.1;Password=trsadmin;Persist Security Info=True;User ID=sa;Initial Catalog=test;Data Source=192.***.***.***

  

  2.连接数据库

Dim objConnection 'Connection对象实例 

Dim strConnString '连接字符串 

strConnString="Provider=SQLOLEDB.1;Password=trsadmin;Persist Security Info=True;User ID=sa;Initial Catalog=test;Data Source=192.***.***.***"



Set objConnection = CreateObject("ADODB.CONNECTION")  '建立Connection对象的实例 

objConnection.Open strConnString  '用Open方法建立与数据库连接
objConnection.state=0 '表示数据库连接失败

  

  3.关闭数据库连接

    objRecordSet.Close 

    objConnection.Close 

    Set objRecordSet = Nothing 

    Set objConnection = Nothing

 

  4.执行查询 

Dim objRecordSet 'RecordSet对象实例

Dim sqlStr 'sql查询语句



Set objRecordSet = CreateObject("ADODB.Recordset") '建立Recordset对象的实例

objRecordSet.Open sqlStr,objConnection '执行查询



If (objRecordSet.BOF or objRecordSet.EOF) Then  '查询不存在任何记录

  executeSQL = NULL '返回NULL

Else '存在查询记录

  '使用 GetRows 方法将记录从 Recordset 复制到二维数组中。第一个下标标识字段,第二个则标识记录号。

  executeSQL = objRecordSet.GetRows() '返回查询结果的二维数组

End If

  

以下代码将数据库各个常用功能封装成函数,已测试通过,仅供参考:

Option Explicit

'公共对象

Dim objConnection    'Connection对象实例 

Dim strConnString    '连接字符串 

Dim objRecordSet    'RecordSet对象实例  





'==================================================================

' 函数功能:连接到数据库

' 参数说明:

'        1.strDBType(数据库类型:支持SQL SERVER、ORACEL、MYSQL、DB2、SYBASE) 

'        2.strDBName(数据库名) 

'        3.strUID(用户名) 

'        4.strPWD(密码) 

'        5.strIP(服务器名或IP地址) 

' 返回结果:无 

' 调用方法:ConnectDB(strDBType, strDBName, strUID, strPWD) 

'==================================================================

Sub connectDB(strDBType, strDBName, strUID, strPWD,strIP) 

    Select Case UCase(Trim(strDBType)) '不同的数据库类型连接数据库的字符串不同

         Case "SQL SERVER" 

            strConnString="Provider=SQLOLEDB; Data Source="& strIP &"; Initial Catalog="& strDBName &"; User ID="& strUID &"; Password="&strPWD        

        Case "ORACLE" 

            strConnString="Provider=OraOLEDB.Oracle; Data Source="& strDBName &"; User ID="& strUID &"; Password="& strPWD  

        Case "MYSQL" 

            strConnString="Driver={MySQL ODBC 5.1 Driver}; Server="& strIP &"; Database="& strDBName &"; User="&strUID&"; Password="& strPWD 

       Case Else 

            Reporter.ReportEvent micFail,"数据库类型错误" ,"目前支持的数据库类型有:SQL SERVER、ORACEL、MYSQL、DB2、SYBASE" 

    End Select 

    Set objConnection = CreateObject("ADODB.CONNECTION")  '建立Connection对象的实例 

    objConnection.Open strConnString  '用Open方法建立与数据库连接 

End Sub 





'==================================================================

' 函数功能:关闭数据库连接

' 参数说明:无 

' 返回结果:无 

' 调用方法:closeDB() 

'==================================================================

Sub closeDB() 

    objRecordSet.Close 

    objConnection.Close 

    Set objRecordSet = Nothing 

    Set objConnection = Nothing 

End Sub 



'==================================================================

' 函数功能:执行SQL语句

' 参数说明:sqlStr(SQL语句 )

' 返回结果:返回一个存放查询结果的二维数组

' 调用方法:results = executeSQL(sqlStr)

'==================================================================

Function executeSQL (sqlStr)

    Call connectDB(gDBType,gDBName,gUID,gPWD,gIP)' 连接到数据库,函数的实参在配置文件中定义

    Set objRecordSet = CreateObject("ADODB.Recordset") '建立Recordset对象的实例 

    objRecordSet.Open sqlStr,objConnection

    If (objRecordSet.BOF or objRecordSet.EOF) Then  '查询不存在任何记录

        Reporter.ReportEvent micDone,"查询不存在任何记录","数据库中查询不存在任何记录!"

        executeSQL = NULL '返回NULL

    Else '存在查询记录

        '使用 GetRows 方法将记录从 Recordset 复制到二维数组中。第一个下标标识字段,第二个则标识记录号。

        executeSQL = objRecordSet.GetRows() '返回查询结果的二维数组

    End If

    Call closeDB() '关闭数据库连接

End Function

=======================================================================================================

 SQL执行结果处理:

======================================================================================================

1.检查查询结果记录数

Dim num,sql
sql = "select COUNT(ID) from TableName where ..... results = executeSQL(sql)
num=cint
(results(0,0)) 'cint函数将查询结果转化为Integer类型,num=0表示查询结果为空,num=1表示查询结果有且唯一,num>1表示查询结果有多条

以下为使用案例:

'检查用户是否存在,如果存在则返回true,不存在则返回false

'参数为用户名

Function chkUserExistDB(userName)

 Dim sql,results

 sql = "select COUNT(USERNAME) from WCMUSER where USERNAME ='"& userName &"'"

 results = executeSQL(sql)

 If cint(results(0,0))=1 Then '存在用户userName

  chkUserExistDB = true

  Reporter.ReportEvent micDone, "用户存在","系统中存在用户["& userName &"] " 

 Else '不存在用户userName

  chkUserExistDB = false

  Reporter.ReportEvent micDone, "用户不存在","系统中不存在用户["& userName &"] " 

 End If

End Function

 

 

 

 

 

你可能感兴趣的:(数据库)