CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  VB.NET

求跪:强类型Dataset更新到数据库

楼主bjhdyb()2006-11-03 19:15:06 在 .NET技术 / VB.NET 提问

使用的是强类型,机器自己生成Command命令,insert   /select/delect/updata都有了,数据库也设了主键,可就是更新不到数据库,很是奇怪,从GOOGLE/BAIDU都没有找到正确解决的方法??哪位高人知道?????????这个问题很多人都有疑问,,,,,  
                  myAdapter.Fill(MyDataSet1.tabMailaddress)  
                  Dim   row   As   myDataSet.tabMailaddressRow  
                  row   =   MyDataSet1.tabMailaddress.Rows(CInt(Trim(txtSn.Text)   -   1))  
                  row.name   =   txtName.Text.Trim()  
                  row.mailadd   =   txtMailAdd.Text.Trim()  
                  row.honeyname   =   Trim(txtHoneyName.Text)  
                  row.normaltel   =   Trim(txtNormalTel.Text)  
                  row.mobiletel   =   txtMobileTel.Text.Trim()  
                  myAdapter.Update(MyDataSet1.tabMailaddress)    
  问题点数:20、回复次数:33Top

1 楼bjhdyb()回复于 2006-11-04 20:03:52 得分 0

这个问题怎么一直没有人回答啊?难道大家都不会??  
   
  Top

2 楼bjhdyb()回复于 2006-11-06 20:36:32 得分 0

这个问题,怎么没有一个人会嘛?Top

3 楼phenix0109()回复于 2006-11-06 22:27:13 得分 0

Command对象是否有指定SQL语句或者存储过程,如果有参数是否有指定每个参数是否对应DataTable的相应的列。如果没指定,我先前就试过Delete失败。  
  希望能给你点参考。Top

4 楼bjhdyb()回复于 2006-11-07 21:48:08 得分 0

老兄,我不太明白,我是参考微软Webcast视频作的,可是作出来不行,用的是强类型,都是机器生成的代码,四个常用用的命令都生成了,dataset   中更新了,就是数据库中没更新??Top

5 楼grace_xqf()回复于 2006-11-07 23:43:02 得分 0

row.honeyname   =   Trim(txtHoneyName.Text)  
  row.normaltel   =   Trim(txtNormalTel.Text)  
  这两句有没有错Top

6 楼bjhdyb()回复于 2006-11-08 21:45:25 得分 0

没有提示有错误啊,Trim是去掉空格的,应该没问题吧Top

7 楼bvtc_liguoyuan(元古)回复于 2006-11-08 22:53:23 得分 0

顶你!!是不是要在前面申明         dim   b   as   System.Data.SqlClient.SqlCommandBuilder   (adp)  
  更新都要把适配器添加进来!!  
  UP   ,接分的.Top

8 楼bvtc_liguoyuan(元古)回复于 2006-11-08 22:54:55 得分 0

这问题我碰到过.  
  Top

9 楼bjhdyb()回复于 2006-11-09 20:53:52 得分 0

楼上的,我请教你一下:  
  dim   b   as   System.Data.SqlClient.SqlCommandBuilder   (adp)  
  声明了一个b,b是作什么用的?就这个摆着嘛??  
  再有,adp是什么,是电脑自动生成的dataAdapter嘛  
                  myTableAdapter.Fill(myDataSet.tabMailaddress)  
                  Dim   row   As   DataSet.tabMailaddressRow  
                  row   =   myDataSet.tabMailaddress.Rows(0)  
                  dim   b   as   System.Data.SqlClient.SqlCommandBuilder   (myTableAdapter)  
  可是电脑在myTableAdapter提示,写的不对???为什么???Top

10 楼b_duan()回复于 2006-11-09 21:41:52 得分 0

在最下面加个dataset.acceptchanges()试试,我以前也遇到过。但我的是非强类型的。Top

11 楼bjhdyb()回复于 2006-11-09 21:54:56 得分 0

myTableAdapter.Fill(myDataSet.tabMailaddress)  
                  Dim   row   As   DataSet.tabMailaddressRow  
                  row   =   myDataSet.tabMailaddress.Rows(0)  
                  row.name   =   txtName.Text  
                  myTableAdapter.Update(myDataSet.tabMailaddress)  
                  myDataSet.AcceptChanges()  
  就是这样,我也加了,可是还是更新不到数据库,Dataset中是更新了,可是如果重启软件再从数据库中读取就是没有更新,一打开数据库自然就是证明了,没更新到数据库????Top

12 楼bjhdyb()回复于 2006-11-10 21:48:36 得分 0

??WHO??知道???Top

13 楼W_W_Q(韦一笑)回复于 2006-11-11 10:45:06 得分 0

如果确保Command没有错,那么:  
   
  myAdapter.Fill(MyDataSet1.tabMailaddress)  
                  Dim   row   As   myDataSet.tabMailaddressRow----->改为:Dim   row   As   myDataSet.tabMailaddress.NewRow  
                  row   =   MyDataSet1.tabMailaddress.Rows(CInt(Trim(txtSn.Text)   -   1))  
                  row.name   =   txtName.Text.Trim()  
                  row.mailadd   =   txtMailAdd.Text.Trim()  
                  row.honeyname   =   Trim(txtHoneyName.Text)  
                  row.normaltel   =   Trim(txtNormalTel.Text)  
                  row.mobiletel   =   txtMobileTel.Text.Trim()  
                  MyDataSet1.tabMailaddress.AddRow(row)'这里增加这个语句把新增的行假如表中  
                  myAdapter.Update(MyDataSet1.tabMailaddress)    
  另外要注意代码的规范Top

14 楼W_W_Q(韦一笑)回复于 2006-11-11 10:46:37 得分 0

居然把加入打成假如,汗Top

15 楼bvtc_liguoyuan(元古)回复于 2006-11-12 18:14:35 得分 0

在最前面:dim   b   as   System.Data.SqlClient.SqlCommandBuilder   (myAdapter  
   
    myAdapter.Fill(MyDataSet1.tabMailaddress)  
                  Dim   row   As   myDataSet.tabMailaddressRow  
                row   =   MyDataSet1.tabMailaddress.Rows(CInt(Trim(txtSn.Text)   -   1))  
                  row.name   =   txtName.Text.Trim()  
                  row.mailadd   =   txtMailAdd.Text.Trim()  
                  row.honeyname   =   Trim(txtHoneyName.Text)  
                  row.normaltel   =   Trim(txtNormalTel.Text)  
                  row.mobiletel   =   txtMobileTel.Text.Trim()  
                  myAdapter.Update(MyDataSet1.tabMailaddress)    
   
  你试一试.   myadapter   添加到SqlCommandBuilder的作用是:myadpter.update(MyDataSet1.tabMailaddress)才能够实现更新功能.  
   
   
  Top

16 楼bvtc_liguoyuan(元古)回复于 2006-11-12 18:17:24 得分 0

b只是一个对象,你得将适配器添加进去才能够实现更新,删除功能.等.Top

17 楼bvtc_liguoyuan(元古)回复于 2006-11-12 18:22:00 得分 0

用我的方法!绝对没有错.!Top

18 楼bjhdyb()回复于 2006-11-13 16:19:41 得分 0

好的,我晚上试试,这个问题已经困惑我很长时间了,但一直没有找到正确的答案,谢谢Top

19 楼bjhdyb()回复于 2006-11-13 19:53:02 得分 0

dim   b   as   System.Data.SqlClient.SqlCommandBuilder   (myTableAdapter)  
  在myTableAdapter下面会有蓝色波浪线啊??出现这个提示:"数组界限不能出现在类型说明符中"  
  这样写对嘛??Top

20 楼bjhdyb()回复于 2006-11-13 20:35:11 得分 0

我用的是VS2005中自带的SQL   Express版,会不会是因为这是快速体验版的原因呢?还有我的myTableAdapter是用电脑自动生成的,四个命令也都有了??很奇怪?Top

21 楼zhang87224088()回复于 2006-11-15 11:42:27 得分 0

我的在myTableAdapter下面也有蓝色波浪线啊??  
  请高手赐教Top

22 楼bjhdyb()回复于 2006-11-17 17:15:10 得分 0

楼上的,要是明白,告诉我一声,我研了好半天,都没懂Top

23 楼xingyjj()回复于 2006-11-18 13:37:48 得分 0

我也是刚学了,为了回报在此网站我受到的恩惠  
  我也专门注册个帐号  
  为你解答一下,我也是在这个帖子上看到的  
  但是我实验成功了  
  因为我原来就看过相关的书  
  比你知道的东西多点  
  所以我成功了  
  嘿嘿,代码在楼下Top

24 楼xingyjj()回复于 2006-11-18 13:51:39 得分 0

---开始---先声明空间--------  
  Imports   System.Data  
  Imports   System.Data.SqlClient  
  ---------------------  
  ---我做了一个按钮的代码--------  
  -----我为你行行注释---------  
        Private   Sub   Button2_Click(ByVal   sender   As   System.Object,   ByVal   e   As   System.EventArgs)   Handles   Button2.Click  
                  Dim   name,   pass   As   String '注册的用户名和密码  
                  name   =   Trim(TextBox1.Text).ToString 'trim去除前后空格,并转化为字符串  
                  pass   =   Trim(TextBox2.Text).ToString  
   
                  Dim   conn   As   New   System.Data.SqlClient.SqlConnection("server=.;database=name01;uid=sa;pwd=;") '连接数据库,表名为'biao'  
                  conn.Open()  
                  Dim   ds   As   New   SqlDataAdapter("select   *   from   biao",   conn) '执行SQL语句和连接数据库  
                  Dim   mydataset   As   New   DataSet()   '声明新的数据集  
                  Dim   b   As   New   SqlCommandBuilder(ds) '这个是必须的,声明此操作可以更新\删除\填加\返回.b是自己随便定义的.  
                  ds.Fill(mydataset,   "biao") '填充数据集mydataset,必须指明表名是'biao',否则出错.  
                  Dim   dr   As   DataRow '先定义一个数据行  
                  dr   =   mydataset.Tables("biao").NewRow '把数据行给新行  
                  dr("name")   =   name  '命令dr行中的name字段=name  
                  dr("pass")   =   pass  '如上  
                  mydataset.Tables("biao").Rows.Add(dr) '把新行的数据更新到数据集  
                  ds.Update(mydataset.Tables("biao"))  '把表更新  
                  MsgBox("成功")  提示  
          End   Sub  
  ---------完结------------  
  -----------------------  
  代码通过测试,完全成功.如您还是不可以  
  请找其他的原因  
  本人再次呼吁:请学成后多给还不会的人更多的支持与帮助  
  谢谢合作Top

25 楼xingyjj()回复于 2006-11-18 13:58:38 得分 0

---把全部原代码再贴出来,怕你错误,嘿嘿-------  
  Imports   System.Data  
  Imports   System.Data.SqlClient  
  Public   Class   Form1  
          Private   Sub   Button2_Click(ByVal   sender   As   System.Object,   ByVal   e   As   System.EventArgs)   Handles   Button2.Click  
                  Dim   name,   pass   As   String  
                  name   =   Trim(TextBox1.Text).ToString  
                  pass   =   Trim(TextBox2.Text).ToString  
                  Dim   conn   As   New   System.Data.SqlClient.SqlConnection("server=.;database=name01;uid=sa;pwd=;")  
                  conn.Open()  
                  Dim   ds   As   New   SqlDataAdapter("select   *   from   biao",   conn)  
                  Dim   mydataset   As   New   DataSet()  
                  Dim   b   As   New   SqlCommandBuilder(ds)  
                  ds.Fill(mydataset,   "biao")  
                  Dim   dr   As   DataRow  
                  dr   =   mydataset.Tables("biao").NewRow  
                  dr("name")   =   name  
                  dr("pass")   =   pass  
                  mydataset.Tables("biao").Rows.Add(dr)  
                  ds.Update(mydataset.Tables("biao"))  
                  MsgBox("成功")  
          End   Sub  
  End   ClassTop

26 楼bjhdyb()回复于 2006-11-18 16:56:02 得分 0

好人一生平安!!谢谢~~  
  我原来用机器生成的代码?没有这些                
    Dim   conn   As   New   System.Data.SqlClient.SqlConnection("server=.;database=name01;uid=sa;pwd=;")  
                  conn.Open()  
                  Dim   ds   As   New   SqlDataAdapter("select   *   from   biao",   conn)  
                  Dim   mydataset   As   New   DataSet()  
  能读不能写??Top

27 楼W_W_Q(韦一笑)回复于 2006-11-19 00:50:24 得分 0

说了那么多你还不明白?  
  你的错误在于DataRow虽然赋值了但是没有加入数据表中。  
  Top

28 楼bjhdyb()回复于 2006-11-19 09:47:17 得分 0

我要求问的就是为什么没有装进数据表中...我想知道原因?Top

29 楼W_W_Q(韦一笑)回复于 2006-11-20 14:24:48 得分 0

这里的数据表指的是数据集的数据表,不是数据库的数据表,你的数据集合根本没有数据改变,拿什么更新到数据库中?  
  MyDataSet1.tabMailaddress.AddRow(row)'增加这个语句把新增的row加入数据库集的数据表中Top

30 楼bjhdyb()回复于 2006-11-22 10:58:50 得分 0

可是我单步调试的时候,在Dateset数据集中已经更新了啊?但操作完之后,数据库中就是没有更新!!我用的是VS2005Top

31 楼W_W_Q(韦一笑)回复于 2006-11-22 16:11:21 得分 0

语句当然是执行了,就是没数据就没结果Top

32 楼bjhdyb()回复于 2006-11-23 21:00:36 得分 0

可是,我看到DATASET中是加入了新的一条数据啊?Top

33 楼mhxcy()回复于 2006-11-29 08:56:51 得分 0

缺少此行     Dim   b   As   New   SqlCommandBuilder(ds)Top

相关问题

关键词

得分解答快速导航

  • 帖主:bjhdyb

相关链接

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

广告也精彩

反馈

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