26
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 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 rs = B_("post").getRS( "SELECT top 10 id,title,add_tile from post" ) ``` ### 更新(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,result set dict = D_ dict("id") = 4 dict("username") = "test2" dict("password") = md5("654321") result = B_("user").update("",dict,"") var_export result end sub end Class %> ``` 为了保证数据库的安全,避免出错更新整个数据表,如果没有任何更新条件,数据对象本身也不包含主键字段的话,Update方法不会更新任何数据库的记录。 如果id是数据表的主键的话,系统自动会把主键的值作为更新条件来更新其他字段的值。 删除(Delete) 在POPASP中使用Delete方法删除数据库中的记录 | 项目 | 说明 | | ------------- | ------------- | | 用法 | Delete(table,where) | | 参数 | 无 | | 返回值 | table,表名,String(为空时则取全局变量tableName);where:可传入多种类型,Delete内部要经where方法处理,参数查看where方法,where=""时不会删除任何记录 | 示例如下: ``` result = B_("user").delete("",4) ``` delete方法可以用于删除单个或者多个数据,主要取决于删除条件,也就是where方法的参数。