用于更新的sql命令

发布于 2024-11-02 08:40:14 字数 1715 浏览 3 评论 0原文

我有一个表,我想使用简单的更新命令来更新。

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

那么为什么会出现这个错误呢?请帮忙。

I have a table which I want to update using a simple update command.

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

However it's throwing the following exception error:

The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

The only column of datatype datetime in the database is TimeSet. But currentdate is also of data type datetime.

DateTime currentdate = DateTime.Now.ToLocalTime();

Then why is this error popping up? Please help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

聆听风音 2024-11-09 08:40:14

a) 对 WHERE 子句中的值以及 SET 部分使用参数,

b) 然后使用 cmd.Parameters.AddWithValue("@ TimeSet", DateTime.Now.ToLocalTime());

这也将保护您免受 SQL 注入。


即,如果您有一个日期时间值,请尝试将其保留为日期时间值,并且不要在任何时候尝试将其视为字符串。让 ADO.Net 和 SQL Server 处理任何必要的转换。

a) Use parameters for the values in your WHERE clause, as well as for the SET part, and

b) Then use cmd.Parameters.AddWithValue("@TimeSet", DateTime.Now.ToLocalTime());

This will also protect you from SQL injection.


I.e. if you've got a datetime value, try to keep it as a datetime value, and don't muck about with trying to treat it as a string at any point. Let ADO.Net and SQL Server deal with any necessary conversions.

旧情别恋 2024-11-09 08:40:14

您的代码应如下所示:

    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)。

Your code should look like this:

    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. Repaired the mess in the string of your SqlCommand object.
  2. Instead of adding local variables to your SqlCommand I added new SqlParameters and defined where they'd get their values from (@ID, @Time).
西瓜 2024-11-09 08:40:14

相反,您使用 DateTime.Now.ToString(); 给出 Currentdate 并重试。

Instead you use DateTime.Now.ToString(); for giving the Currentdate and try again.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文