sqlcommand для обновления - PullRequest
       16

sqlcommand для обновления

0 голосов
/ 21 апреля 2011

У меня есть таблица, которую я хочу обновить с помощью простой команды обновления.

protected void UpdateButton_Click(object sender, EventArgs e)
        {

        SqlCommand cmd = new SqlCommand("UPDATE KPI_DETAILS_TABLE SET KPI1_Status =
         @KPI1_Status, KPI2_Status = @KPI2_Status, KPI3_Status = @KPI3_Status,
         KPI4_Status = @KPI4_Status, KPI5_Status = @KPI5_Status, KPI6_Status =
         @KPI6_Status, Overall_Status= @Overall_Status WHERE TokenID = '" + 
         DropDownList1.SelectedItem.Text + "' AND TimeSet = '" 
         + currentdate + "'", connection);

        cmd.Parameters.AddWithValue("@KPI1_Status", DropboxKPI1.SelectedItem.Text);
        cmd.Parameters.AddWithValue("@KPI2_Status", DropboxKPI2.SelectedItem.Text);
        cmd.Parameters.AddWithValue("@KPI3_Status", DropboxKPI3.SelectedItem.Text);
        cmd.Parameters.AddWithValue("@KPI4_Status", DropboxKPI4.SelectedItem.Text);
        cmd.Parameters.AddWithValue("@KPI5_Status", DropboxKPI5.SelectedItem.Text);
        cmd.Parameters.AddWithValue("@KPI6_Status", DropboxKPI6.SelectedItem.Text);
        cmd.Parameters.AddWithValue("@Overall_Status", FinalStatus.SelectedItem.Text);

        try
        {
            cmd.ExecuteNonQuery();
            Error1.Text = "KPI Status Successfully Updated !!";
        }
        catch { Error1.Text = "Error during Updating status of KPIs"; }
        finally { connection.Close(); }
    }

Однако выдается следующее исключение:

Преобразование данных varcharтип в тип данных datetime, приведший к значению вне допустимого диапазона.

Единственный столбец типа данных datetime в базе данных - TimeSet.Но currentdate также имеет тип данных datetime.

DateTime currentdate = DateTime.Now.ToLocalTime();

Тогда почему эта ошибка появляется?Пожалуйста помоги.

Ответы [ 3 ]

2 голосов
/ 21 апреля 2011

a) Используйте параметры для значений в вашем предложении WHERE, а также для части SET и

б) Затем используйте cmd.Parameters.AddWithValue("@TimeSet", DateTime.Now.ToLocalTime());

Это также защитит вас от внедрения SQL.


т.е. если у вас есть значение datetime, постарайтесь сохранить его как значение datetime, и не пытайтесь обрабатывать его как строку в любой момент. Пусть ADO.Net и SQL Server справятся с любыми необходимыми преобразованиями.

1 голос
/ 21 апреля 2011

Ваш код должен выглядеть так:

    protected void UpdateButton_Click(object sender, EventArgs e)
    {

    SqlCommand cmd = new SqlCommand("UPDATE KPI_DETAILS_TABLE SET"+
        "KPI1_Status = @KPI1_Status, KPI2_Status = @KPI2_Status,"+
        "KPI3_Status = @KPI3_Status, KPI4_Status = @KPI4_Status,"+
        "KPI5_Status = @KPI5_Status, KPI6_Status = @KPI6_Status,"+
        "Overall_Status= @Overall_Status"+
        "WHERE TokenID = @ID AND TimeSet = @Time", connection);

    cmd.Parameters.AddWithValue("@KPI1_Status", DropboxKPI1.SelectedItem.Text);
    cmd.Parameters.AddWithValue("@KPI2_Status", DropboxKPI2.SelectedItem.Text);
    cmd.Parameters.AddWithValue("@KPI3_Status", DropboxKPI3.SelectedItem.Text);
    cmd.Parameters.AddWithValue("@KPI4_Status", DropboxKPI4.SelectedItem.Text);
    cmd.Parameters.AddWithValue("@KPI5_Status", DropboxKPI5.SelectedItem.Text);
    cmd.Parameters.AddWithValue("@KPI6_Status", DropboxKPI6.SelectedItem.Text);
    cmd.Parameters.AddWithValue("@Overall_Status", FinalStatus.SelectedItem.Text);
    cmd.Parameters.AddWithValue("@ID", DropDownList1.SelectedItem.Text);
    cmd.Parameters.AddWithValue("@Time", DateTime.Now.ToLocalTime());
    try
    {
        cmd.ExecuteNonQuery();
        Error1.Text = "KPI Status Successfully Updated !!";
    }
    catch { Error1.Text = "Error during Updating status of KPIs"; }
    finally { connection.Close(); }
}
  1. Исправлена ​​ошибка в строке вашего SqlCommand объекта.
  2. Вместо добавления локальных переменных к вашему SqlCommand я добавил новый SqlParameters и определил, откуда они будут получать свои значения (@ID, @Time).
0 голосов
/ 21 апреля 2011

Вместо этого вы используете DateTime.Now.ToString(); для указания текущей даты и попробуйте снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...