繁体   English   中英

C#将日期从字符串加载到datetimepicker

[英]C# Load a date from a string into a datetimepicker

我正在尝试更新沿途继承的旧c#程序。 没有太大的变化,只是添加了一些新字段等。我正在使用Visual Studio 2008。

具体来说,我试图从SQL表读取日期时间并将其插入DateTimePicker,以便用户可以在屏幕上读取/修改它。

我尝试了几种不同的方法来执行此操作,但是下面的代码似乎是最明智的。

我已经从SQL数据库中将日期时间字符串读入datetime变量中。

我可以在消息框中显示值,没问题,但是当我尝试将其加载到dateTimePicker控件时,出现异常。

消息框中显示的日期如下所示。 2015年6月24日上午12:00:00(澳大利亚日期格式正确,我不在乎现在的时间)

“对象引用未设置为对象的实例” _COMPlusExceptionCode = -532459699

while (sqlDR.Read())
{
    this.textBoxFixedAmountStreetNumber.Text = sqlDR["lStreetNumber"].ToString() + sqlDR["sStreetNumberSuffix"].ToString();
    this.textBoxFixedAmountStreetName.Text = sqlDR["sStreet"].ToString();
    this.textBoxFixedAmountSuburb.Text = sqlDR["sTown"].ToString();
    DateTime dateString = Convert.ToDateTime(sqlDR["dFixedAmountEndDate"].ToString());
    MessageBox.Show("dFixedAmountEndDate=" + dateString, "Debug", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
    this.dateTimePickerFixedAmountEndDate.Value = dateString;
}

我可能是世界上最古老的新手,因为我主要是sysadmin,而且从不专心于单一编程语言。 :)

任何关于我做错事情的想法都值得赞赏。

谢谢大卫

应该这样做:

var date_as string = "24/06/2015 12:00:00 AM";
DateTime date ;

DateTime.TryParse(d, out date);
// date now holds your date

编辑
正如其他评论和Matt的答案所暗示的那样,您实际上不需要解析字符串(因此,即使正确,上述内容也可能不是您想要的)。

如果这样做,则可以使用bool result = DateTime.TryParse(d, out date); 并且如果结果为false分配一个伪造的日期(或者更好的是,在定义日期时,可以执行以下操作: DateTime date = new DateTime();因此,如果解析失败,您将仍然拥有一个有效日期。

如果采用其他方法,则可以通过测试null来实现相同目的。 无论哪种方式,您都应该意识到危险:)

这行是不好的:

DateTime dateString = Convert.ToDateTime(sqlDR["dFixedAmountEndDate"].ToString());

这是它的替代品:

DateTime fixedAmountEndDate = (DateTime) sqlDR["dFixedAmountEndDate"];

不必在不需要时转换为字符串,并使用有意义的名称。

但是,如果您获取的"Object Reference not set to an instance of an object" ,则为NullReferenceException 您的SQL字段之一在数据库中可能为空,并且包含空值。 您需要显式测试该条件,因为DateTime不能为空, DateTimePicker.Value也不可以。

if (sqlDR["dFixedAmountEndDate"] == DBNull.Value)
    // do something.  Perhaps hide the field, etc.

暂无
暂无

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

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