无法将文本框(dd / MM / yyyy)日期转换为日期时间格式

时间:2014-11-26 12:01:42

标签: c# datetime

我的数据库日期为“2014-11-26”。我有一个格式化的日历(dd-MM-yyyy)我试图通过文本框选择日期从数据库中为我的表单带来一些值

  protected void txtdate_TextChanged(object sender, EventArgs e)
    {

        //DateTime timeIn = Convert.ToDateTime(txtdate.Text);
       // DateTime time1 = DateTime.ParseExact(txtdate.Text, "yyyy-MM-dd", CultureInfo.InvariantCulture);
        str = "select TimeIn,TimeOut from MusterRoll where EmpCode='" + ddcode.SelectedItem.Text + "' and Date='"+time1+"'";
        dr = conn.query(str);
        if (dr.Read())
        {
            DateTime time = dr.GetDateTime(0);
            TimeSelector1.SetTime(time.Hour, time.Minute, TimeSelector1.AmPm);
            DateTime time2 = dr.GetDateTime(1);
            TimeSelector2.SetTime(time2.Hour, time2.Minute, TimeSelector2.AmPm);
        }

    }

问题是数据库日期格式和我的日历格式不同。我尝试了两种方法(我放在命令行中),但显示错误消息,如"input string was not in correct format"。我上网浏览并找到了相同的答案。我可以知道它为什么显示错误吗?我想使数据库dateformat和calender格式相同

1 个答案:

答案 0 :(得分:1)

首先,DateTime没有任何隐式格式。它只有日期和时间值。 String表示可以采用格式。

我强烈怀疑您使用字符串表示法保存DateTime值,这是一个可怕的想法。阅读:Bad habits to kick : choosing the wrong data type将您的DateTime值直接传递给参数化查询,而不是其字符串表示形式。反正..

有关;

DateTime timeIn = Convert.ToDateTime(txtdate.Text); 

Convert.ToDateTime(string)方法使用DateTime.Parse方法和CurrentCulture设置。这意味着,如果您的字符串不是CurrentCulture您的代码的标准日期和时间格式FormatException。我猜dd-MM-yyyy不是CurrentCulture的标准日期和时间格式。

有关;

DateTime time1 = DateTime.ParseExact(txtdate.Text, "yyyy-MM-dd", CultureInfo.InvariantCulture);

使用DateTime.ParseExact时,您的字符串和格式应完全匹配。

  

将指定的日期和时间字符串表示形式转换为它   DateTime等效。 字符串表示的格式必须   完全匹配指定的格式或抛出异常

在你的情况下;它们不是("26-11-2014""yyyy-MM-dd")。请改用dd-MM-yyyy格式。

DateTime time1 = DateTime.ParseExact(txtdate.Text,
                                     "dd-MM-yyyy",
                                     CultureInfo.InvariantCulture);

然后,您可以从time1喜欢

生成格式
time1.ToString("yyyy-MM-dd"); // A string formatted as 2014-11-26

对于您的命令部分,您应始终使用parameterized queries。这种字符串连接对SQL Injection攻击开放。