读书人

ling to sql 怎么记录对数据库的更改

发布时间: 2012-01-12 22:11:58 作者: rapoo

ling to sql 如何记录对数据库的更改 (2)
我的环境:winxp, c#2008, sql 2005。数据访问技术:linq to sql
目前策略思路:系统中有若干个表,包括一个用户表,我在登录的时候记录用户的登录id,然后在每个表里面设置一个用户id的列和一个自动时间戳timestamp,然后在insert和update的时候写入用户id,自动时间戳则把操作的具体时间自动记录,
表的定义如下:

SQL code
create table class(    class        nvarchar(10)    not null, --班级    specialty    nvarchar(40), --专业    counsellor    nvarchar(12), --班主任    enroll        int,--入学年份    userID        int    not null, --操作员    autoTS        timestamp not null --自动时间戳)goalter table class    add constraint pkClass primary key (class)goalter table class    add constraint users$op$class foreign key (userID) references usersgo

在对这个表维护的时候,操作员和时间戳应该是不可见,由系统自动填充,如下图

在查询的时候应该都显示出来,如下图

在用户维护时候,点保存的处理代码如下:
C# code
private void classesBindingNavigatorSaveItem_Click(object sender, EventArgs e)        {            try            {                db.SubmitChanges(); //private tuitionDBDataContext db = new tuitionDBDataContext();            }            catch (Exception ex)            {                MessageBox.Show(ex.Message);            }        }

问题:
1、我怎么让用户点保存按钮的时候,获取每一行已经被更改的数据,然后将操作员的id填入userID列?
2、sql里面的自动时间戳timestamp 为什么到这里显示成了这个模样,数据类型也变成了rowversion,怎么让他正确的显示年月日时分秒?

[解决办法]
1 linq生成的实体支持OnCreated,PropertyChanged,PropertyChanging这些方法和事件,我认为可以在这些扩展点上面把用户id填进去
2 timestamp类型的字段不需要写值,数据库自动会填.且一个表应该只有一个类型是timestamp的列
[解决办法]
LINQ会自动产生一个分部函数:OnValidate(),可在此函数中调用内置方法:datacontext.yourTable.GetModifiedMembers()方法获取是否被修改,如:
bool isChange= db.tbA.GetModifiedMembers(tbARecord).Count()!=0;

当isChange为ture时,则设置tbARecord的userID及时间。
[解决办法]
mark
[解决办法]
没研究过这玩意.只能看看.
[解决办法]
还没用过这样的功能,学习学习!

读书人网 >.NET

热点推荐