首页 > 解决方案 > 从字符串转换日期和/或时间时 SQL Server 转换失败

问题描述

我得到了 ac# 代码,它应该将记录插入到表中,其中一些列是日期时间。

我从一个文件中获取列名和值,其中所有内容都经过硬编码,如下所示:

"Columns": ["column1", "column2"],
"Data": ["Val1", "Val2"]

我正在使用文件中的数据创建一个 INSERT 查询。

问题是,由于文件中的所有内容都被硬编码为字符串,所以我不知道应该何时使用DateTime.Parse才能将字符串转换为DateTime. 例如,我应该这样做command.Parameters.AddWithValue(parameters[i], singleValues[i]);还是应该这样做command.Parameters.AddWithValue(parameters[i], DateTime.Parse(singleValues[i]));

有什么方法可以避免检查参数的硬编码名称吗?日期字符串的值如下所示:“2020-05-11 11:58:00.100”

标签: c#sql-server

解决方案


2020-05-11 11:58:00.100不是SQL Server明确的日期值。对于较旧的日期和时间数据类型,格式yyyy-MM-dd hh:mm:ss.nnn可以读取为yyyy-dd-MM hh:mm:ss,具体取决于LOGIN您使用的语言设置(基本上如果您不是美国人)。唯一明确的格式是yyyy-MM-ddThh:mm:ss(.nnnnnnn)并且yyyyMMdd与数据类型和语言设置无关。

但是,你也犯了另一个错误,使用AddWithValue. 停止使用它并传递您的数据Parameters.Add并在那里定义数据类型。例如

command.Parameters.Add(parameters[i], SqlDbType.DateTime2).Value = DateTime.Parse(singleValues[i]);

推荐阅读