正在更新数据库访问c#中的列
本文关键字:访问 更新 数据库 | 更新日期: 2023-09-27 18:26:20
我在数据库中有两个表,tblIPAddress和tblDepartment。
单击更新按钮后,由于我在组合框(cmbDepartment)上添加项目的方式,我成功地更新了除1列(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");
来自OleDbCommand.Parameters
属性
OLE DB.NET提供程序不支持用于传递的命名参数SQL语句或由调用的存储过程的参数当
CommandType
设置为Text时为OleDbCommand
。在这种情况下必须使用问号(?)
占位符。例如:
SELECT * FROM Customers WHERE CustomerID = ?
因此,
OleDbParameter
对象添加到OleDbParameterCollection
必须直接对应命令文本中参数的问号占位符。
由于您在命令中没有以相同的顺序提供参数值,因此这会产生问题。使用与在命令中定义的顺序相同的顺序更改参数值。
另外,正如Steve提到的,您可能需要将@DepartmentID
值添加为(int)cmbDepartment.SelectedValue
,而不是Text
属性。
还有几件事;
-
不要将
DateTime
值存储为字符串。这是个坏习惯。将Modified_on
列更改为日期时间类型,然后直接传递DateTime.Today
值。阅读:要改掉的坏习惯:选择错误的数据类型 -
尽量不要使用
AddWithValue
。它有时可能会产生意想不到的结果。使用Add
方法重载来指定参数类型及其大小。 -
使用
using
语句也可以自动处理您的连接、命令和适配器。 -
不要将您的密码存储为纯文本。阅读:在数据库中存储密码的最佳方式