2010-12-08 18 views
0

私はすべてのテーブルを更新する私のウィンドウのフォームにボタンがあります。しかし、エラーが発生しましたSQLExceptionは未処理です。 '='付近の構文が正しくありません。UPDATEクエリ:不適切な構文

これは、更新ボタンの私のコードは次のとおりです。

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を使用してコマンドに値を渡す必要があります。 – GendoIkari

+0

また、row.Cells [5] .FormattedValue.ToString()の列名は?そうでなければ、最初のブロックのように一重引用符で囲む必要があります。 – guildsbounty

+0

@guildsbounty:jobtableidがintであっても? – GendoIkari

答えて

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

@ Thomas:これは機能しません。ここに私がしたことがあります。 –

+0

これは私がエラーを取得していますものです:UPDATE dbo.JobStatus 設定ShipTrackingNumber = @TrackingNumber 、DateShipTransmitProcessed = @DateShipTransmitProcessed 、ShipmentProcessedBy = @ShipmentProcessedBy 、クリティカル= @Critical 、ShipTransmitStatus = @ShipTransmitStatus どこjobtableId = @jobTableId –

+0

@Mayank - あなたは遭遇しているエラーや動作は何ですか? 「うまくいきません」は、私があなたを助けるために使用できる情報はありません。 – Thomas

0
  1. はあなたのUPDATEの文が正しくありません。 UPDATE構文は次のとおりです。あなたはあなたの文を上書きする

    UPDATE table 
        SET 
         column1 = 'value', 
         column2 = 'value2' 
        WHERE 
         condition; 
    
  2. たびにあなたがcmdに割り当てます。これは、あなたが「シャア値を使用してINT列をチェックしようとしていないことを確認し、解決しない場合、また

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

:あなたは、おそらくより多くのような何かをしたいです。