蛙蛙推荐:VBS的数据库操作类,

蛙蛙推荐:VBS的数据库操作类,这个类实现了平时主要的数据库操作,因为我们天天都在和数据库打交道,有时候用这样一个类也挺方便的,但是不知道实用性怎么样,因为在性能和错误处理方面没有做很多考虑,所以不知道它的通用性如何.
如果谁能再给这个类加上动态的错误处理的或者优化一下性能,就更完美了.PS:做这个类也是为了练习一下VBS类的使用.
<%
class classado
 Private conn_c
 Private rs_c
 Public strconn
 Private Sub Class_Initialize'定义类的初始化事件
  Set conn_c=Server.CreateObject("ADODB.Connection")
 End Sub
 
 Private Sub Class_Terminate   ' 设置 Terminate 事件。         
  rs_c.close
  set rs_c=nothing
  conn_c.close
  set conn_c=nothing
 End Sub

 Public Function opendb()                   '打开数据库
  if isempty(strconn) then
   response.Write("<script>alert('没有设置数据库连接字符串');</script>")
   response.end
  end if
  if conn_c.state=0 then   
   conn_c.open strconn
  else
   response.Write("<script>alert('数据库已经打开了');</script>")
   response.end
  end if
 End Function

 Public Function getrs(ByVal strsql)                   '获取记录集
  if conn_c.state=0 then
   opendb()
  end if
  
  Set rs_c=Server.CreateObject("ADODB.RecordSet")
  rs_c.Open strsql,conn_c,1,1
  Set getrs=rs_c
 End Function
 Public Function exesql(ByVal strsql)                   '执行一条sql语句,用来特定的插入,更新,删除记录
  if conn_c.state=0 then
   opendb()
  end if
  conn_c.execute(strsql)
 End Function
 Public Function insertrs(myform,mytable,nostr)
  '此方法用来把表单提交的值插入到数据库
    
  '如果数据库没有打开那么打开数据库
  if conn_c.state=0 then
   opendb()
  end if

  '构建查询字符串并打开记录集
  set rs_add=server.CreateObject("adodb.recordset")
  dim add_sql
  add_sql="select * from "&mytable&""
  rs_add.open add_sql,conn_c,1,3,1 'Options类型为adCmdText
  rs_add.addnew
  
  '循环form的值并给分别给记录集赋新值
  for each x in myform
   '保证获取的值不为空,并保证一些你指定表单元素不需要给记录集赋值,比如说提交按钮
   '虽然你不需要把提交按钮传递给记录集,但它也随着表单一起给提交给服务器了,
   '要想过滤到这些不需要的表单元素,请在这个方法的第三个参数(nostr)里指定
   '参数的格式是构建一个把不需要提交的表单元素的名称用"|"隔开的字符串
   '比如说这样"submit|myabc|wawa"
   '我们这里用一个私有小函数(isno)来去除这些不需要向数据库提交的值
   if isno(nostr,x) and request.form(x)<>"" then
    
    '下面是一条测试语句,显示从表单提取元素的名称和值.
    'response.write x+"="+request.form(x)+"<br>"
    
    '判断记录集的类型,如果是数字类型(Integer,BigInt等)要把提取的值转换为数值类型
    '在这里recordset.Field.type属性是用数字来表示的,具体对应关系,请查看你机器里面的adovbs.inc文件
    '其中Integer对应这3,BigInt对应着20,我这里的判断或许不是很完美,除了3和20外还有其它的数值类型
    '所以在表单提交前请务必做一些客户端的验证,保证在需要是数值类型数据的时候让用户能正确的输入并提交
    '这样其实在服务器给记录集赋值时可以做到正确的隐式转换,不适于出现给Integer类型的记录集赋值一个不能转换为数字的字符串
    '请时刻记住,从表单提取的数据始终只字符串类型
    if (rs_add(x).type=20 or rs_add(x).type=3) then
     rs_add(x)=clng(request.form(x))
    else
     rs_add(x)=request.form(x)
    end if
   end if
  next
  
  '更新记录集,随后关闭并清空它,
  '记着在写程序的时候要尽量晚的打开对象,尽量早的关闭已经不使用的对象
  rs_add.update
  'response.write("添加成功")
  rs_add.close
  set rs_add=nothing
 end function

 Public Function updaters(myform,mysql,nostr)
  '此方法用来把表单提交的值更新到数据库
    
  if isempty(conn_c) then
   opendb()
  end if

  '构建查询字符串并打开记录集
  set rs_update=server.CreateObject("adodb.recordset")
  rs_update.open mysql,conn_c,1,3,1 'Options类型为adCmdText
  '注意这里不需要rs_update.addnew
  
  '循环form的值并给分别给记录集赋新值
  for each x in myform
   if isno(nostr,x) and request.form(x)<>"" then
    'response.write x+"="+request.form(x)+"<br>"
    if (rs_update(x).type=20 or rs_update(x).type=3) then
     rs_update(x)=clng(request.form(x))
    else
     rs_update(x)=request.form(x)
    end if
   end if
  next
  rs_update.update
  'response.write("修改成功")
  rs_update.close
  set rs_update=nothing
 end function
 private function isno(s1,s2)
  dim arr
  arr=split(s1,"|")
  isno=true
  for each i in arr
   if s2=i then isno=false
  next
 end function
end class
%>

举个例子来看看这个类怎么用

<!--#include file="ado_cls.asp" -->
<%
strconn="Driver={sql server};server=192.168.0.110;database=new;uid=sa;pwd=sa;"
set c=new classado
c.strconn=strconn
c.opendb()
select case trim(request.Form("active"))
 case "New" 
  c.insertrs request.form,"qy_ml","submit4|sign|active"
  response.write("<script>alert('添加成功');</script>")
 case "edit"
  dim editsql
  editsql="select * from qy_ml where qy_ml_id="&request("id")&""
  c.updaters request.form,editsql,"submit4|sign|active"
  response.write("<script>alert('修改成功');</script>")
 case ""
  strsql="select * from qy_ml"
  set r=c.getrs(strsql)
  if not(r.bof and r.eof) then
   arr_wawa=r.getrows()
  end if
end select
%>
<table width="100%" border="1" cellspacing="1">
<% If not isempty(arr_wawa) Then %>
<% for i=0 to ubound(arr_wawa,2) %>
<tr>
<% for j=0 to ubound(arr_wawa,1) %>
<td><%= arr_wawa(j,i) %></td>
<% next %>
</tr>
<% next %>
<% Else %>
<tr>
<td>没有记录</td>
</tr>
<% End If %>
</table>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值