正在更新数据库访问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");

正在更新数据库访问c#中的列

来自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语句也可以自动处理您的连接、命令和适配器。

  • 不要将您的密码存储为纯文本。阅读:在数据库中存储密码的最佳方式