【问题标题】:conversion failed when converting date and/or time from character [duplicate]从字符转换日期和/或时间时转换失败[重复]
【发布时间】:2018-10-07 09:19:51
【问题描述】:

我正在尝试将数据从 excel 转换为我在数据库中的字段类型,但出现上述错误:

string query = "Insert into Réception_camions([Date d'arrivée],[heure d'arrivée],Poids_cam,Id_cam,Id_qualité) Values('" +DateTime.Parse(ds.Tables[0].Rows[i][0].ToString()) + "','" + /*TimeSpan.Parse*/(ds.Tables[0].Rows[i][1].ToString()) + "','" + ds.Tables[0].Rows[i][2].ToString() + "','" + ds.Tables[0].Rows[i][3].ToString() + "','" + ds.Tables[0].Rows[i][4].ToString() + "')";

还有其他方法可以转换为日期时间吗?

【问题讨论】:

  • 您听说过 SQL 注入攻击吗?如果你还没有,你可能想研究一下。您需要使用参数化查询,如果您这样做,您会发现“转换日期时间”的其他问题会消失,因为 ADO.NET 足够聪明来处理这个
  • 几乎不需要任何代码。如果您有 DS/DT,则可以使用 DataAdapter 进行更新,而无需使用该讨厌的 SQL。所有网络数据库提供者对象 - DataTable。 DataSet、DataAdapter、DBCommand - 都知道什么是 NET DateTime 并且可以保存它而不会被你打扰
  • 你有一个简单的例子,所以我可以使用。

标签: c# sql-server asp.net-mvc


【解决方案1】:

SQL Server 有时不接受日期和时间值之间有空格的某些字符串。您可以通过用“T”字符替换空格来解决此问题。

--Failure
INSERT INTO TableName (DateTimeVal) VALUES ('2018-08-09 12:19:28')

--Success
INSERT INTO TableName (DateTimeVal) VALUES ('2018-08-09T12:19:28')

但是,我强烈建议您遵循此处其他答案的建议,并找到将数据插入数据库的更好方法

【讨论】:

  • stackoverflow.com/questions/3144074/…...如果您推荐日期格式,请始终坚持使用xkcd.com/1179(而不是随机建议用“T”替换空格)
  • 如果你能让这个dbfiddle.uk/… 工作,我很乐意为你投票
  • 你需要使用破折号而不是斜线,我的错误,更新了我的答案
  • 虽然我同意日期参数有一个标准以遵循 yyyy-mm-dd 模式,但 SQL 日期时间可以接受多种日期格式,但需要一个 T 字符来指示开始字符串的时间部分。这不是随机的。在此处阅读更多信息:docs.microsoft.com/en-us/sql/t-sql/data-types/… 在 ISO 8601 下列出
  • @JoeVandeBilt 你夸大了。只要使用可识别的格式,就“不需要”成功转换字母“T”。 “T”格式只是公认的格式之一——对应于 ISO 标准。还有其他可以成功解释的 - 例如 ODBC 格式。 Tibor 讨论了这个here
猜你喜欢
  • 2012-04-17
  • 2017-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多