2010-12-08 2 views
0

У меня есть кнопка, которая сохраняет содержимое, измененное в datagridview, в моем дизайне пользовательского интерфейса. Вот код для этого Button_Save:UPDATE Query: Неверный синтаксис (Edited)

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(); 

Что я получаю ошибку в том, что: «Необходимо объявить скалярную переменную„@ShipTrackingNumber“ Я не хочу, чтобы положить ShipTrackingNumber из кода Вместо этого я хочу, чтобы принести.. это из пользовательского интерфейса.

Что я делаю неправильно здесь?

+0

Кроме того, я не вижу `.AddWithValue («@ShipTrackingNumber», ...) `(просто« .AddWithValue («@ TrackingNumber»))? Ничего. – 2010-12-08 20:08:45

ответ

1

Ну, нет входа в cmd.Parameters для «@ShipTrackingNumber». Что вы имеете в виду под «извлечь его из интерфейса»? Можно просто написать для добавления записи по этому параметру:

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

И затем реализовать GetShipTrackingNumberFromUI(), чтобы получить нужное значение.

Похоже, эта линия должна быть что-то вдоль этих линий, но вы должны изменить «@TrackingNumber» на «@ShipTrackingNumber»:

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

Чтобы ответить на прямой вопрос, добавьте параметр со значением взятый из пользовательского интерфейса. Скажем, это флажок с именем CheckBox1:

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

Вы должны заменить эту строку:

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

с этой линией:

cmd.Parameters.AddWithValue("@ShipTrackingNumber", row.Cells[7].FormattedValue); 
Смежные вопросы