仅以YYYY-MM-DD格式向SQL数据库发送日期数据

本文关键字:日期 数据 数据库 SQL YYYY-MM-DD 格式 仅以 | 更新日期: 2023-09-27 18:20:42

在我的数据库中,有一列的数据类型为"date"。

这意味着它将只采用YYYY-MM-DD格式的日期。

我的问题是,

如何将当前日期从C#发送到数据库?

比如,如果我在PHPMyAdmin上的查询中使用CURDATE(),它会以我想要的格式给出今天的日期。但是,当我向数据库发送信息时,我怎么能在C#Windows窗体中使用"CURDATE()"呢?

                string query = "INSERT INTO player (date, name, level, experience) " +
                                 "VALUES ('" + DateTime.Today + "','" +
                                         getPlayerName(Tibia.Handle, (BattleList_Start + Base + (BattleList_Step * playerIndex) + 4)) + "'," +
                                         ReadInt32(LvlAdr + Base, 4, Tibia.Handle) + "," +
                                         ReadInt32(XpAdr + Base, 4, Tibia.Handle) + ")";

仅以YYYY-MM-DD格式向SQL数据库发送日期数据

好吧,在我的数据库中,我有一个数据类型为"date"的列。这意味着它将只采用YYYY-MM-DD格式的日期。

不,不是。这意味着这些值只是日期。数据库中的值是一个日期,而不是"特定格式的日期"。理解存储的数据和文本表示之间的差异非常重要,可以用于显示或输入。

我的问题是,如何将当前日期从C#发送到数据库?

使用参数化SQL,并将参数的值设置为DateTime.Today。您根本不需要字符串表示。所以类似于:

// Work out the values beforehand
string name = getPlayerName(Tibia.Handle, 
                (BattleList_Start + Base + (BattleList_Step * playerIndex) + 4));
int level = ReadInt32(LvlAdr + Base, 4, Tibia.Handle);
int experience = ReadInt32(XpAdr + Base, 4, Tibia.Handle);
// Now do the database operations
string sql = @"INSERT INTO player (date, name, level, experience) 
               VALUES (@Date, @Name, @Level, @Experience)";
using (var conn = new MySqlConnection(...))
{
    conn.Open();
    using (var cmd = new MySqlCommand(sql, conn))
    {
        cmd.Parameters.Add("@Date", MySqlDbType.Date).Value = DateTime.Today;
        cmd.Parameters.Add("@Name", MySqlDbType.VarChar).Value = name;
        cmd.Parameters.Add("@Level", MySqlDbType.Int32).Value = level;
        cmd.Parameters.Add("@Experience", MySqlDbType.Int32).Value = experience;
        int rows = cmd.ExecuteNonQuery();
        // TODO: Validation of result (e.g. that 1 row was inserted)
    }
}

请注意,这将使用系统默认时区来计算你所说的"现在"的日期——如果你想要一个不同的时区,请提供更多信息。

或者,如果您使用ORM(例如实体框架、NHibernate等),通常会简化它,并且您永远不需要直接指定SQL-ORM应该根据参数自动工作。