当前位置:编程学习 > C#/ASP.NET >>

求助:各位高手帮我看一下这些代码那里出错了。在线等。

我用C#2005做数据库访问更新世遇上了一个问题,大家帮我看一下。
                string userPWD = "123456";

                DataRow thisRow = this.hotel30DataSet.Tables["alinusers"].NewRow();
                thisRow["uname"] = addUserDlg.userCodeBox.Text;
                thisRow["alevel"] = 0;
                thisRow["upass"] = userPWD;
                thisRow["describ"] = addUserDlg.userNameBox.Text;
                thisRow["depart"] = addUserDlg.departcomboBox.Text;
                thisRow["Rights"] = addUserDlg.functionRightBox.Text;
                thisRow["login_right"] = addUserDlg.systemRightBox.Text;
                thisRow["reports_right"] = addUserDlg.reportRightBox.Text;

               this.hotel30DataSet.Tables["alinusers"].Rows.Add(thisRow);
               try
               {
                   this.Validate();
                   this.alinusersBindingSource.EndEdit();
                   this.alinusersTableAdapter.Update(this.hotel30DataSet.alinusers);
               }
               catch (System.Exception ex)
               {
                   MessageBox.Show(ex.ToString());
               }
以上代码为向数据库中添加一行记录,经测试是没有问题的。
               string userPWD = "123456";

               this.hotel30DataSet.Tables["alinusers"].Rows[index]["uname"] = addUserDlg.userCodeBox.Text;
               this.hotel30DataSet.Tables["alinusers"].Rows[index]["alevel"] = 0;
               this.hotel30DataSet.Tables["alinusers"].Rows[index]["upass"] = userPWD;
               this.hotel30DataSet.Tables["alinusers"].Rows[index]["describ"] = addUserDlg.userNameBox.Text;
               this.hotel30DataSet.Tables["alinusers"].Rows[index]["depart"] = addUserDlg.departcomboBox.Text;
               this.hotel30DataSet.Tables["alinusers"].Rows[index]["Rights"] = addUserDlg.functionRightBox.Text;
               this.hotel30DataSet.Tables["alinusers"].Rows[index]["login_right"] = addUserDlg.systemRightBox.Text;
               this.hotel30DataSet.Tables["alinusers"].Rows[index]["reports_right"] = addUserDlg.reportRightBox.Text;

               this.hotel30DataSet.Tables["alinusers"].AcceptChanges();

               try
               {
                   this.Validate();
                   this.alinusersBindingSource.EndEdit();
                   this.alinusersTableAdapter.Update(this.hotel30DataSet.alinusers);
               }
               catch (System.Exception ex)
              {
                   MessageBox.Show(ex.ToString());
               }
以上代码是更新数据库中的一行记录,经测试,没有报错但是数据库并没有的到更新,为什么?如果去掉this.hotel30DataSet.Tables["alinusers"].AcceptChanges();则报错。

麻烦个位高手帮我看一下那里的问题。

急切,在线等!!!!!
--------------------编程问答-------------------- 以上代码是更新数据库中的一行记录,经测试,没有报错但是数据库并没有的到更新,为什么?如果去掉this.hotel30DataSet.Tables["alinusers"].AcceptChanges();则报错。 
===================================================================================
不能先调用AcceptChanges() 再调用update() 应该反过来 先更新再AcceptChanges();

去掉了会报错 报什么错呢? --------------------编程问答-------------------- "当传递具有修改行的DataRow集合时,更新要求有效的UpdateCommand"错误 --------------------编程问答-------------------- 按你讲的方法试了一下,还是出现上述错误。 --------------------编程问答-------------------- "当传递具有修改行的DataRow集合时,更新要求有效的UpdateCommand"错误
=================================================================
报的错误很明显是你的updatecommand错误
之所以你的测试代码可以通过 那时因为测试代码是newrow那么update时调用的是insertCommand来处理
而现在你是在做一个更新操作 所以报错了



按你讲的方法试了一下,还是出现上述错误。
=====================================
应该反过来   先更新再AcceptChanges(); 

这只是其中一个问题 --------------------编程问答-------------------- 应改怎么改呢? --------------------编程问答--------------------               DBConnection DBC = new DBConnection();

               SqlConnection thisConnection = DBC.ConnectSQLDB();
               SqlDataAdapter thisAdapter = new SqlDataAdapter("SELECT * FROM alinusers", thisConnection);
               SqlCommandBuilder thisBuilder = new SqlCommandBuilder(thisAdapter);
               hotel30DataSet.Clear();
               thisAdapter.Fill(hotel30DataSet, "alinusers");

               string userPWD = "123456";

               this.hotel30DataSet.Tables["alinusers"].Rows[index]["uname"] = addUserDlg.userCodeBox.Text;
               this.hotel30DataSet.Tables["alinusers"].Rows[index]["alevel"] = 0;
               this.hotel30DataSet.Tables["alinusers"].Rows[index]["upass"] = userPWD;
               this.hotel30DataSet.Tables["alinusers"].Rows[index]["describ"] = addUserDlg.userNameBox.Text;
               this.hotel30DataSet.Tables["alinusers"].Rows[index]["depart"] = addUserDlg.departcomboBox.Text;
               this.hotel30DataSet.Tables["alinusers"].Rows[index]["Rights"] = addUserDlg.functionRightBox.Text;
               this.hotel30DataSet.Tables["alinusers"].Rows[index]["login_right"] = addUserDlg.systemRightBox.Text;
               this.hotel30DataSet.Tables["alinusers"].Rows[index]["reports_right"] = addUserDlg.reportRightBox.Text;

               thisAdapter.Update(this.hotel30DataSet, "alinusers");

               thisConnection.Close();

用以上代码更新是没有问题的,但是是不是没有必要这么做?
很明显,数据库已经连接上了,包括Adapter也已经定义了。 --------------------编程问答-------------------- 在线等............................ --------------------编程问答-------------------- 用以上代码更新是没有问题的,但是是不是没有必要这么做? 
很明显,数据库已经连接上了,包括Adapter也已经定义了。
===============================================
这个可以的代码 是使用sqlcommandbuilder来自动生成updatecommand的模式 

不知道你指的没必要是什么意思,你不能更新的代码就是updatecommand错误 如果不使用sqlcommandbuilder来自动生成updatecommand,那么你需要自己来做这个工作.在指定了正确的updatecommand后 你就可以调用Adapter.Updat()方法来更新数据库了 --------------------编程问答-------------------- 谢谢了,我再试试。 --------------------编程问答-------------------- --------------------编程问答-------------------- 结贴,已经解决了。
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,