2010-12-08 69 views
0

我有一个按钮,在我的Windows窗体更新每个表。但是,我收到错误SQLException未处理。 '='附近语法不正确。更新查询:错误的语法

这是我在更新按钮代码:

public void btnUpdate_Click(object sender, EventArgs e) 
    { 

    foreach (DataGridViewRow row in dataGridView1.Rows) 
    { 
    try 
    { 

    //MessageBox.Show(row.Cells[7].FormattedValue.ToString()); 
    System.Data.SqlClient.SqlConnection sqlConnection1 = 
     new System.Data.SqlClient.SqlConnection("server=Test\\Test; Integrated Security=true; Database=Testing;"); 

    System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(); 
    cmd.CommandType = System.Data.CommandType.Text; 
    cmd.CommandText = "UPDATE dbo.JobStatus SET ShipTrackingNumber = '" + row.Cells[7].FormattedValue.ToString() + "' WHERE jobtableid = " + row.Cells[5].FormattedValue.ToString(); 
    cmd.CommandText = "UPDATE dbo.JobStatus SET ShipMethodTransmitted = '" + row.Cells[8].FormattedValue.ToString() + "' WHERE jobtableid = " + row.Cells[5].FormattedValue.ToString(); 
    cmd.CommandText = "UPDATE dbo.JobStatus SET DateShipTransmitProcessed = '" + row.Cells[9].FormattedValue.ToString() + "' WHERE jobtableid = " + row.Cells[5].FormattedValue.ToString(); 
    cmd.CommandText = "UPDATE dbo.JobStatus SET ShipmentProcessedBy = '" + row.Cells[10].FormattedValue.ToString() + "' WHERE jobtableid = " + row.Cells[5].FormattedValue.ToString(); 
    cmd.CommandText = "UPDATE dbo.JobStatus SET Critical = '" + row.Cells[11].FormattedValue.ToString() + "' WHERE jobtableid = " + row.Cells[5].FormattedValue.ToString(); 
    cmd.CommandText = "UPDATE dbo.JobStatus SET ShipTransmitStatus = '" + row.Cells[13].FormattedValue.ToString() + "' WHERE jobtableid = " + row.Cells[5].FormattedValue.ToString(); 

    cmd.Connection = sqlConnection1; 

    sqlConnection1.Open(); 
    cmd.ExecuteNonQuery(); 
    sqlConnection1.Close(); 
    } 
    catch (Exception e) 
    { 
    MessageBox.Show("Update Failed!!!"); 
    } 

    } 
    } 

谁能告诉我什么是错的这些说法?谢谢!

+0

该代码只会更新ShipTranmitStatus;因为您将用新的CommandText替换每行上的CommandText。您可以更新1个UPDATE语句中的所有字段,而不是6个单独的字段。你也应该使用SQLParameters来为你的Command提供值。 – GendoIkari 2010-12-08 19:08:29

+0

另外,是row.Cells [5] .FormattedValue.ToString()列名?如果不是,他们将需要像第一个块一样用单引号括起来。 – guildsbounty 2010-12-08 19:11:48

回答

0

除了我在评论中提到的内容,我没有看到你的SQL的语法有什么问题。很有可能您的FormattedValue在字符串本身中具有一个无效字符,这会导致SQL错误。在构建字符串之后打印出CommandText本身的值,以查看它实际的外观。

0

请这样检查您的条件:

if(row.Cells[5].FormattedValue.ToString()) 
then execute update query 
4

为什么不直接做在一个更新语句。因此,像:

var sql = new StringBuilder(); 
sql.AppendLine("UPDATE dbo.JobStatus"); 
sql.AppendLine("Set ShipTrackingNumber = @TrackingNumber"); 
sql.AppendLine(", DateShipTransmitProcessed = @DateShipTransmitProcessed"); 
sql.AppendLine(", ShipmentProcessedBy = @ShipmentProcessedBy"); 
sql.AppendLine(", Critical = @Critical"); 
sql.AppendLine(", ShipTransmitStatus = @ShipTransmitStatus"); 
sql.AppendLine("Where jobtableId = @jobTableId"); 

cmd.Connection = sqlConnection1; 
cmd.CommandText = sql.ToString(); 
cmd.Parameters.AddWithValue("@TrackingNumber", row.Cells[7].FormattedValue); 
cmd.Parameters.AddWithValue("@DateShipTransmitProcessed", row.Cells[8].FormattedValue); 
cmd.Parameters.AddWithValue("@ShipmentProcessedBy", row.Cells[9].FormattedValue); 
cmd.Parameters.AddWithValue("@Critical", row.Cells[10].FormattedValue); 
cmd.Parameters.AddWithValue("@ShipTransmitStatus", row.Cells[11].FormattedValue); 
cmd.Parameters.AddWithValue("@jobTableId", row.Cells[5].FormattedValue); 
0
  1. UPDATE说法是不正确。 UPDATE语法是:

    UPDATE table 
        SET 
         column1 = 'value', 
         column2 = 'value2' 
        WHERE 
         condition; 
    
  2. 您将要覆盖声明每次分配给cmd。你可能想要更多的东西一样:

    cmd = "UPDATE table"; 
    cmd += "SET column1 = '" + value + "',"; 
    cmd += "SET column2 = " + intValue; 
    cmd += "WHERE idRow = '" + rowToUpdateValue + "'"; 
    

此外,如果这没有帮助,请检查你是不是要检查使用“字符”值的INT列。