2

使用带类型的命令参数时出现错误sqldbtype.datatime

这是我正在使用的代码

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

错误是“无法将参数值从字符串转换为日期时间”并且 dt.Rows[i]["messagePostedDate"] 的值为“2008-10-01 00:00:00.000” –

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

4

4 回答 4

1

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

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

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

然后它应该工作。

于 2014-01-10T15:15:47.390 回答
1

尝试使用:

Convert.ToDateTime Method (String, IFormatProvider)

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

于 2012-09-25T10:35:48.993 回答
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;

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

于 2012-09-25T10:42:22.623 回答
-1

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

于 2012-09-25T10:43:53.977 回答