求跪:强类型Dataset更新到数据库
使用的是强类型,机器自己生成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




