2010-12-08 10 views
0

J'ai un bouton qui enregistre le contenu édité dans datagridview dans ma conception de l'interface utilisateur. Voici le code de cette Button_Save:MISE À JOUR Requête: Syntaxe incorrecte (éditée)

public void btnUpdate_Click(object sender, EventArgs e) 
    { 

     foreach (DataGridViewRow row in dataGridView1.Rows) 
     { 
       System.Data.SqlClient.SqlConnection sqlConnection1 = 
       new System.Data.SqlClient.SqlConnection("server=Test; Integrated Security=true; Database=Test;"); 

       System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(); 
var sql = new StringBuilder(); 
       sql.AppendLine("UPDATE dbo.JobStatus"); 
       sql.AppendLine("Set ShipTrackingNumber = @ShipTrackingNumber"); 
       sql.AppendLine(", ShipMethodTransmitted = @ShipMethodTransmitted"); 
       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("@ShipMethodTransmitted", row.Cells[8].FormattedValue); 

       cmd.Parameters.AddWithValue("@DateShipTransmitProcessed", row.Cells[9].FormattedValue); 
       cmd.Parameters.AddWithValue("@ShipmentProcessedBy", row.Cells[10].FormattedValue); 
       cmd.Parameters.AddWithValue("@Critical", row.Cells[11].FormattedValue); 
       cmd.Parameters.AddWithValue("@ShipTransmitStatus", row.Cells[13].FormattedValue); 
       cmd.Parameters.AddWithValue("@jobTableId", row.Cells[5].FormattedValue); 


       sqlConnection1.Open(); 
       cmd.ExecuteNonQuery(); 
       sqlConnection1.Close(); 

Ce que je veux erreur est que: « doit déclarer la variable scalaire « @ShipTrackingNumber » Je ne veux pas mettre ShipTrackingNumber à partir du code Au lieu de cela, je veux chercher.. à partir de l'interface utilisateur.

ce que je fais mal ici?

+0

plus que je ne vois pas un '.AddWithValue ("@ShipTrackingNumber", ...) '(juste un' .AddWithValue ("@ TrackingNumber") ')? Rien. –

+0

Je reçois la valeur de ShipTrackingNumber de l'interface utilisateur. Qui est dans la colonne 7.C'est pourquoi il est écrit: cmd.Parameters.AddWithValue ("@ ShipTrackingNumber", row.Cells [7] .FormattedValue); –

Répondre

1

Eh bien, il n'y a pas d'entrée dans cmd.Parameters pour « @ShipTrackingNumber ». Que voulez-vous dire par « chercher dans l'interface utilisateur »? vous pourriez écrire un ligne pour ajouter une entrée pour ce paramètre:

cmd.Parameters.AddWithValue("@ShipTrackingNumber", GetShipTrackingNumberFromUI()); 

Ensuite, implémentez GetShipTrackingNumberFromUI() pour obtenir la valeur souhaitée.

On dirait que cette ligne est censée être quelque chose le long de ces lignes, mais vous devez changer « @TrackingNumber » à « @ShipTrackingNumber »:

cmd.Parameters.AddWithValue("@TrackingNumber", row.Cells[7].FormattedValue); 
0

Pour répondre directement à votre question, ajoutez le paramètre avec sa valeur pris de l'interface utilisateur. Disons que c'est une case à cocher nommée CheckBox1:

cmd.Parameters.AddWithValue("@ShipTrackingNumber", CheckBox1.Checked); 
0

Vous devez remplacer cette ligne:

cmd.Parameters.AddWithValue("@TrackingNumber", row.Cells[7].FormattedValue); 

avec cette ligne:

cmd.Parameters.AddWithValue("@ShipTrackingNumber", row.Cells[7].FormattedValue);