手把手教你TestComplete_数据库操作函数示例

来源:互联网 发布:米妈淘宝联盟是真的吗 编辑:程序博客网 时间:2024/04/30 22:44
 

数据库的操作是最常见的,这部分包括四个函数

Function ExecSql(strCon,strSql):执行sql语句,例如update,insert一类的

Function GetValue(strCon,strSql):执行sql语句,得到一行多列的返回

Function GetValue1(strCon,strSql):执行sql语句,得到多行一列的返回

Function GetSPValue(strCon,strSql):执行存储过程,得到返回

 

你可能奇怪,为什么不是执行sql语句,得到一个数组返回,其实一点都不奇怪,懒呗。项目中操作数据库的地方很少。 当时只是需要返回个单行多列的值,懒得搞数组,返回一个字符串,然后split分拆不是更省事,结果没几天,冒出来一个多行一列的,就只好照着上一个抄了一下。这两个函数可以整合成一个:执行sql语句,返回一个数组记录返回内容,同学们,谁看了帖子以后,写一个行不,功在千秋,泽被后世呀。

 

 

 

这种ado的操作,简直常见的一塌糊涂,也没什么好讲的,直接写个使用方法吧。

 

函数1:Function ExecSql(strCon,strSql):执行sql语句,例如update,insert一类的

 

执行函数方法示例:

 

Dim strCon,strSql,strRet

strCon="Provider=msdaora;Data Source=xxx;User Id=xxx;Password=xxx;"

strSql="update table1 set field1='x' where field2 in('" & strField2 & "')"

strRet=ExecSql(strCon,strSql)

 

 

 

函数2:Function GetValue(strCon,strSql):执行sql语句,得到一行多列的返回

 

执行函数方法示例:

 

Dim strCon,strSql, strField1, strField2,strRet

Dim arrRet

strCon="Provider=msdaora;Data Source=xxx;User Id=xxx;Password=xxx;"

strSql="select field1,field2 from table1 where xxx rownum=1"

 

strRet=GetValue(strCon,strSql)

arrRet=Split(strRet,";")

strField1=arrRet(0)

strField2=arrRet(1)

 

注意:这个返回是使用的分号做分隔字符,万一返回的值本身就带有分号,就会出错了,可能需要另外选用新的分隔字符,不能在返回值中被包含。

 

 

函数3:Function GetValue1(strCon,strSql):执行sql语句,得到多行一列的返回

 

执行函数方法示例:

 

Dim strCon,strSql,strRet,strRow1,strRow2

Dim arRet

 

strCon="Provider=msdaora;Data Source=xxx;User Id=xxx;Password=xxx;"

strSql="select field1 from table1 a where a.state='T' where rownum<36"

 

strRet=GetValue1(strCon,strSql)

arrRet=Split(strRet,";")

strRow1=arrRet(0)

strRow2=arrRet(1)

 

注意:这个返回是使用的分号做分隔字符,万一返回的值本身就带有分号,就会出错了,可能需要另外选用新的分隔字符,不能在返回值中被包含。

 

 

函数四:Function GetSPValue(strCon,strSql):执行存储过程,得到返回

 

这个函数的调用,前提条件是存储过程编写没有问题,参看下面的示例(oracle):

create or replace function sp1( pv_hd in varchar2,pn_Cnt in number)

RETURN VARCHAR2

is

n_found number:=0;

begin

...

v_ret:=v_ret ||';'|| substr(xx,yy,7);

...

RETURN v_ret;

end sp1;

 

说明:

1.       我觉得这里用Function比较好;

2.       定义的时候需要声明返回值类型:RETURN VARCHAR2

3.       函数最后返回值:RETURN v_ret;

 

strCon="Provider=msdaora;Data Source=xxx;User Id=xxx;Password=xxx;"

strSql="sp1;112343;1"   此处的字符串不需要加单引号

 

 

附件:http://download.csdn.net/source/3515488

 内含:数据库操作函数示例.txt,包括四个函数的源码

 

 

 

小结:

后来我琢磨了一下,这四个函数其实都可以写成一个函数,执行返回或者不返回值不都一回事,返回一个数组不就通杀了,不过取值就需要写二次循环了,稍微麻烦点。

 

有人可能会问了,你怎么可能整合存储过程的调用到一起呢,在网上大把的人在问各种语言对存储过程的调用,绑定变量怎么搞,尤其是如何输出结果,转变思想,其实很简单。你可以写存储过程或者函数的时候,使用:Dbms_Output.put_line(v_ret); ,有同学会说,你这个更麻烦,调用前还得先执行什么 set serveroutput on; 才行,否则连屏幕都没法输出。其实没必要,你调用存储过程的时候别用exec sp1; 的方式呀,你可以使用 select sp1(xxx) from dual; 来调用,那不就整合到同样的一个逻辑下面了。直接绕开了存储过程的调用方式,那玩意麻烦死了,每个变量都得去绑定,简直没法写成通用函数。这招不见得好看,但是实用呀,大部分的情况都能对付了。

 

好了,期待哪位大侠的出手,写个通用版本的出来。

 

 

 

原创粉丝点击