CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  VB.NET

如何能忽略并发?

楼主blasterboy(自由给与我力量。支持O'Reilly)2004-08-02 13:50:45 在 .NET技术 / VB.NET 提问

怎么能让他不管三七二十一直接就给我更新就可以  
  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

相关问题

  • 如何获取access新记录的自动编号值或忽略DataSet的并发冲突错误?
  • 如何测试并发访问?1w~~~10w
  • 如何进行并发测试。
  • PB如何控制存盘的并发错误?急呀!
  • 问高手们,win2kserver下如何组装arp包并发送?
  • 如何在linux进行串口操作,并发AT命令?
  • 如何多个线程之间的并发处理?
  • 如何处理数据的并发问题
  • mysql的性能如何?支持多少并发用户??
  • 如何解决数据库表的并发问题

关键词

  • .net
  • asp.net
  • 电子邮件
  • 语句
  • 域名
  • 代码
  • 数据库
  • 开放式
  • 虚拟主机
  • 并发

得分解答快速导航

  • 帖主:blasterboy
  • Brunhild
  • bluepisces
  • follyfour
  • Brunhild
  • Brunhild
  • li_ping
  • Brunhild
  • Brunhild
  • Brunhild
  • Brunhild

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo