无法将参数值从String转换为DateTime

时间:2012-09-25 10:21:15

标签: c# asp.net sql

使用类型为sqldbtype.datatime

的命令参数时出错

这是我正在使用的代码

 cmd.Parameters.Add("@Posted_date", SqlDbType.DateTime).Value = Convert.ToDateTime(dt.Rows[i]["messagePostedDate"]);

错误是“无法将参数值从String转换为DateTime”,dt.Rows [i] [“messagePostedDate”]的值为“2008-10-01 00:00:00.000” -

有谁知道可能是什么问题?

4 个答案:

答案 0 :(得分:1)

尝试使用:

Convert.ToDateTime Method (String, IFormatProvider)

使用指定的区域性特定格式信息,将指定的数字字符串表示形式转换为等效的日期和时间。

答案 1 :(得分:1)

根据您的评论,您需要解析DateTime,如:

DateTime date = DateTime.ParseExact(dt.Rows[i]["messagePostedDate"].ToString(),
                         "yyyy-MM-dd HH:mm:ss.fff",
                         CultureInfo.InvariantCulture);

cmd.Parameters.Add("@Posted_date", SqlDbType.DateTime).Value = date;

由于您的字符串包含日期时间格式yyyy-MM-dd HH:mm:ss.fff,因此您可以将DateTime.ParseExact与日期格式一起使用。

答案 2 :(得分:1)

问题是SQL Server中登录帐户的语言与您的ui文化语言不匹配。

.NET正在尝试将您传递的日期转换为sql server中的日期格式。它会将clinet中的日期作为字符串传输,并且无法转换它,因为客户端文化与为SQL Server登录设置的默认“语言”不同。

要解决此问题,您需要将sql server会话的语言与set language xxxxx匹配,或者使用SQL Management Studio更改登录语言或更改SQL Server默认语言。

然后它应该工作。

答案 3 :(得分:-1)

(convert(varchar,messagePostedDate,101)) as messagePostedDate在您的选择查询中使用此选项 这里有一个参考链接,它具有T-SQL的所有转换和转换 http://msdn.microsoft.com/en-us/library/ms187928.aspx