2014-03-31 46 views
-1

我試圖一次更新兩個表,但我得到了一些更新代碼的語法錯誤,你可以給我一些想法嗎?插入代碼工作完美的,我試圖複製插入代碼和編輯上的更新按鈕點擊我的更新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

嘗試在數據庫中直接執行查詢。 –

回答

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

相關問題