将smalldatetime数据类型转换为字符串。 " String未被识别为有效的DateTime"错误

时间:2014-08-13 19:29:54

标签: c# datetime

在我的数据库中,我有一个如下所示的smalldate数据类型:“2014-09-01 19:00:00”。

我正在尝试将此字符串转换为日期:

DateTime data2 = DateTime.ParseExact(obiekt.PelnaData, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);

我试过这个:

string query = "Select *, Convert(nvarchar, DataMeczu, 104) as formatData, Convert(nvarchar, DataMeczu, 114) as formatData2, Convert(nvarchar, DataMeczu, 120) as formatData3 From MyTable Where MyVar = @MyVar";

SqlDataReader rdr = com.ExecuteReader();
while(rdr.Read())
{
    TerminarzeLigaModel terminarz = new TerminarzeLigaModel();
    terminarz.PelnaData = rdr["formatData3"].ToString();

    or this version:

    string dataA = rdr["formatData"].ToString();
    string dataB = rdr["formatData2"].ToString();
    terminarz.PelnaData = dataA + " " + dataB; 
}

但每次收到此错误时:“字符串未被识别为有效的DateTime”。我不知道我做错了什么。如果我将数据库中的日期粘贴到变量中:

string dataExample = "2014-09-01 19:00:00";
DateTime data2 = DateTime.ParseExact(dataExample, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);

比它工作正常。你能说出什么问题吗?

2 个答案:

答案 0 :(得分:0)

好像你正试图在DateTime字段上设置一个字符串:

terminarz.PelnaData = rdr["formatData3"].ToString();

显示转化的代码行不在while循环内,而it works就好了。

尝试用以下代码替换上面的行:

terminarz.PelnaData = DateTime.ParseExact(rdr["formatData3"].ToString(), "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);

如果仍然失败,请调试并检查rdr["formatData3"]的实际值。

答案 1 :(得分:0)

这看起来像是一个国际问题。你可以调试看看" formatData3"正在回归,是yyyy-MM-dd HH:mm:ss或任何其他格式还是有效月份回来?

这可能是你的问题。