仅在 SQL Server 中使用 C# 将时间存储为 HH:mm AM/PM

-1 c# datetime sql-server-2008

如何从DateTimeC# 中的结构仅将日期的时间部分插入 Sql Server 。我想以HH:mm tt(HH:MM AM/PM)格式保存时间

我尝试了以下数据类型:

  1. time
  2. timestamp
  3. datetime
  4. time(7)

示例查询:

SqlCommand cmd = new SqlCommand("insert into Reminder values ('" + txttitle.Text + "','" + txtdate.Text + "','" + txttime.Text + "','" + Txtmail.Text + "')", conn);
cmd.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

Son*_*nül 5

我想你误解了一些事情..

让我们先看看 C# 方面。ADateTime包含作为数字的日期和时间值。ATimeSpan时间间隔。这也将这些时间值保留为数字。但是间隔词在这里很重要,因为它没有任何日期或其他类似DateTime. 它保持这个时间长度作为Ticks引擎盖下。

在 SQL Server 端,本机 CLRDateTimedate,datetimedatetime2类型TimeSpan映射并用time类型映射。

AM / PM指示器是一个概念文本的表示DateTime12小时制格式。这不是一个部分一个的DateTime值。它可能属于DateTime值的字符串表示形式。ATimeSpan不能用 AM 或 PM 表示,因为它是一个时间间隔。这就是为什么,你不能说;7 小时 3 分 1 秒后中午作为TimeSpan。ATimeSpan 不能在中午之前或中午之后。因为它是一个时间间隔

让我们看看你的例子;

看起来您从其他地方以字符串形式获取标题、日期、时间和邮件。这是我的建议;

如果您真的想在尝试表示 AM/PM 指示符时显示它们;

  1. 连接您的txtdate.Texttxttime.Text字符串并将其解析为DateTime.
  2. 将此DateTime值保存到您的数据库中,使用date,datetimedatetime2(首选)类型的列。
  3. 当您尝试来表示该值,从数据库,使用选择它DateTime.ToString()与法的自定义日期和时间格式说明符(tt与特定文化的AM / PM指示)。例如;datetimeValue.ToString("HH:mm tt", CultureInfo.InvariantCulture)

顺便说一下,当您创建动态 sql 命令时,您应该始终使用参数化查询。这种字符串连接对SQL 注入攻击是开放的。

还建议阅读:要踢的坏习惯:选择错误的数据类型