我想在C#应用程序中,假设为Form1中,连接数据库student,student中有两张表s和sc,我想对这两张表的更新情况进行统计.
当数据库更新时,在FORM1中能弹出对话框,通知数据库发生更新,用户点查看按钮,可以查看更新的具体情况.
谁能给出代码呀!根据我给的简单环境写的!

解决方案 »

  1.   

     新建2张对应的表,在原来的表上建Insert Updata Delete等触发器,把更新内容按你的要求保存到新建的表里。
      

  2.   

    在触发器记录数据更新日志
    或log4net等记录日志
      

  3.   

    触发器可以看msdn:
    http://blog.csdn.net/downmoon/archive/2009/09/29/4604443.aspx
    log4net更灵活一些:
    http://blog.csdn.net/downmoon/archive/2009/01/14/3766306.aspx
    http://blog.csdn.net/downmoon/archive/2009/09/29/4604443.aspx
      

  4.   

    方法容易理解,但是如何实现呢,写触发器的时候,比如是INSERT触发器,可以从UPDATED表中获取信息,但是如何把它再插如到数据变更表中呢,编号又如何获得呢,能给点代码吗?
      

  5.   

    我给你写点试试
    数据表变更主表
    if exists (select * from sys.objects where object_id=object_id('tablechange') and type='U') 
    drop table tablechange
    create table tablechange(changeno int identity(1,1) primary key,tablename varchar(50),changetype varchar(50),changedate datetime)数据变更子表
    if exists (select * from sys.objects where object_id=object_id('tablechangedetial') and type='U') 
    drop table tablechangedetial
    create table tablechangedetial(changedetialno int identity(1,1) primary key,tablechangeno int,fieldname varchar(50),changedata varchar(50))测试表
    if exists (select * from sys.objects where object_id=object_id('student') and type='U') 
    drop table studentcreate table student(sno int identity(1,1) primary key,stuname varchar(6),age int)测试触发器,这里我只写一个插入的
    if exists(select * from sys.objects where object_id=object_id('tr_in_onstu') and type='tr')
    drop trigger tr_in_onstu 
    create trigger tr_in_onstu on student after insert
    as
    if exists(select * from inserted)
    begin
    insert into tablechange(tablename,changetype,changedate)values('student','insert',getdate())
    declare @changeno int
    set @changeno=@@identity
    declare @stuname varchar(6)
    select @stuname=isnull(stuname,null) from inserted
    declare @age int
    select @age=isnull(age,null) from inserted
    if @stuname is not null and @age is not null
    begin
    insert into tablechangedetial(tablechangeno,fieldname,changedata)values(@changeno,'stuname',@stuname)
    insert into tablechangedetial(tablechangeno,fieldname,changedata)values(@changeno,'age',@age)
    end
    else if @stuname is not null and @age is  null
    begin
    insert into tablechangedetial(tablechangeno,fieldname,changedata)values(@changeno,'stuname',@stuname)
    end
    else
    begin
    insert into tablechangedetial(tablechangeno,fieldname,changedata)values(@changeno,'age',@age)
    end
    end测试数据
    delete from tablechange
    delete from tablechangedetial
    delete from student
    insert into student(stuname,age)values('name1',19)
    insert into student(stuname)values('name2')
    insert into student(age)values(20)查看结果结果
    select tablename as 表名,case changetype when 'insert' then '插入' when 'update' then '更新' else '其他' end as 操作类型,changedate as 操作日期,fieldname as 字段名称,changedata as 变更的数据 from tablechange a join tablechangedetial b on a.changeno=b.tablechangeno 表名   操作类型        操作日期              字段名称 变更的数据
    student 插入 2010-05-04 00:39:38.107 stuname name1
    student 插入 2010-05-04 00:39:38.107 age 19
    student 插入 2010-05-04 00:39:46.140 stuname name2
    student 插入 2010-05-04 00:39:50.670 age 20
    以上是一个插入的情况统计  至于更新的删除 自己模仿着弄 道理差不多
    对于更新  要结合inserted表跟deleted表统计   更新前的数据存在delete表 更新后的数据在inserted