您的位置:程序门 -> .net技术 -> vb.net



vb2005中将datagridview里面的修改保存到数据库出错。


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


vb2005中将datagridview里面的修改保存到数据库出错。[已结贴,结贴人:rockyvan]
发表于:2008-01-16 21:05:40 楼主
以下是部分代码:
vb.net code
....... me.validate() me.testbindingsource.endedit() me.testtableadapter.update(me.test2000dataset.test.getchanges) '提示上面这句出错,以下是错误信息。 'EXECutereader: commandtext property has not been initialized me.test2000dataset.test.acceptchanges() ......


修改一行保存一行太麻烦。
上面的是我参考别人的一段代码。
希望datagridview所有的修改更新结束后一起保存到数据库,请问如何实现?
发表于:2008-01-16 21:30:141楼 得分:12
'提示上面这句出错,以下是错误信息。
'EXECutereader:   commandtext   property   has   not   been   initialized
提示信息很明确,就是command对象的commandtext属性未设置

全表保存,就是对dataadapter配置就行了,然后dataadapter.update(dataset);
  至于如何配置,你加个数据向导窗体,打开代码看一下就知道了
发表于:2008-01-16 22:19:092楼 得分:12
'EXECutereader:
看一下,是不是用错了.dataadapter
发表于:2008-01-17 08:36:053楼 得分:0
这个表test没有设置主键,是否一定要设置主键?
发表于:2008-01-17 09:21:424楼 得分:14
自己建的数据字段不一定要设为主键,但是一个数据表类,最好有个自增的字段做为主键.
command对象的commandtext属性未设置这个错误,估计是的command对象没有设置属性:如下
  con=new   sqlconnection(constr)
  dim   command   as   sqlcommand=new   sqlcommand()
  command.connection=con;
  command.commandtext="........";


/////////////////////////////////////////////////////////////
                                con   =   new   oledbconnection(constr);
                                con.open();
                                oledbcommand   cmd   =   new   oledbcommand("select   st_cpid   as   产品编号,st_cpname   as   产品名称,st_cpanquan   as   安全存量   from   tbstorechanpinxinxi",   con);
                                oledbdataadapter   da   =   new   oledbdataadapter();
                                da.selectcommand   =   cmd;
                                oledbcommandbuilder   cbuild   =   new   oledbcommandbuilder(da);
                                da.update(dscpxx1,   "tbstorechanpinxinxi");
                                datagridview1.datasource   =   dscpxx1.tables["tbstorechanpinxinxi"].defaultview;
                                messagebox.show("更新成功");
                                button2.enabled   =   false;
                                con.close();
                                con.dispose();
                                cmd.dispose();
                                da.dispose();
                                dscpxx1.dispose();

以上代码为多存储语句,dscpxx1为dataset控件,绑定要填充的数据表.
发表于:2008-01-17 09:25:375楼 得分:12
和主健没关系,拼接成一个sql执行得啦
发表于:2008-01-17 10:26:096楼 得分:0
我是直接拖控件生成的,我看了下testtableadapter的属性。
deletecommand.text,updatecommand.text都为空。
selectcommand.text,insertcommand.text自动生成了代码。
这也是为什么可以查询数据和插入行,但是不能删除和更新的原因。
请教高手指点deletecommand.text,updatecommand.text的配置语句。
发表于:2008-01-17 10:59:287楼 得分:0
搞明白了,直接拖控件生成的,数据库的表没有主键是不行的。
我的表每一列都可能出现重复数据,需要至少两列才能定位一条记录。
这次让我长记性了,以后建数据表的时候记得设主键。好习惯,要养成!

设定主键后系统自动生成了deletecommand.text,updatecommand.text,如下:
vb.net code
'deletecommand.text: delete from test where (c1 = @original_c1) and (@isnull_c2 = 1 and c2 is null or c2 = @original_c2) and (@isnull_c3 = 1 and c3 is null or c3 = @original_c3) and (@isnull_c4 = 1 and c4 is null or c4 = @original_c4) and (@isnull_c5 = 1 and c5 is null or c5 = @original_c5) 'updatecommand.text: update test set c1 = @c1, c2 = @c2, c3 = @c3, c4 = @c4, c5 = @c5 where (c1 = @original_c1) and (@isnull_c2 = 1 and c2 is null or c2 = @original_c2) and (@isnull_c3 = 1 and c3 is null or c3 = @original_c3) and (@isnull_c4 = 1 and c4 is null or c4 = @original_c4) and (@isnull_c5 = 1 and c5 is null or c5 = @original_c5)

发表于:2008-01-17 11:31:098楼 得分:0
楼上几位费心了,正好5人一人10分。


快速检索

最新资讯
热门点击