为什么它总是将日期中的时间保存为零C#

  • 本文关键字:时间 保存 日期 c# date datetime
  • 更新时间 :
  • 英文 :


它总是将日期列保存在数据库中,如下所示:2016-10-16 00:00:00.000。我想这样保存:2016-10-16 14:13:56.000。我无法将时间信息保存到数据库中。数据库中日期列的数据类型也定义为日期时间。

RecordDate(日期时间,空(

当我调试代码时,日期显示";2016.10.16 14:13:56";。

using (var conn = new SqlConnection())
{
conn.ConnectionString = connectionDBString;
conn.Open();
using (var command = conn.CreateCommand())
{
command.CommandText = $"INSERT INTO RECORDS VALUES('{records.Id}','{records.Type}','{records.Title}', @P0)";
if (records.Date != null)
{
command.Parameters.AddWithValue("P0", records.Date.Value);
}
command.ExecuteNonQuery();
}
conn.Close();
}

记录的类型。日期为

DateTime?

始终参数化所有值:

using (var command = conn.CreateCommand())
{
command.CommandText = $"INSERT INTO RECORDS VALUES(@id,@ty,@ti, @d)";

command.Parameters.Add("@id", SqlDbType.VarChar, 50).Value = records.Id);
command.Parameters.Add("@ty", SqlDbType.VarChar, 50).Value = records.Type);
command.Parameters.Add("@ti", SqlDbType.VarChar, 50).Value = records.Title);
//remove this line when you’re satisfied that the inserting of times does work
records.Date = DateTime.Now;
command.Parameters.Add(new SqlParameter("@d", SqlDbType.DateTime2) { Scale = 3, Value = (object)records.Date ?? DBNull.Value });
}

我。。

  • 猜测您使用的是sql server,但如果不是,则需要为类型枚举使用与SqlDbType不同的名称,SqlDbType用于sql server

  • 指定了所有参数,您应该始终这样做,因为不这样做是一个坏主意

  • 不再使用AddWithValue,因为这对sql server来说是个坏主意,但对其他数据库来说不是问题;调查这对你来说是否是个好主意

  • 根据你所说的和编码的内容猜测列的类型。我不相信id实际上是一个字符串,但你把它放在语句中的'中——如果它们不是数据库中的字符串,不要盲目地在'中写东西。更改指定的类型和大小,以匹配列的实际

  • 添加了一个测试行来设置您的记录。Date to a Date time with a time。不要在午夜运行代码:(-如果你的属性不可写,那么就把它写出来,或者把它换成Value,然后放DateTime.Now。我假设是记录。日期是一个打字错误

如果您的数据库列是DateTime,那么此代码肯定会插入日期和时间


当表有4列时,从INSERT中省略列名列表将起作用,但如果它发生了更改并添加了另一列,则查询将失败。这不是好事就是坏事。如果你想在解决问题的同时停止系统工作,那就好,如果你的新列是可选的,那么就坏,如果你只指定了列名,一切都可以继续工作。一般来说,指定名称更有意义,但如果你想更有效地编码,可以考虑放弃这种类型的编码,即编写自己的SQL,并使用实体框架

最新更新