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

简单的DataSet更新数据,请直接帮助修改代码,勿贴教程或参考代码,多谢!

楼主luck0235(风平浪静时人人都能掌舵)2005-01-19 11:30:11 在 .NET技术 / ASP.NET 提问

数据库中只有一条记录:ID,username,password三个字段,现在我要用DataSet更新username和password,我如下代码当只更新一个字段时能正常执行,但同时更新两个字段就出错,望帮助修改代码,而不是帖出教程或帖出参考,MSDN上查了两天了,CSDN上也发过一帖了,还是没能解决:  
   
  private   void   ok_Click(object   sender,   System.EventArgs   e)  
  {  
      OleDbConnection   conn=new   OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data   Source="+Server.MapPath("../access/db1.mdb"));  
      conn.Open();  
      OleDbDataAdapter   myAdapter=new   OleDbDataAdapter("SELECT   ID,username,password   FROM   admin",conn);  
      OleDbCommandBuilder   myBuilder=new   OleDbCommandBuilder(myAdapter);  
      DataSet   myDataSet=new   DataSet();  
      myAdapter.Fill(myDataSet,"admin");  
      if(old_name.Text.Trim()==myDataSet.Tables["admin"].Rows[0]["username"].ToString()&&old_password.Text.Trim()==myDataSet.Tables["admin"].Rows[0]["password"].ToString())  
      {  
          //当省去下列一条,即只更新一个字段时能正常执行。  
          myDataSet.Tables["admin"].Rows[0]["username"]=new_name.Text.Trim();  
          myDataSet.Tables["admin"].Rows[0]["password"]=new_password2.Text.Trim();  
          myAdapter.Update(myDataSet,"admin");  
          conn.Close();  
      }  
      else  
      {  
          Response.Write("<script>alert('原用户名或密码错误!')</script>");  
      }  
  }  
   
  UPDATE   语句的语法错误。    
  说明:   执行当前   Web   请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。    
   
  异常详细信息:   System.Data.OleDb.OleDbException:   UPDATE   语句的语法错误。  
  行   76:myAdapter.Update(myDataSet,"admin");  
   
  问题点数:50、回复次数:17Top

1 楼xivi(xivi)回复于 2005-01-19 11:39:20 得分 2

OleDbCommandBuilder   myBuilder=new   OleDbCommandBuilder(myAdapter);  
  myAdapter.UpdateCommand=myBuilder.GetUpdateCommand();Top

2 楼Eddie005(♂) №.零零伍 (♂)回复于 2005-01-19 11:42:02 得分 10

myAdapter.Fill(myDataSet,"admin");  
  myDataSet.Tables[0].PrimaryKey   =   new   DataColumn[]{myDataSet.Tables[0].Columns["id"]};Top

3 楼luck0235(风平浪静时人人都能掌舵)回复于 2005-01-19 11:55:32 得分 0

照楼上两位的修改,错误依旧。Top

4 楼jzflyaway(flyaway)回复于 2005-01-19 11:57:26 得分 10

使用命令集合为类:OleDbCommandBuilder  
  使用这个类后自动帮你生成更新,插入和删除命令,然后人利用GetUpdateCommand(),GetInsertCommand(),GetDeleteCommand()命令就可以对数据库更新了.虽然不提倡这样做,因为速度太慢,但这样容易理解和使用.  
   
  之后注意重新绑定数据库.  
  OleDbCommandBuilder   commandBuilder=new   OleDbCommandBuilder(oleDataAdapter);  
  myAdapter.UpdateCommand=commandBuilder.GetUpdateCommand();  
  myAdapter.InsertCommand=commandBuilder.GetInsertCommand();  
  myAdapter.DeleteCommand=commandBuilder.GetDeleteCommand();  
  myAdapter.Update(myDataSet,"admin");  
  控件名.DataSource=myDataSet;  
  控件名.DataBind();  
   
  不知这样楼主是否明白?Top

5 楼cancerser(都是混饭吃,记得要结帖)回复于 2005-01-19 12:06:49 得分 1

myAdapter.Update(myDataSet);  
  看看这样有错没?  
   
  Top

6 楼luck0235(风平浪静时人人都能掌舵)回复于 2005-01-19 12:36:41 得分 0

真的我在MSDN上都查晕了,也不想了解什么原理了,只求哪位能写出一两句关键,让我这个程序正常执行吧,神啊,救救我吧!当学到ADO.net的DataSet终于让我怀念ADO的好了。Top

7 楼hedonister(冰戈)回复于 2005-01-19 13:17:31 得分 2

我看了你的代码了,就更新两个字段为什么不直接拼接SQL语句实现呢?Top

8 楼DanielQQ()回复于 2005-01-19 13:21:46 得分 2

你试一试直接采用OleDbCommandText="select   *   from   表名";   不使用OleDbCommandBuilder试一试,但一定要加入下面一句话:  
   
  myDataSet.Tables[0].PrimaryKey   =   new   DataColumn[]{myDataSet.Tables[0].Columns["ID"]};  
   
  字段大小写要一致!Top

9 楼luck0235(风平浪静时人人都能掌舵)回复于 2005-01-19 13:33:36 得分 0

回hedonister(★★★★★)   :本来可以用SQL实现的,但看了书上对DataSet评价的如此高,所以想用DataSet试试,没想到这样简单的更新一试就两天还没试好。Top

10 楼goody9807(http://goody9807.cnblogs.com)回复于 2005-01-19 18:11:29 得分 5

 
   
  ID,username,password三个字段  
   
  中肯定有关键字   把字段名都加个1试试  
   
  ID1,Username1,password1Top

11 楼goody9807(http://goody9807.cnblogs.com)回复于 2005-01-19 18:12:34 得分 0

或者在Sql语句中加   [   ]  
   
  例如:   Insert   users([ID],[username],[password])   values   ....Top

12 楼xiaodao2008(小刀)回复于 2005-01-19 18:17:49 得分 1

啦啦啦...Top

13 楼seesea125(执著)回复于 2005-01-19 18:40:29 得分 12

if(old_name.Text.Trim()==myDataSet.Tables["admin"].Rows[0]["username"].ToString()&&old_password.Text.Trim()==myDataSet.Tables["admin"].Rows[0]["password"].ToString())  
      {  
          //当省去下列一条,即只更新一个字段时能正常执行。  
          myDataSet.Tables["admin"].Rows[0]["username"]="sdsdds";  
          myDataSet.Tables["admin"].Rows[0]["password"]="sdfdsfdsf";//先这样试试,避免这有问题  
          OleDbTransaction   objTransaction=   new   OleDbTransaction();  
          try  
          {  
          OleDbCommandBuilder   objCommandBuilder   =new   OleDbCommandBuilder(myAdapter);  
          myAdapter.DeleteCommand   =   objCommandBuilder.GetDeleteCommand();  
          myAdapter.InsertCommand   =   objCommandBuilder.GetInsertCommand();  
          myAdapter.UpdateCommand   =   objCommandBuilder.GetUpdateCommand();  
          conn.Open();//可以删除,执行UPDATE时会自动打开连接,然后再将连接关闭,所以后来不用关  
          //闭了  
          conn.BeginTransaction();/开始事物交易  
          objTransaction   =   objConnect.BeginTransaction();  
          omyAdapter.DeleteCommand.Transaction   =   objTransaction;  
          myAdapter.InsertCommand.Transaction   =   objTransaction;  
          myAdapter.UpdateCommand.Transaction   =   objTransaction;  
          myAdapter.Update(myDataSet,"admin");  
           
        }  
        catch()  
          {  
          objTransaction.Rollback()  
           
      else  
      {  
          Response.Write("<script>alert('原用户名或密码错误!')</script>");  
      }  
  Top

14 楼seesea125(执著)回复于 2005-01-19 18:44:04 得分 0

有些地方语法有错误,修改一下就成了Top

15 楼zhangfire(色狼也可以学.net)回复于 2005-01-19 21:20:01 得分 5

private   void   ok_Click(object   sender,   System.EventArgs   e)  
  {  
      OleDbConnection   conn=new   OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data   Source="+Server.MapPath("../access/db1.mdb"));  
          OleDbDataAdapter   myAdapter=new   OleDbDataAdapter("SELECT   ID,username,password   FROM   admin",conn);  
          DataSet   myDataSet=new   DataSet();  
      myAdapter.Fill(myDataSet,"admin");  
      if(old_name.Text.Trim()==myDataSet.Tables["admin"].Rows[0]["username"].ToString()&&old_password.Text.Trim()==myDataSet.Tables["admin"].Rows[0]["password"].ToString())  
      {  
          //当省去下列一条,即只更新一个字段时能正常执行。  
          myDataSet.Tables["admin"].Rows[0]["username"]=new_name.Text.Trim();  
          myDataSet.Tables["admin"].Rows[0]["password"]=new_password2.Text.Trim();  
          OleDbCommandBuilder   myBuilder=new   OleDbCommandBuilder(myAdapter);  
          myAdapter.Update(myDataSet,"admin");  
            }  
      else  
      {  
          Response.Write("<script>alert('原用户名或密码错误!')</script>");  
      }  
  }  
   
  好了,这种方法你还不太理解:)  
  还有,下次要把代码贴得尽量有点道理,你这样少一些地方,看着好别扭。  
  Good   luck!Top

16 楼seesea125(执著)回复于 2005-01-20 09:09:28 得分 0

数据库open工作和数据库操作工作要try{代码}   catch{异常}   finally{释放对象},这样比较容易找到错误地方Top

17 楼luck0235(风平浪静时人人都能掌舵)回复于 2005-01-20 19:29:08 得分 0

压抑的第四天,终于解决问题,问题根源似乎出乎各位预料:  
  在Access数据库中,当某一字段设为"password"时,就无法用我的方法对其更新!所以我在数据库中将"password"字段名改为"psd",一切正常,我不知道是不是"password"与.net   framework的某关键字产生冲突。就这个小细节害得我几天几夜没睡好觉,并在CSDN总计放了350分,在MSDN中浏览了不下五万字的资料。两个字:痛苦!  
   
  有兴趣的朋友可以在Access中设个"password"字段试试,也不知其它数据库是否存在该问题。  
   
  好了,结账,感谢各位认真看完我代码的朋友,感谢各位热心的建议,获益良多。Top

相关问题

  • 更新不及时?帮帮忙,多谢
  • dataset更新。100分
  • DataSet更新问题!!!
  • dataset 数据更新问题:
  • 更新dataset到数据库
  • DataSet数据更新问题
  • 请问哪里有TRW2000的使用教程啊,多谢。
  • 请问哪有weblogic教程?入门的!多谢了!
  • 哪里可以找到C++大学教程习题的答案?多谢~!
  • 如何获取 文件类型?文件更新日期?多谢高手帮忙!

关键词

  • 代码
  • 字段
  • 数据库
  • 执行
  • myadapter
  • mydataset
  • oledbcommandbuilder
  • 更新
  • admin
  • mybuilder

得分解答快速导航

  • 帖主:luck0235
  • xivi
  • Eddie005
  • jzflyaway
  • cancerser
  • hedonister
  • DanielQQ
  • goody9807
  • xiaodao2008
  • seesea125
  • zhangfire

相关链接

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

广告也精彩

反馈

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