【问题标题】:Why it always saves the time in the date to the database as zero C#为什么它总是将日期中的时间保存到数据库中为零 C#
【发布时间】:2021-05-31 03:06:09
【问题描述】:

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

RecordDate(datetime,null)

当我调试代码时,日期显示“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();
            }

记录类型。日期是

日期时间?

【问题讨论】:

标签: c# date datetime


【解决方案1】:

始终参数化所有值:

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,但如果你不是,你需要为类型 enum 使用与 SqlDbType 不同的名称,SqlDbType 用于 sql server

  • 指定所有参数,您应该始终这样做,因为不这样做是bad idea

  • 不再使用 AddWithValue,因为它是用于 sql server 的bad idea,但它是用于其他数据库的not a problem;调查这对你是否是个好主意

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

  • 添加了一条测试行,用于设置您的记录。日期为带有时间的日期时间。不要在午夜运行代码 :) - 如果您的属性不可写,请设置为可写或将其换出 Value 并将 DateTime.Now 放入。我认为 record.Date 是一个错字

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


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

【讨论】:

    猜你喜欢
    • 2018-05-25
    • 1970-01-01
    • 2016-05-09
    • 2012-02-10
    • 2017-07-03
    • 1970-01-01
    • 2019-04-02
    • 2013-05-03
    • 1970-01-01
    相关资源
    最近更新 更多