仅以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) + ")";
好吧,在我的数据库中,我有一个数据类型为"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应该根据参数自动工作。