最近做个项目要求挺多的,其中一条就是记录关于数据记录的操作日志,而且日志要可以分析的.
于是乎我开始分析这个需求:
1、以前我做的其它项目大多只要细化到谁改了,什么时间改的.就差不多了.可是这次那帮家伙哦要求的可以分析数据的来龙去脉,也就是说要记录这条数据是谁,什么时间,内容,建立的。还有谁什么时间改的,改了什么内容。谁什么时间删除了这条记录。
2、从上面我理清了要做的三件事:1、建立时写日志2、每次修改写日志3、删除时写日志
3、于是乎我要考虑日志表和实体表之间的关系,每个实体表对应一个日志表.
日志表中多三个字段XGR--修改人 XGSJ--修改时间 XGLX--修改类型(可以是“INSERT、UPDATE、DELETE”),而且BH也不可以做标识的(实体表里的BH要做标识).
4、实现这三件事的Sql.数据表的结构如下
对应数据源配置的Sql语句:
Select :
Select * from SCD_SGRYYFB
Update :
Insert into SCD_SGRYYFB_XGJL([ZAH], [RQ], [RS], [BH], [BS],RYFL,XGR,XGSJ,XGLX)
values(@ZAH,@RQ,@RS,@BH,@BS,@RYFL,@XGR,getDate(),'UPDATE')
Update [SCD_SGRYYFB] set [ZAH]=@ZAH,RQ=@RQ,RS=@RS,BS=@BS,RYFL=@RYFL where BH=@BH
INSERT:
Insert into SCD_SGRYYFB([ZAH], [RQ], [RS], [BS],RYFL)
values(@ZAH,@RQ,@RS,1,@RYFL)
declare @@varBH int
select @@varBH=@@identity
Insert into SCD_SGRYYFB_XGJL([ZAH], [RQ], [RS], [BH], [BS],RYFL,XGR,XGSJ,XGLX)
values(@ZAH,@RQ,@RS,@@varBH ,1,@RYFL,@XGR,getDate(),'INSERT')
DELETE :
Insert into SCD_SGRYYFB_XGJL([ZAH], [RQ], [RS], [BH], [BS],RYFL,XGR,XGSJ,XGLX)
values(@ZAH,@RQ,@RS,@BH ,@BS,RYFL,@XGR,getDate(),'DELETE')
Delete from SCD_SGRYYFB where BH=@BH
@XGR赋值:
protected void SqlDataSource1_Inserting(object sender, SqlDataSourceCommandEventArgs e)
{
e.Command.Parameters["@XGR"].Value = User.Identity.Name;//这句要自己客户化的,要求取当前系统登陆用户的ID
}
protected void SqlDataSource1_Deleting(object sender, SqlDataSourceCommandEventArgs e)
{
e.Command.Parameters["@XGR"].Value = User.Identity.Name;//这句要自己客户化的,要求取当前系统登陆用户的ID
}
protected void SqlDataSource1_Updating(object sender, SqlDataSourceCommandEventArgs e)
{
e.Command.Parameters["@XGR"].Value = User.Identity.Name;//这句要自己客户化的,要求取当前系统登陆用户的ID
}