我的更新c#代码不工作,我可以一次更新两个关系表吗?

问题描述:

我试图一次更新两个表,但我得到了一些更新代码的语法错误,你可以给我一些想法吗?插入代码工作完美的,我试图复制插入代码和编辑上的更新按钮点击我的更新c#代码不工作,我可以一次更新两个关系表吗?

这里是我的代码

private void button2_Click(object sender, EventArgs e) 
    { 
     System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(); 
     conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;" + 
     @"Data source= C:\Users\user\Documents\Visual Studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\crt_db.accdb"; 

     try 
     { 


      conn.Open(); 
      String Name = txtName.Text.ToString(); 

      String AR = txtAr.Text.ToString(); 
      String Wereda = txtWereda.Text.ToString(); 
      String Kebele = txtKebele.Text.ToString(); 
      String House_No = txtHouse.Text.ToString(); 
      String P_O_BOX = txtPobox.Text.ToString(); 
      String Tel = txtTel.Text.ToString(); 
      String Fax = txtFax.Text.ToString(); 
      String Email = txtEmail.Text.ToString(); 
      String Item = txtItem.Text.ToString(); 
      String Dep = txtDep.Text.ToString(); 
      String k = "not renwed"; 


      String Remark = txtRemark.Text.ToString(); 

      String Type = txtType.Text.ToString(); 
      String Brand = txtBrand.Text.ToString(); 
      String License_No = txtlicense.Text.ToString(); 
      String Date_issued = txtDate.Text.ToString(); 
      String my_querry = "update crtPro set Name='" + Name + "',AR='" + AR + "',Wereda='" + Wereda + "',Kebele='" + Kebele + "',House_No='" + House_No + "',P_O_BOX='" + P_O_BOX + "',Tel='" + Tel + "',Fax='" + Fax + "',Email='" + Email + "',Item='" + Item + "',Dep='" + Dep + "','" + k + "',Remark='" + Remark + "' where Name='" + Name + "' "; 
      OleDbCommand cmd = new OleDbCommand(my_querry, conn); 
      cmd.ExecuteNonQuery(); 


      String my_querry1 = "SELECT max(PID) FROM crtPro"; 
      OleDbCommand cmd1 = new OleDbCommand(my_querry1, conn); 

      string var = cmd1.ExecuteScalar().ToString(); 





      String ki = txtStatus.Text.ToString(); 
      String my_querry2 = "update crtItemLicense set PID=" + var + ",Type='" + Type + "',Brand='" + Brand + "',License_No='" + License_No + "',Date_issued='" + Date_issued + "' where PID=" + var + ""; 
      OleDbCommand cmd2 = new OleDbCommand(my_querry2, conn); 
      cmd2.ExecuteNonQuery(); 
      MessageBox.Show("Message added succesfully"); 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Failed due to" + ex.Message); 
     } 
     finally 
     { 
      conn.Close(); 

     } 
+1

与您的问题没有特别的关系,但请阅读[SQL注入](http://www.troyhunt.com/2010/05/owasp-top-10-for-net-developers-part-1.html )。 – DGibbs

+0

尝试在数据库中直接执行查询。 –

根据给定的资料很少,最可能出现的问题(什么数据库您使用例如 - SQL Server 2012?),是您在连接的动态SQL中提供的数据类型与数据库中列的数据类型不匹配。你用引号包围每个值 - 这意味着它将被解释为一个varchar。如果您的日期值格式错误(例如,如果Date_Issued是日期列),或者它是数字列,则会出错。

的解决方案是使用参数化查询如更换您的动态SQL:

String my_querry = "update crtPro set [email protected], [email protected], [email protected], etc ..."; 
OleDbCommand cmd = new OleDbCommand(my_querry, conn); 
cmd.Parameters.Clear(); 
cmd.Parameters.AddWithValue("@name", Name); 
cmd.Parameters.AddWithValue("@myParam", Convert.ToDateTime(txtDate.Text.Trim())); 
... 
cmd.ExecuteNonQuery(); 

您可以进一步了解它here

PS确保您的参数都以相同的顺序,因为它们是用在SQL中,因为oledbcommand实际上并不关心你称之为什么。请参阅here