社区
C#
帖子详情
OOOOOOO高手请进,更新数据库问题OOOOOOO
LearnH
2002-12-12 09:19:45
我用ADO.NET编写数据库处理程序,当调用DataAdapter.Update()时,如果发生并发冲突(源表数据已改变),更新就会错误,如果我想采用最好更新生效应该怎么做,谢谢
...全文
39
7
打赏
收藏
OOOOOOO高手请进,更新数据库问题OOOOOOO
我用ADO.NET编写数据库处理程序,当调用DataAdapter.Update()时,如果发生并发冲突(源表数据已改变),更新就会错误,如果我想采用最好更新生效应该怎么做,谢谢
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
dy_2000_abc
2002-12-13
打赏
举报
回复
上面的代码只限于自动生成语句,因为自动生成语句前,CommandBuilder需要到数据库取回元数据用于更新操作。
dy_2000_abc
2002-12-13
打赏
举报
回复
不好意思,今天想更正一下,没想到结贴了,正如你所说,我上面的代码是不对的,改成这样就可以了,它可以保证在selectCommand取数据到更新结束这段时间锁定取出的数据:
OleDbDataAdapter dda=new OleDbDataAdapter("...",conn);
OleDbCommandBuilder builder=new OleDbCommandBuilder(dda);
OleDbTransaction tran = Conn.BeginTransaction();
tran.IsolationLevel=System.Data.IsolationLevel.RepeatableRead;
daa.SelectCommand.Transaction=tran;
builder.GetDeleteCommand().Transaction=tran;
builder.GetDeleteCommand().Transaction=tran;
try
{
dda.Update(ds,"customers");
tran.Commit();
}
catch
{
tran.Rollback();
}
dy_2000_abc
2002-12-12
打赏
举报
回复
建议还是手工写Command,因为使用SqlCommandBuilder自动生成Command需要一个额外的数据库来回,这会导致性能降低。如果使用自动生成语句,你可以为更新语句定义事务,使得其他用户或进程在这个时间无法修改读取的数据,比如:
OleDbDataAdapter dda;
OleDbCommandBuilder builder=new OleDbCommandBuilder(dda);
builder.GetDeleteCommand().Connection.Open();
OleDbTransaction tran=builder.GetDeleteCommand().Connection.BeginTransaction();
tran.IsolationLevel=System.Data.IsolationLevel.RepeatableRead;
builder.GetDeleteCommand().Transaction=tran;
try
{
dda.Update(ds,"customers");
tran.Commit();
}
catch
{
tran.Rollback();
}
LearnH
2002-12-12
打赏
举报
回复
高手快帮忙呵
LearnH
2002-12-12
打赏
举报
回复
可我是直接使用DataAdapter的Update(),UpdateCommand是由SqlCommandBuilder生成的(好多个表,我不想每个表的Command都手工写出来),
这样DataAdapter就不是根据Timetamp来判断的,而是判断初始值,有没有办法让DataAdapter在发生冲突时强行更新记录?
jerryfangsh
2002-12-12
打赏
举报
回复
使用Timptamp。然后使用开发性并发冲突。
例如:
表:table
字段:id char(36),f_name char(10),l_name char(10),tamp timetamp
更新的SQL语句:
update table set id=@id,f_name=@fname,l_name=@lname where tamp=@tamp
在生成UpdateCommand时,指定tamp字段的DataRowVersion为Original。
LearnH
2002-12-12
打赏
举报
回复
事务处理只是在提交事务的时候才锁定记录,但是我的记录是早已经读取出来了,用户在对数据浏览后对数据进行修改(可能在浏览的时候别的用户已经修改了源表数据),保存的时候就会发生错误,这与事务处理已经没有关系了,因为其他用户对数据源的修改是在我读取记录后提交事务之前进行的
用多种方法冒泡
ooooooo
冒泡法排序c语言程序
AxureRP中文版
ooooooo
AxureRP中文版,。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
zipkin-server-2.23.16-exec
cmd中输入下列命令,运行zipkin java -jar zipkin-server-2.23.16-exec.jar 运行成功图案: oo oooo oooooo
ooooooo
o
ooooooo
ooo
ooooooo
ooooo
ooooooo
ooooooo
oooooo
ooooooo
oooooo
ooooooo
oooooo o o oooooo oooooo oo oo oooooo
ooooooo
oooo oooo
ooooooo
oooooo ooooo ooooo
ooooooo
oooooo oooooo oooooo
ooooooo
ooooooo
o oo oo ooooo
postgersql中文手册
postgersql 8的
数据库
中文手册 ,很全面的。
tuxing_print.py
Python中用使用列表打印..OO.OO.. .
OOOOOOO
. .
OOOOOOO
. ..OOOOO.. ...OOO... ....O....
C#
111,117
社区成员
642,552
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章