如何从 sql 中提取日期时间并将其绑定到 datetimePicker

How to extract date time from sql and bind it to datetimePicker

我已将日期从 datetimepicker 保存到 sql 在我的 windows 表单应用程序中,格式为 (dd-MM-yyyy)。要编辑日期,我想先获取保存的日期并显示在 datetimepicker 控件中。就像 28-03-2000 保存在 db 中一样,datetimepicker 应该显示相同的日期并且应该理解格式 dd-MM-yyyy。我尝试使用的代码如下

birthday_search.Text = Convert.ToDateTime(reader["Birthday"]).ToString("dd-MM-yyyy");

birthday_search 是日期时间选择器的名称。这会产生错误 "String was not recognized as a valid datetime",因为它本身选择的格式 MM-dd-yyyy 结果是错误的。

试试这个:

将日期时间选择器的 属性 格式 更改为 自定义 然后添加以下代码:

birthday_search.CustomFormat = "dd-MM-yyyy";

birthday_search.Value = Convert.ToDateTime(reader["Birthday"]).ToString());

尝试像这样设置日期时间选择器的格式:

birthday_search.Format = DateTimePickerFormat.Custom;

现在您需要的格式:

birthday_search.CustomFormat = "dd-MM-yyyy";

默认情况下,dd-MM-yyyy 不是 ToDateTime 函数的预期格式。使用 Convert.ToDateTime (String, IFormatProvider) overload instead. Or use ParceExact 获取 DateTime 值:

DateTime MyDateTime = DateTime.ParseExact(reader["Birthday"], "dd-MM-yyyy", null);

但在您的情况下,转换不是必需的,因为您可以为 Text 属性 使用字符串值。所以用

就够了
birthday_search.Text = reader["Birthday"];

问题是字段的类型生日
您说您将它作为 NVARCHAR 列。这是错误的,原因有很多。

首先,数据库无法对该字段进行适当的搜索。例如:“14-01-2001”之前是“28-12-2000”吗?如果将其视为字符串 NO,因为 1 在 2 之前,但如果将其视为日期,则为 YES。

那么在加载该值时,您将无法将该值转换回日期时间变量。转换将采用发生转换的计算机的 CultureInfo。这可能会正常工作或不工作,具体取决于输入。例如,在我的机器上,字符串“04-06-2017”将在 6 月 4 日转换,但在文化信息设置为 MM-dd-yyyy 的机器上,相同的字符串将被解析为 4 月 6 日.

所以您只需要将该字段更改为日期时间类型,将值存储为 DateTime 变量并使用

读回
birthday_search.Value = Convert.ToDateTime(reader["Birthday"]);

birthday_search.Value = (DateTime)reader["Birthday"];

这里不涉及格式。日期时间类型的字段分配给 DateTime 类型的 属性。显示此值的格式是 DateTimePicker 的 Format 和 CustomFormat 的工作。当然这段代码没有考虑NULL值的可能性。

试试这个,

Me.birthday_search.DataBindings.Add("Text", TableName, "Birthday")