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方法的参数。