如何能忽略并发?
怎么能让他不管三七二十一直接就给我更新就可以
adapter.update
总是给我把并发错误。很郁闷。能不能让它忽略了并发错误。只要更新就可以了!!
问题点数:50、回复次数:26Top
1 楼Brunhild()回复于 2004-08-02 14:26:02 得分 5
在配置adapter中走到“生成SQL语句”时CLICK“高级选项”,将“使用开放式并发”去掉。Top
2 楼blasterboy(自由给与我力量。支持O'Reilly)回复于 2004-08-02 15:22:46 得分 0
可是如果我是写的代码,而不是用自动生成器,那怎么办啊?Top
3 楼blasterboy(自由给与我力量。支持O'Reilly)回复于 2004-08-02 15:34:37 得分 0
我看了他自动生成的代码,根本就没有什么区别,那她到底是怎么回事?自动生成的时候,到底都生成了什么?Top
4 楼blasterboy(自由给与我力量。支持O'Reilly)回复于 2004-08-02 21:35:31 得分 0
没有人理我,自己up一下吧!!Top
5 楼bluepisces(蓝色)回复于 2004-08-03 09:02:38 得分 5
up!!!give me money!Top
6 楼follyfour(傻四)回复于 2004-08-03 09:13:52 得分 5
1、你应该处理并发问题,如果老是报错,你应该检查程序。
2、ADO。NET默认用的是乐观性(开放式)的并发性。你想实现的是破坏式(最后的更新生效)的并发性,ADO。NET是支持的,但我只能提供这个名词,不会实现代码。
Top
7 楼Brunhild()回复于 2004-08-03 13:41:44 得分 5
这是我用NORTHWIND的CATEGORIES表做的试验,不明白为什么你的没有区别,是否没有主键?
如果你是自己写就更简单,仿照第二个UPDATE就可以了。
开启开放式并发生成的UPDATE语句:
UPDATE Categories SET CategoryName = @CategoryName, Description = @Description, Picture = @Picture
WHERE (CategoryID = @Original_CategoryID) AND (CategoryName = @Original_CategoryName);
SELECT CategoryID, CategoryName, Description, Picture FROM Categories WHERE (CategoryID = @CategoryID)
关闭开放式并发生成的UPDATE语句:
UPDATE Categories SET CategoryName = @CategoryName, Description = @Description, Picture = @Picture
WHERE (CategoryID = @Original_CategoryID);
SELECT CategoryID, CategoryName, Description, Picture FROM Categories WHERE (CategoryID = @CategoryID)
Top
8 楼blasterboy(自由给与我力量。支持O'Reilly)回复于 2004-08-04 17:28:30 得分 0
我看了一下你写的代码,主要就是where后面的变化,我现在的SQL就是和你写出来的关闭并发生成的语句是一样的。为什么还是报那个错误Top
9 楼blasterboy(自由给与我力量。支持O'Reilly)回复于 2004-08-04 17:28:59 得分 0
还有,我如何用代码控制,让他不进行并发控制?Top
10 楼blasterboy(自由给与我力量。支持O'Reilly)回复于 2004-08-05 11:00:35 得分 0
为什么没有人回答:(,难道大家都不会吗:(,斑竹也不帮帮忙!!Top
11 楼webcool(浪滔天.NET)回复于 2004-08-05 12:26:09 得分 0
■■■高速稳定ASP.NET虚拟主机网站空间SQLSERVER数据库4折优惠酬宾 ■■■
■大海网络软件有限公司(www.dahai.net)是国内最早提供ASP.NET虚拟主机的服务商之一。
至今大海网络积累了大量的客户,服务成本直线下降。为此公司决定对目前所有产品实现降价销售。
========================================================================
■虚拟主机(HTM,ASP,ASP.NET)和数据库产品(SQLSERVER)优惠幅度达4折
========================================================================
HTML-A(100M HTML 空间;赠送25M电子邮件;) 价格:72元
HTML-B(200M HTML 空间;赠送50M电子邮件;) 价格:112元
HTML-C(400M HTML 空间;赠送100M电子邮件;) 价格:192元
HTML-D(800M HTML 空间;赠送200M电子邮件;) 价格:272元
HTML-E(50M HTML 空间;赠送5M电子邮件;) 价格:65元
========================================================================
ASP-A(100M ASP 空间;赠送25M电子邮件;) 价格:96元
ASP-B(200M ASP 空间;赠送50M电子邮件;) 价格:136元
ASP-C(400M ASP 空间;赠送100M电子邮件;) 价格:216元
ASP-D(800M ASP 空间;赠送200M电子邮件;) 价格:376元
ASP-E(50M ASP 空间;赠送5M电子邮件;) 价格:86元
========================================================================
ASP.NET-A(100M ASP.NET 空间;赠送25M电子邮件;) 价格:112元
ASP.NET-B(200M ASP.NET 空间;赠送50M电子邮件;) 价格:192元
ASP.NET-C(400M ASP.NET 空间;赠送100M电子邮件;) 价格:328元
ASP.NET-D(800M ASP.NET 空间;赠送200M电子邮件;) 价格:432元
========================================================================
SQL-A(50M SQL Server 数据库空间;) 价格:112元
SQL-B(100M SQL Server 数据库空间;) 价格:192元
SQL-C(200M SQL Server 数据库空间;) 价格:328元
SQL-D(400M SQL Server 数据库空间;) 价格:432元
========================================================================
MAIL-A(25M 企业域名 电子邮件;) 价格:15元
MAIL-B(50M 企业域名 电子邮件;) 价格:25元
MAIL-C(100M 企业域名 电子邮件;) 价格:50元
MAIL-D(250M 企业域名 电子邮件;) 价格:125元
MAIL-E(500M 企业域名 电子邮件;) 价格:250元
MAIL-F(1000M 企业域名 电子邮件;) 价格:500元
========================================================================
■域名注册(国内国际)和网站推广产品(搜狐,新浪,网易,Google)优惠如下
========================================================================
英文国际顶级域名(.com/.net/.org) 价格:58元
英文国内域名(.cn/.com.cn/.net.cn/.org.cn) 价格:98元
.biz/.info国际英文域名 价格:105元
========================================================================
通用网址 价格:300元
新浪快速登录 价格:300元
新浪搜索固定型及推广型登录 价格:6折
搜狐普通型登录 价格:216元
搜狐搜索固定型及推广型登录 价格:6折
网易搜索经济型服务 价格:300元
网易搜索超值型服务 价格:1500元
Google右侧排名(包年或包月) 价格:7折
新浪竞价排名 价格:8折
搜狐竞价广告 价格:72折
网易竞价广告 价格:55折
雅虎中国搜索排名 价格:75折
========================================================================
■联系大海网络(www.dahai.net)软件有限公司
========================================================================
公司网址:http://www.dahai.net/
联系人:张先生(13179682338),孙先生
电话:0510-8821881,3732767
传真:0510-3732767
在线销售:QQ:3712846,MSN:webcool@dahai.net
支付账号:http://www.dahai.net/pay.aspx
========================================================================
■我们秉承“一点一滴 乃成大海”的理念服务客户Top
12 楼blasterboy(自由给与我力量。支持O'Reilly)回复于 2004-08-05 13:04:38 得分 0
我靠,我还以为有人回答了呢,原来还是广告!!!
气愤!!!Top
13 楼Brunhild()回复于 2004-08-05 13:51:37 得分 5
是否其他地方有问题?有没有让ADAPTER使用正确的UPDATECOMMAND?我用关闭并发冲突后的语句是不会出现并发异常的(除非记录已被删除),如不相信我可以将测试程序发给你。
Top
14 楼blasterboy(自由给与我力量。支持O'Reilly)回复于 2004-08-05 13:58:41 得分 0
是这样子的,我不知道如何关闭并发。用代码如何控制我确实不知道。
所以我就用OLeDBCommandBuider自动生成updateCommand,然后我去的Text,自己把Where后面的语句都给删除掉了,然后自己拼了一些语句。
现在是一般的画面不会出现并发错误,可是还是有一些需求比较奇怪的画面出现问题:(Top
15 楼blasterboy(自由给与我力量。支持O'Reilly)回复于 2004-08-05 15:41:29 得分 0
看来下午大家都犯困,没有人理我了。等待。。。。。。。。。。。。。。。。。。。。。。中。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。Top
16 楼li_ping(学习WinFX("Avalon"))回复于 2004-08-05 16:09:22 得分 2
都在繁忙中。。。。。。Top
17 楼blasterboy(自由给与我力量。支持O'Reilly)回复于 2004-08-05 17:25:39 得分 0
大家繁忙中
我在郁闷中
不知谁帮忙
救我水火中Top
18 楼Brunhild()回复于 2004-08-06 13:19:34 得分 2
将你的代码贴出来看看Top
19 楼blasterboy(自由给与我力量。支持O'Reilly)回复于 2004-08-06 17:03:56 得分 0
Public Sub FG_TrueDBSelect(ByVal strSQL As String, ByRef table As DataTable)
FG_MDBClose()
FG_MDBOpen()
Try
conn.Open()
adapter = getAdapter(table)
oCommandBuilder = getComBuilder(table)
adapter.SelectCommand = New OleDbCommand(strSQL, conn)
table.Clear()
adapter.FillSchema(table, SchemaType.Source)
adapter.Fill(table)
oCommandBuilder.RefreshSchema()
table.AcceptChanges()
Catch ex As Exception
MsgBox(ex.Message)
Finally
conn.Close()
End Try
End SubTop
20 楼blasterboy(自由给与我力量。支持O'Reilly)回复于 2004-08-06 17:04:53 得分 0
Public Sub FG_TrueDBUpdate(ByRef table As DataTable)
Try
conn.Open()
'If the DataTable is changed nothing
If IsNothing(table.GetChanges) Then
Return
End If
'adapter.ContinueUpdateOnError = True
adapter = getAdapter(table)
oCommandBuilder = getComBuilder(table)
adapter.InsertCommand = oCommandBuilder.GetInsertCommand
adapter.UpdateCommand = oCommandBuilder.GetUpdateCommand
adapter.UpdateCommand.CommandText = makeUpSql(oCommandBuilder.GetUpdateCommand.CommandText)
If Not IsNothing(table.GetChanges(DataRowState.Added)) Then
adapter.Update(table.GetChanges(DataRowState.Added))
End If
If Not IsNothing(table.GetChanges(DataRowState.Modified)) Then
adapter.Update(table.GetChanges(DataRowState.Modified))
End If
table.AcceptChanges()
If Not table.HasErrors Then Exit Sub
Dim dr As DataRow
For Each dr In table.Rows
If dr.RowState <> DataRowState.Unchanged Then
If dr.RowState = DataRowState.Added Then
MsgBox(dr(1, DataRowVersion.Current).ToString)
Else
MsgBox(dr(1, DataRowVersion.Original).ToString)
End If
End If
Next
' adapter.Update(table)
table.AcceptChanges()
'FG_MDBClose()
'FG_MDBOpen()
Catch ex As Exception
MsgBox(ex.Message)
Finally
conn.Close()
System.Threading.Thread.Sleep(1000)
End Try
End SubTop
21 楼blasterboy(自由给与我力量。支持O'Reilly)回复于 2004-08-06 17:05:46 得分 0
Private Function getComBuilder(ByRef table As DataTable) As OleDbCommandBuilder
Dim cb As OleDbCommandBuilder
If Not ht.ContainsKey(table) Then
cb = New OleDbCommandBuilder(adapter)
ht.Add(table, cb)
Return cb
Else
Return ht.Item(table)
End If
End Function
Private Function getAdapter(ByRef table As DataTable) As OleDbDataAdapter
Dim ap As OleDbDataAdapter
If Not htadapter.ContainsKey(table) Then
ap = New OleDbDataAdapter
htadapter.Add(table, ap)
Return ap
Else
Return htadapter.Item(table)
End If
End FunctionTop
22 楼Brunhild()回复于 2004-08-06 22:11:37 得分 1
makeUpSql是什么?
Top
23 楼blasterboy(自由给与我力量。支持O'Reilly)回复于 2004-08-09 09:04:10 得分 0
makeUpSql
主要用来把UpdateCommand.Text加工的
代码如下
Private Function makeUpSql(ByVal commandtext As String) As String
Dim upSQL As String
upSQL = commandtext
upSQL = upSQL.Substring(0, upSQL.IndexOf("WHERE"))
Return upSQL & " WHERE (ID = ?)"
End FunctionTop
24 楼Brunhild()回复于 2004-08-09 20:40:55 得分 5
这样替换并不安全啊,因为OLEDB的参数是按顺序的,你能否确定WHERE (ID = ?)中ID所对应的参数就是你需要的数据吗?
我用Norwind.Categories试过,由于不同的SELECT字段顺序,可能会使你的UPDATE失败:
SELECT语句:
SELECT CategoryName, Description, Picture, CategoryID FROM Categories
UPDATE语句:
UPDATE Categories SET CategoryName = ? , Description = ? , Picture = ? , CategoryID = ? WHERE ( ((? = 1 AND CategoryName IS NULL) OR (CategoryName = ?)) AND (CategoryID = ?) )
UPDATECOMMAND中的PARAMTERS和对应的字段
@p1 = CategoryName
@p2 = Description
@p3 = Picture
@p4 = CategoryID
@p5 =
@p6 = CategoryName
@p7 = CategoryID
如上的UPDATE中如果将条件替换为WHERE (CategoryID = ?),那么作为条件的CategoryID 对应的PARAMTER是@p5,这样UPDATE肯定有问题。
你可以用下面类似的代码看看UPDATECOMMAND的内容:
Dim builder As New OleDb.OleDbCommandBuilder(Me.OleDbDataAdapter1)
With Me.OleDbDataAdapter1
.UpdateCommand = builder.GetUpdateCommand
Debug.WriteLine(.UpdateCommand.CommandText)
For Each param As OleDb.OleDbParameter In .UpdateCommand.Parameters
Debug.WriteLine(param.ParameterName & " = " & param.SourceColumn)
Next
End With
如果你的参数没问题,我这里已经试过,应该是可以的。
Top
25 楼blasterboy(自由给与我力量。支持O'Reilly)回复于 2004-08-11 19:04:27 得分 0
还是有些没有看懂。本来都有些绝望了,没想到 Brunhild() 兄还在帮助我。太感动了 !!
不过你说的,我有些不太明白。Top
26 楼Brunhild()回复于 2004-08-12 01:42:40 得分 15
如果可以,可否将你的SELECT语句贴出来,因为这关系到后面UPDATE参数的顺序Top




