数据库的操作是最常见的,这部分包括四个函数
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; 来调用,那不就整合到同样的一个逻辑下面了。直接绕开了存储过程的调用方式,那玩意麻烦死了,每个变量都得去绑定,简直没法写成通用函数。这招不见得好看,但是实用呀,大部分的情况都能对付了。
好了,期待哪位大侠的出手,写个通用版本的出来。