SqlException был необработанным C# (значение ячейки изменено)

Я хочу изменить значение из ячейки (представление в виде сетки). Когда я меняю значение, я получаю сообщение SqlException было необработанным. В правильном синтаксисе рядом с ошибкой '='. Я отладил код, который я ввел 50 в ячейку, я вижу, что

  e.value= 50 , 

  dt.Rows[e.RowHandle]["Operator_ID"] = null   
 private void gridView1_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
 {
        DataTable dt = gridControl1.DataSource as DataTable;
        SqlProcess process = new SqlProcess();
        process.updateQuery(@"UPDATE IE_OPERATOR_GID_KTS_PER SET CarpanDegeri ='" + e.Value +
                           "' WHERE IE_OPERATOR_GTD_KTS_PER.Operator_ID= " + dt.Rows[e.RowHandle]["Operator_ID"]);
}

В таблице свойство столбца Operator_ID НЕ NULL. Как я могу решить эту проблему?

Спасибо за ваши ответы.

PS:: Я новичок в C# и SQL. Поэтому вы можете ответить явно.


person kapozade    schedule 26.03.2013    source источник


Ответы (1)


Это почти наверняка связано с тем, что вы строите свой SQL со значениями, добавляемыми вручную, а не с использованием параметров. Измените SQL на:

UPDATE IE_OPERATOR_GID_KTS_PER SET CarpanDegeri = @CarpanDegeri
WHERE IE_OPERATOR_GTD_KTS_PER.Operator_ID = @OperatorID

... а затем указать значения для этих параметров. Мне непонятно, что такое SqlProcess, но если он не поддерживает параметризованные запросы, то он в корне сломан :(

Пример см. в документации SqlCommand.Parameters. как использовать параметры. Вы должны всегда делать это для значений:

  • Он позволяет избежать атак путем внедрения кода SQL.
  • Это позволяет избежать проблем с преобразованием данных
  • Он разделяет ваш код (SQL) и данные (значения параметров) — посмотрите, насколько проще читать приведенный выше SQL, чем версию со всей конкатенацией строк.
person Jon Skeet    schedule 26.03.2013