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



用sqldataadapter更新dataset時設置事務,出錯!


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


用sqldataadapter更新dataset時設置事務,出錯![已结贴,结贴人:aaron_chen]
发表于:2007-10-24 11:17:46 楼主
主要出現以下問題:
在datagridview中修改數據後,點button1進行更新,如果數據正確,可以更新。但當出過錯後(比如其中一列不能為空,但是輸入為空)再更改輸入信息,點button1進行更新,此時數據不能正確更新。
代碼如下:
                private   string   sqlconn   =   sqlhelper.connectionstring;
                sqlconnection   conn;
                sqltransaction   mytrans;
                dataset   ds;
                sqldataadapter   sda;
                sqlcommandbuilder   cmd;
                public   frmtest()
                {
                        initializecomponent();
                }

                private   void   frmtest_load(object   sender,   eventargs   e)
                {
                        conn   =   new   sqlconnection(sqlconn);
                        conn.open();
                        sda   =   new   sqldataadapter();
                        sda.selectcommand   =   new   sqlcommand("select   *   from   datatablecollection",   conn);
                        ds   =   new   dataset();
                        sda.fill(ds,   "datatablecollection");
                        this.datagridview1.datasource   =   ds.tables[0];
                }

                private   void   button1_click(object   sender,   eventargs   e)
                {
                        if   (conn.state   ==   connectionstate.closed)
                        {
                                conn.open();
                        }
                        cmd   =   new   sqlcommandbuilder(sda);
                        mytrans   =   cmd.getinsertcommand().connection.begintransaction();
                        cmd.getinsertcommand().transaction   =   mytrans;
                        cmd.getdeletecommand().transaction   =   mytrans;
                        cmd.getupdatecommand().transaction   =   mytrans;

                        try
                        {
                                sda.update(ds.tables[0]);
                                mytrans.commit();
                                messagebox.show("成功!");
                        }
                        catch(exception   ex)
                        {
                                mytrans.rollback();
                                messagebox.show("失敗!"+ex.message);
                        }
                        finally
                        {
                                conn.close();
                        }
                }
发表于:2007-10-24 12:15:471楼 得分:20
c# code
mytrans = sda.selectcommand().connection.begintransaction(); sda.insertcommand().transaction = mytrans; sda.deletecommand().transaction = mytrans; sda.updatecommand().transaction = mytrans;
发表于:2007-10-24 13:06:302楼 得分:40
sqldataadapter,更新数据时,遇到错误,就会退出update方法.

可以用sqlcommand一笔一笔更新,如果执意要用sqldataadapter,可选择更新前检查datagridview数据的有效性,检查无误后,再调用update方法.
发表于:2007-10-24 17:17:543楼 得分:0
加這個就可以了
sda.acceptchangesduringupdate   =   false;


快速检索

最新资讯
热门点击