求助:各位高手帮我看一下这些代码那里出错了。在线等。
我用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#