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

时间:2014-06-24 05:20:54

标签: c# datetimepicker

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

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

我尝试了几种不同的方法来做到这一点,但下面的代码似乎是最明智的。

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

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

消息框中显示的日期如下所示。 24/06/2015 12:00:00 AM (澳大利亚日期格式是正确的,我不在乎时间)

"对象引用未设置为对象的实例" _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;
}

我可能是世界上最古老的新手,因为我主要使用系统管理员而且从不专注于单一的编程语言。 :)

非常感谢任何关于我做错事的想法。

由于 大卫

2 个答案:

答案 0 :(得分:0)

这应该这样做:

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来实现同样的目的。无论哪种方式,你应该意识到危险:)

答案 1 :(得分:0)

这条线很糟糕:

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.