C# 从字符串转换日期和/或时间时,SQL Server转换失败

C# 从字符串转换日期和/或时间时,SQL Server转换失败,c#,sql-server,C#,Sql Server,我得到了一个c#代码,它应该向表中插入记录,其中一些列是datetime 我从一个文件中获取列名称和值,其中包含所有硬编码内容,如下所示: "Columns": ["column1", "column2"], "Data": ["Val1", "Val2"] 我正在使用文件中的数据创建一个插入查询 问题是,由于文件中的所有内容都硬编码为字符串,我不知道何时应该使用DateTi

我得到了一个c#代码,它应该向表中插入记录,其中一些列是datetime

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

"Columns": ["column1", "column2"],
"Data": ["Val1", "Val2"]
我正在使用文件中的数据创建一个插入查询

问题是,由于文件中的所有内容都硬编码为字符串,我不知道何时应该使用
DateTime.Parse
,以便将字符串转换为
DateTime
。例如,我应该这样做吗
command.Parameters.AddWithValue(Parameters[I],singleValues[I])
或者我应该这样做
command.Parameters.AddWithValue(参数[I],DateTime.Parse(单值[I])


有什么方法可以避免检查参数的硬编码名称吗?日期字符串的值如下所示:“2020-05-11 11:58:00.100”在SQL Server中不是明确的日期值。对于较旧的日期和时间数据类型,格式
yyyy-MM-dd-hh:MM:ss.nnn
可以理解为
yyy-dd-MM-hh:MM:ss
,具体取决于您使用的
登录
的语言设置(基本上如果您不是美国人)。唯一明确的格式是
yyyy-MM-ddThh:MM:ss(.nnnnnnn)
yyyyymmdd
,无论数据类型和语言设置如何

但是,您也犯了另一个错误,使用
AddWithValue
。停止使用该选项,并使用
参数传递数据。添加
并在其中定义数据类型。比如说

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

有什么方法可以避免检查参数的硬编码名称吗。。。是,
DateTime.TryParse
所有列:D。。。或者明显地传递
,“type”:[“whatever”,“datetime”]
。。并只解析具有给定type@Selvin如果你加上这个作为答案,我会接受,但问题是我不知道具体的参数,它是否应该是日期时间。当然,我可以用“if参数[I]==…”来检查它,但我试图避免这样做,但你确实这样做了。如果首先检查与值@YonatanNir相关的列的名称,您就知道数据类型,因为您知道SQL Server中该列(在源数据中)的目标列的数据类型。