25
2019.2

CURD非连贯操作

作者: POPASP
POPASP提供了灵活和方便的数据操作方法,对数据库操作的四个基本操作(CURD)不仅提供了连贯操作方法,另外还提供了非连贯操作方法,以满足不同需求。 ### 创建(Create) 在POPASP中使用Insert方法新增数据到数据库。 Insert 写入(新增)数据到数据库 | 项目 | 说明 | | ------------- | ------------- | | 用法 | Insert(table,data) | | 参数 | table,表名,String(为空时则取全局变量tableName);data,待插入数据,Dictionary对象 | | 返回值 | 如果数据非法或者查询错误则返回Empty;如果是自增主键 则返回主键值,否则返回1 | 使用示例如下: ```brush:vb <% '在Action中的操作 sub insert dim result,dict set dict = D_ dict("title") = "test321" dict("add_time") = now() result = M_("post").db.insert("",dict) var_export result call that.u(dict) end sub %> ``` 因为是非连贯操作,在使用Insert之前使用data、Create方法等是不起作用的。Add方法可以使用使用Create自动验证和自动填充字段。但是Insert却不可以,如果需要,必须手动完成。不过Insert和Add都可以剔除表中不存在的字段。 Insert的返回值同Add,如果你的主键是自动增长类型,并且如果插入数据成功的话,Insert方法的返回值就是最新插入的主键值,可以直接获取。 ### 读取(Read) 在POPASP中读取数据的方式很多,非连贯操作的读取数据使用getRS 读取数据集使用getRS方法: getRS 查询数据集 | 项目 | 说明 | | ------------- | ------------- | | 用法 | getRS(sql) | | 参数 | sql:查询语句,String | | 返回值 | 查询错误返回Empty ;查询成功返回查询的结果集(Recordset对象) | | 相关方法 | POP_MVC.rs2dict(rs)、db.getRow(rs) | 使用示例: ```brush:vb set m = M_("post") set rs = m.db.getRS( "SELECT top 10 id,title,add_tile from post" ) set dict = POP_MVC.rs2dict(rs) '将rs转化成Dictionary对象,每行记录也为Dictionary类型,每行记录的键名为数字,从0开始 ``` 读取数据使用getRow方法: getRow 从结果集中读取一行记录 | 项目 | 说明 | | ------------- | ------------- | | 用法 | getRow(rs) | | 参数 | rs:类型为Recordset对象 | | 返回值 | 查询错误返回Empty ;查询成功返回一条记录(Dictionary对象) | 下面是一些查询的例子: ```brush:vb '运行在Action中 sub getRow dim dict,rs set rs = M_("post").db.getRS("select top 10 post_id,title from post where is_display = true") rs.moveFirst while not rs.EOF and not rs.BOF set dict = M_("post").db.getRow(rs) var_export dict rs.movenext wend call that.u(dict).u(rs) end sub ``` 即使满足条件的数据不止一条,getRow方法也只会返回第一条记录。 ### 更新(Update) 在POPASP中使用Update进行非连贯的更新。 | 项目 | 说明 | | ------------- | ------------- | | 用法 | Update(table,data,where) | | 参数 | table,表名,String(为空时则取全局变量tableName);data,待插入数据,Dictionary对象;where:可传入多种类型,Update内部要经where方法处理,参数查看where方法,另外,如果where="",且data中存在数据表的主键值对,则会将该主键作为查询条件 | | 返回值 | 结果同Save,如果数据非法或者查询错误则返回Empty;如果更新成功返回影响的记录数(影响的记录数其实由where条件决定,并不是实际影响的记录数) | ```brush:vb <% class TestAction sub Update dim dict,m,result set m = M_("user") set dict = D_ dict("id") = 4 dict("username") = "test2" dict("password") = md5("654321") result = m.db.update("",dict,"") var_export result call that.u(m).u(dict) end sub end Class %> ``` 为了保证数据库的安全,避免出错更新整个数据表,如果没有任何更新条件,数据对象本身也不包含主键字段的话,Update方法不会更新任何数据库的记录。 如果id是数据表的主键的话,系统自动会把主键的值作为更新条件来更新其他字段的值。 删除(Delete) 在POPASP中使用Delete方法删除数据库中的记录 | 项目 | 说明 | | ------------- | ------------- | | 用法 | Delete(table,where) | | 参数 | 无 | | 返回值 | table,表名,String(为空时则取全局变量tableName);where:可传入多种类型,Delete内部要经where方法处理,参数查看where方法,where=""时不会删除任何记录 | 示例如下: ``` result = M_("user").db.delete("",4) ``` delete方法可以用于删除单个或者多个数据,主要取决于删除条件,也就是where方法的参数。