Код выполняется, но оператор UPDATE не обновляет данные - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь вставить данные в столбец ansatID в таблице, показанной на рисунке.

Пользователь имеет

  • чтобы отметить строку в DataGridView
  • вставить свой идентификатор в текстовое поле слева
  • затем нажмите кнопку Tilføj ansat til vagten

и его идентификатор следует вставить в столбец ansatID как в DataGridView, так и в базу данных.

Но проблема в том, что данные не вставляются ни в столбец ansatID в базе данных, ни в DataGridView, несмотря на то, что код выполняется. Я пробовал следующий код:

private void button5_Click(object sender, EventArgs e)
{
    try
    {
        String ConnectionString = @"Data Source=.\SQLEXPRESS01;Initial Catalog=Vagtplan;Integrated Security=True";
        SqlConnection myconnection = new SqlConnection(ConnectionString);

        myconnection.Open();

        DateTime id= Convert.ToDateTime(dataGridView1.SelectedRows[0].Cells[0].Value);
        SqlCommand AddNumberCommand = myconnection.CreateCommand();
        AddNumberCommand.CommandText = "UPDATE dbo.Vagter SET [ansatID] = @ansatID WHERE [Dato] = '" + id + "'";

        AddNumberCommand.Parameters.Add("@ansatID", SqlDbType.Int).Value = textBox1.Text;

        AddNumberCommand.ExecuteNonQuery();

        myconnection.Close();
        MessageBox.Show("Du har valgt vagten.");
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

Ожидаемый результат заключается в том, что ansatID следует вставить как в столбец ansatID в базе данных, так и в DataGridView. Таблица в базе данных и DataGridView на рисунках показывают фактические результаты.

Picture

Picture

1 Ответ

0 голосов
/ 03 мая 2019

Значение даты и времени вызывает проблему. В вашем запросе в предложении where значение даты не возвращает никакого значения, поэтому обновление не выполняется. Вы можете использовать метод ToString объекта datetime для своего идентификатора в запросе, как показано ниже:

 AddNumberCommand.CommandText = "UPDATE dbo.Vagter SET [ansatID] = @ansatID WHERE [Dato] = '" + id.ToString("yyyy-MM-dd HH:mm:ss") + "'";

Но вы должны использовать параметры, чтобы избежать инъекционных атак. Поэтому я рекомендую вам использовать следующий сегмент кода:

AddNumberCommand.CommandText = "UPDATE dbo.Vagter SET [ansatID] = @ansatID WHERE [Dato] = @value";
AddNumberCommand.Parameters.Add("@ansatID", SqlDbType.Int).Value = textBox1.Text;
AddNumberCommand.Parameters.Add("@value",SqlDbType.DateTime).Value=id;
AddNumberCommand.ExecuteNonQuery();
...