除了可以接收表单提交的序列值之外,也可以手动代入数组值用于批量操作时的参数,比如: Dim result Easp.Var("id") = Array(12,23,45,34,67,89,90) '下面的两种方法都是正确的,第二种方法效率更高: '方法一,直接写SQL语句 result = Easp.Db.ExecBatch("delete from product where id = {id}") '方法二,用批量删除方法,会自动优化SQL语句,效率更高 result = Easp.Db.DelBatch("product", "id = {id}") 上面的代码会删除 product 表中所有 id 在数组中的值。EasyASP 中的批量新增、删除、更新方法都会自动优化SQL语句,效率会有非常高的提升,在批量操作时建议使用这些方法。
存储过程操作
EasyASP 调用存储过程的方式也是比较简单的,下面四种方式都是可以的: Set proc = Easp.Db.Query("call 存储过程名 {参数1} [,{参数2}] [,{@输出参数}] [,{@@输入输出参数}]") Set proc = Easp.Db.Query("exec 存储过程名 {参数1} [,{参数2}] [,{@输出参数}] [,{@@输入输出参数}]") Set proc = Easp.Db.Exec("call 存储过程名 {参数1} [,{参数2}] [,{@输出参数}] [,{@@输入输出参数}]") Set proc = Easp.Db.Exec("exec 存储过程名 {参数1} [,{参数2}] [,{@输出参数}] [,{@@输入输出参数}]") 如你所见,参数中的“输入参数”用 {参数} 的形式,“输出参数”用 {@参数} 的形式,“既是输入参数又是输出参数”的用 {@@参数} 表示。参数的赋值,当然还是用的是超级变量。这几个方法会在执行存储过程后返回一个字典对象,这个字典对象固定包含以下4个键值:
rows - 受影响的行数
return - 返回值
out - 输出参数(字典对象),可用("out")("@参数名")调用
rs - 记录集对象(如果不返回记录集则该项值为Null)
下面用一个完整的例子看一下使用方法: Dim proc, rs Easp.Var("uid") = Easp.NewID() Easp.Var("uname") = "coldstone" Easp.Var("dname") = "冷石" Easp.Var("upass") = Easp("md5")("123456") Set proc = Easp.Db.Query("exec sp_new_user {uid}, {uname}, {dname}, {upass}, {@usercount}") '假设存储过程 sp_new_user 成功会返回值1,失败返回0,并且选取本条新增的记录和一个输出参数 @usercount Easp.Println "返回值::" & proc("return") Easp.Println "总人数::" & proc("out")("@usercount") '如果返回记录集不为空 If Not IsNull(proc("rs")) Then Set rs = proc("rs") Easp.Println "新增用户ID为:" & rs("uid") Easp.Db.Close(rs) End If Set proc = Nothing 如果要返回的是多个记录集,也可以用下面的方法获取下一个记录集对象: Set rs1 = Easp.Db.NextRS(rs)
事务处理
先帖一段百科中的解释:
数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完整地执行,要么完全地不执行。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。
简单的说,就是很多句SQL在执行同一个业务逻辑时,可能其中某句会出错导致只执行了其中的一部分,这样会引发数据的不一致问题。事务处理的功能就是先预执行这些语句,在所有语句都没有错误的情况下再统一执行,如果出错,则取消之前的全部SQL操作。EasyASP 简单的封装了 ADO 的事务处理,视数据库的支持程度,事务也可以嵌套处理。下面是简单的事务处理代码: Dim result Easp.Db.Begin '开始事务 result = Easp.Db.Query("insert into table1 values ({f1}, {f2})") If Not result Then Easp.Db.RollBack '回滚事务 Else result = Easp.Db.Query("update table2 set fa1 = {fa1} where fa2 = {fa2}") If Not result Then Easp.Db.RollBack '回滚事务 Else Easp.Db.Commit '提交事务 End If End If 这样,这两个SQL语句要么同时执行,要么都不执行,不会出现一个执行而另一个没执行的情况了。
多数据库操作
如果您的系统使用了多个数据库,可以用下面的方法添加其它数据库连接: Easp.Db.SetConnection "connName", "MSSQL", "database2", "sa:password@192.168.0.2" 其中的 connName 是自定义的连接对象名称,在操作此数据库的数据前,要用下面的方法获取到该连接的 Connection 对象后再使用: '取得连接对象 Set conn = Easp.Db.GetConnection("connName") '读取记录集 Set rs = Easp.Db.Execute(conn, "Select * From table_name where id = 1") '添加记录 Call Easp.Db.Insert(conn, "table_name", "id:{easp.newid}, field1:{field1}, field2:GetDate()") '修改记录 Call Easp.Db.Update(conn, "table_name", "field1 = {field1}, field2 = {field2}", "id = {id}") '删除记录 Call Easp.Db.Delete(conn, "table_name", "id = {id}") '批量执行SQL(注:Select 语句不能用于批量操作) Call Easp.Db.ExecuteBatch(conn, sql) '批量新增记录 Call Easp.Db.InsertBatch(conn, table, field:value[,field:value...]) '批量更新记录 Call Easp.Db.UpdateBatch(conn, table, field=value[,field=value...], where) '批量删除记录 Call Easp.Db.DeleteBatch(conn, table, where)
其它类型数据库操作