2010-12-08 72 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列。