c#.net三层结构中,添加和修改数据时,如何有效存储?即我通过页面添加或修改某一个字段的值,如何在通过实体类保存到数据库时只insert 或update这一个添加或修改过的字段,而其它没添加值或经过修改的字段就不必往数据库中写入了。如果用代码通过两个存数据字段值的实体类来进行比较的话,例是可以实现,不知各位高手有没有更好的办法,比如能使同一个实体类有一个原映像和修改后的类相比较,或者ado.net有没有什么办法能内部比较字段是否有新增值或修改值而进行有效存储,对没有值或没经修改的字段就不必再操作了?谢谢各位高手了!!!
在类中声明一个私有的HashTable类型的属性,当数据字段有更新时,在HashTable中添加该字段的名称和引用,如this.hsTable.Add("column_name", this.columnProperty);更新类的时候遍历哈西表生成配对的字段名和参数值。
我的解决办法是这样的:
1、修改数据时,先把代表所修改数据记录各值的实体类对象通过xml序列化存到本地的一个xml文档中;
2、在页面修改数据部分字段值;
3、页面修改完,将修改后各值赋给一个新的实体类对象,在此暂称:修改后数据实体对象
4、提交保存之前,再new一个此实体类对象,通过xml反序列化,把第1步中所保存在本地xml文档进行反序列化给此实体类对象,在此暂称:修改前数据实体对象;
5、提交保存时,将这两个分别代表记录修改前后的实体对象都传到DAO层修改函数,在DAO层对两个对象各数据值进行比较,凡是值不同(即此值被修改了),就update;反之,就不update了。当然,这个办法也不是最好的,所以,大家有什么好办法,敬请提出来,共同学习!
如果仅仅是为了提高数据存储效率,那么我可以告诉你,这个效率在于客户端发多少个SQL存取语句给数据库,而不是发多长的语句。
同样一次连接,最花时间的绝对不是在SQL服务器的执行上,而是在客户端和服务器的通讯上。
那么对应你的例子,如果我有个User类 当我修改 name 和 age 假设他是一次跟新那么你得系统消耗是一次连接。但是如果 name 和 age 分开跟新那么他的系统消耗是两次连接。当然你也可以通过延时跟新来做到一次那么你得系统开销还是一次连接 外加很多多余的控制跟新的代码。
楼主认为那个划算呢?
http://www.szsoftware.com.cn/showsoft.asp?id=4
2、在页面修改数据部分字段值;
3、页面修改完,将修改后各值赋给一个新的实体类对象,在此暂称:修改后数据实体对象
4、提交保存之前,再new一个此实体类对象,通过xml反序列化,把第1步中所保存在本地xml文档进行反序列化给此实体类对象,在此暂称:修改前数据实体对象;
5、提交保存时,将这两个分别代表记录修改前后的实体对象都传到DAO层修改函数,在DAO层对两个对象各数据值进行比较,凡是值不同(即此值被修改了),就update;反之,就不update了。感觉这样做效率也太低了一点...
那你这样序列化又反序列化的,还不如创建两个对象,一个用于保存修改前,一个用于存储修改后的呢?
我觉得秋枫大哥的办法很好"在实体类内部增加一个State属性,来表示修改,新增或是删除"..
楼主为什么不考虑一下这种办法呢?