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

时间:2015-12-10 08:15:52

标签: c#

我在数据库中有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");

1 个答案:

答案 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属性。

还有一些事情;