2013-11-03 41 views
-1
string Update = "UPDATE VehicleReport" + 
         "SET VehicleReg ='"+textBox1.Text+"',CurrentOdometer ='"+textBox5.Text+"',NextService ='"+textBox6.Text+"'" + 
         "WHERE Vehiclenum ='"+comboBox1.Text+"' ;"; 

     try 
     { 
      SqlConnection conn = new SqlConnection("Data Source=(local);Initial Catalog=FleetTrackingDatabase;Integrated Security=SSPI"); 
      conn.Open(); 
      SqlCommand cmd = new SqlCommand(Update, conn); 
      cmd.ExecuteNonQuery(); 
      conn.Close(); 
      MessageBox.Show("Updated"); 
      conn.Close(); 
     } 
     catch (System.Exception f) 
     { 
      MessageBox.Show(f.Message, "ERROR"); 
     } 
+2

这里有SQL注入的危险,请参数化您的UPDATE语句并验证用户输入。 – bump

+0

[SQL注入警报](http://msdn.microsoft.com/en-us/library/ms161953%28v=sql.105%29.aspx) - 你应该**不**连接你的SQL语句 - 使用**参数化查询**,而不是为了避免SQL注入 –

+0

@marc_s我同意你的看法,但我只是想提一提,我喜欢该URL中的代码甚至在语法上都不合法。 –

回答

1

至少,这是不正确的:

string Update = "UPDATE VehicleReport" + "SET ... 

需要VehicleReport和设置

string Update = "UPDATE VehicleReport " + "SET.... 
0

空间

之间添加添加一个空格
"UPDATE VehicleReport" + 
    " SET VehicleReg ='"+textBox1.Text+"',CurrentOdometer ='"+textBox5.Text+"',NextService='"+textBox6.Text+"'" + 
    " WHERE Vehiclenum ='"+comboBox1.Text+"' ;"; 
0

表名缺失空间:

string Update = "UPDATE VehicleReport" 
string Update = "UPDATE VehicleReport " 

,您可以尝试在此之前WHERE

0

相同,

string Update = "UPDATE VehicleReport SET VehicleReg ='"+textBox1.Text+"',CurrentOdometer ='"+textBox5.Text+"',NextService ='"+textBox6.Text+"'" + " WHERE Vehiclenum ='"+comboBox1.Text+"' ;"; 
0

我真的很震惊有4个答案,但没有人有关参数SQL和SQL注入攻击,但无论如何提及。

正如其他人提到的那样,您需要位于SETWHERE之间的空格。

但更重要的是,请勿使用此方法。当您在查询中使用字符串连接时,您的代码将打开为SQL Injection。相反,你应该总是使用parameterizezd queries

例如;

string Update = "UPDATE VehicleReport SET VehicleReg = @vehiclereg, CurrentOdometer = @current, NextService = @next WHERE Vehiclenum = @vehiclenum;"; 
SqlCommand cmd = new SqlCommand(Update, conn); 
cmd.Parameters.AddWithValue("@vehiclereg", textBox1.Text); 
cmd.Parameters.AddWithValue("@current", textBox5.Text); 
cmd.Parameters.AddWithValue("@next", textBox6.Text); 
cmd.Parameters.AddWithValue("@vehiclenum", comboBox1.Text); 
相关问题