我在数据库中有2个表,tblIPAddress和tblDepartment。
点击更新按钮,我设法更新除1列(DepartmentID)以外的所有内容,因为我在组合框(cmbDepartment)上添加项目的方式。
DepartmentID列仅限数字。我按ID号识别每个部门。
示例:1 = IT,2 =帐户等。
我的问题是如何使用与组合框中所选部门相等的数字更新列(DepartmentID)?
我用于在组合框(cmbDepartment)上添加项目的代码
string query = "select ID, Department from tblDepartment";
OleDbDataAdapter da = new OleDbDataAdapter(query, myConn);
DataSet dsdpt = new DataSet();
da.Fill(dsdpt, "tblDepartment");
cmbDepartment.DataSource = dsdpt.Tables["tblDepartment"];
cmbDepartment.ValueMember = "ID";
cmbDepartment.DisplayMember = "Department";
代码我用来更新表(tblIPAddress)
OleDbCommand command = new OleDbCommand();
command.Connection = myConn;
string query = "";
query = "update tblIPAddress set E_Name=@E_Name, DepartmentID=@DepartmentID , E_Username=@E_Username, E_Password=@E_Password, E_Extension=@E_Extension, E_MobileNo=@E_MobileNo, Remarks=@Remarks, Modified_by=@Modified_by, Modified_on=@Modified_on where IP_Address=@IP_Address";
command.CommandText = query;
command.Parameters.AddWithValue("@E_Name", this.txtname.Text);
command.Parameters.AddWithValue("@E_Username", this.txtusern.Text);
command.Parameters.AddWithValue("@E_Password", this.txtpwd.Text);
command.Parameters.AddWithValue("@E_Extension", this.txtext.Text);
command.Parameters.AddWithValue("@E_MobileNo", this.txtmobile.Text);
command.Parameters.AddWithValue("@Remarks", this.txtrmk.Text);
command.Parameters.AddWithValue("@Modified_by", Loginfrm.userlogged);
command.Parameters.AddWithValue("@Modified_on", DateTime.Today.ToShortDateString());
command.Parameters.AddWithValue("@IP_Address", this.txtip.Text);
command.Parameters.AddWithValue("@DepartmentID", this.cmbDepartment.Text);
command.ExecuteNonQuery();
MessageBox.Show("IP Details Updated");
答案 0 :(得分:1)
来自OleDbCommand.Parameters
property
OLE DB .NET提供程序不支持传递的命名参数 SQL语句或由a调用的存储过程的参数
OleDbCommand
设置为文本时的CommandType
。在这种情况下, 必须使用问号(?)
占位符。例如:
SELECT * FROM Customers WHERE CustomerID = ?
因此,
OleDbParameter
个对象被添加到的顺序OleDbParameterCollection
必须直接对应于...的位置 命令文本中参数的问号占位符。
由于您没有在命令中使用相同的顺序提供参数值,因此会产生问题。使用您在命令中定义的相同顺序更改参数值。
正如Steve所提到的,您可能需要将@DepartmentID
值添加为(int)cmbDepartment.SelectedValue
而不是Text
属性。
还有一些事情;
不要将DateTime
值存储为字符串。这是一个坏习惯。将您的Modified_on
列更改为某个日期时间类型,并直接传递您的DateTime.Today
值。阅读:Bad habits to kick : choosing the wrong data type
尽可能多地使用AddWithValue
。 It may generate unexpected and surprising results sometimes。使用Add
方法重载来指定参数类型及其大小。
使用using
statement自动处理您的连接,命令和适配器。
不将您的密码存储为纯文本。阅读:Best way to store password in database