繁体   English   中英

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

[英]How to extract date time from sql and bind it to datetimePicker

我已经将日期从 datetimepicker 保存到我的 windows 窗体应用程序中的 sql 格式(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 是 datetimepicker 的名称。 这会产生错误“字符串未被识别为有效的日期时间”,因为它本身选择了 MM-dd-yyyy 格式,结果证明是错误的。

尝试这个:

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

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

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

问题是字段Birthday的类型。
你说你把它作为一个 NVARCHAR 列。 这是错误的,原因有很多。

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

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

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

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

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

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

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

birthday_search.Format = DateTimePickerFormat.Custom;

现在你想要的格式:

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

默认情况下, dd-MM-yyyy不是ToDateTime函数的预期格式。 改用Convert.ToDateTime (String, IFormatProvider)重载。 或者使用ParceExact获取 DateTime 值:

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

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

birthday_search.Text = reader["Birthday"];

试试这个,

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM