|
查看: 1192|回复: 6
|
[.Net]Stateless 资料更新时, 与当时资料库的同record 的比较
[复制链接]
|
|
|
简略说明。
网络资料库程序一般来说都是stateless data , 也就是说, 从资料库取了资料, 显示给使用者。
这里以 A,B,C 来代表几个某个record 的情况
A = 刚从资料库取出的情况
B = 使用者修改后的情况
C = 当使用者修改后, submit 上去时, 资料库同一笔record 的情况
当我们把资料显示给使用者, 让使用者修改,在更新时, 就会出现几种情形。
B 被submit 上去, C = A -> 这个没有问题。
B 被submit 上去, C != A -〉这个大问题, 因为被修改的资料, 被更新了。
听说 ADO.Net 本身有这样的机制, 但是如果我们是自己写BusinessObject 和 Data Access Layer , binding 在ObjectDataSource 的话, 这个机制是否会被启动?
如果否, 那么, 要如何用SQL 和 C# 的方式来达到这个机制。
多多指教。 |
|
|
|
|
|
|
|
|
|
|
发表于 25-10-2007 09:25 AM
|
显示全部楼层
如果你是使用SQL SERVER 2005和.NET 2.0 (我相信是啦,看你的应用论坛那里的问题),
就可以很简单的做到.不过如果要用.NET内置的话,相当程度上要放弃在STORED PROCEDURE里放一些LOGIC的做法了.
方法是,你的BUSINESS OBJECT必须使用STRONGLY TYPED DATASET (在VS里就是一个.XSD FILE), 当你BIND 去DATABASE的时候, 你可以选择CREATE A NEW STORED PROCEDURE.
在这个WIZARD里有个ADVANCED OPTION,里头你可以找到一个叫OPTIMISTIC CONCURRENCY (你可以查找这方面的资料) 的选项,若点选它的话,它所帮你生成的STORED PROCEDURE就会有你以上所述的作用了.
问题是在于,它是整个TABLE来算的,
也就是说,如果你有一个TABLE叫CustomerDetails, 所有里面的Field都会被拿来比较VALUE. |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 26-10-2007 08:06 PM
|
显示全部楼层
原帖由 阿牙木 于 25-10-2007 09:25 AM 发表 
如果你是使用SQL SERVER 2005和.NET 2.0 (我相信是啦,看你的应用论坛那里的问题),
就可以很简单的做到.不过如果要用.NET内置的话,相当程度上要放弃在STORED PROCEDURE里放一些LOGIC的做法了.
方法是,你的BU ...
谢谢你的回复。
这正是我想要作到的, 但是, 我不是用 MSSQL server , 公司的资料库是冷门资料库, 而且现在是用 ODBC 来连接。
基本上已经放弃了Stored Procedure 的方式,因为该冷门资料库不支援Stored Procedure, 所以想用Transaction scope + Mutex + DataSet + SQL 来达到。 DataSet 里面应该同时有收藏原来版本A,跟版本 B 。 只是 SQL 好像不能 return bool 。。 , 真有点头疼。 |
|
|
|
|
|
|
|
|
|
|
发表于 27-10-2007 02:17 AM
|
显示全部楼层
哦,那就麻烦了,ODBC不职员 optimistic concurrency.
让我来想想...
DATASET里的确收藏了不同的ROWSTATE, 你可以用这个来拿到版本A与版本B,
你就要自己写咯, 就是 SELECT OneColumn FROM OneTable WHERE OneValue = 'orignalOneValue' AND AnotherValue = 'orignalAnotherValue' AND ....
每个COLUMN都去比对, 应该是最讨厌的方法了咯. 呵呵. |
|
|
|
|
|
|
|
|
|
|
发表于 28-10-2007 09:35 PM
|
显示全部楼层
还有一个偷鸡方法,每一个table弄一个int column,每次update/insert 都+1,那么只要比对这个column就知道资料有没有被改过。
虽然有一点小小小小小小的瑕疵,但是还是可以用啦呵呵
 |
|
|
|
|
|
|
|
|
|
|
发表于 29-10-2007 03:04 PM
|
显示全部楼层
老大你这个方法太有创意了,我下次一定要用!!!!!  |
|
|
|
|
|
|
|
|
|
|
发表于 1-11-2007 08:25 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|