Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将字符串转换为C#中的DateTime并写入SQL_C#_Sql - Fatal编程技术网

将字符串转换为C#中的DateTime并写入SQL

将字符串转换为C#中的DateTime并写入SQL,c#,sql,C#,Sql,我正在尝试将字符串转换为DateTime,并将其写入SQL表中的DateTime字段 string dateTimeString = line.Substring(5, 14); var date = DateTime.ParseExact(dateTimeString, "dd/MM/yyyy", null).ToString("MM/dd/yyyy"); SqlCommand command = new SqlCommand("INSERT INTO dbo.ODCZYTY (numer_

我正在尝试将字符串转换为DateTime,并将其写入SQL表中的DateTime字段

string dateTimeString = line.Substring(5, 14);
var date = DateTime.ParseExact(dateTimeString, "dd/MM/yyyy", null).ToString("MM/dd/yyyy");

SqlCommand command = new SqlCommand("INSERT INTO dbo.ODCZYTY (numer_karty,data, rodzaj,obszar,kierunek) VALUES(@numer_karty,@data, @rodzaj, @obszar, @kierunek)", conn);

command.Parameters.AddWithValue("@numer_karty", line.Substring(0, 5));
command.Parameters.AddWithValue("@data", date);
command.Parameters.AddWithValue("@rodzaj", line.Substring(19, 2));
command.Parameters.AddWithValue("@obszar", line[line.Length - 2]);
command.Parameters.AddWithValue("@kierunek", line[line.Length - 1]);
line.Substring(5,14)=20160127122843
但我得到了以下结果:

从字符串转换日期和/或时间时转换失败


我做错了什么?

不要为了通过SQL参数传递字符串而将字符串转换为
DateTime
,然后再转换回字符串。表中的列可能期望一个<代码>日期时间< /C>值,并且由于您添加了“代码> AddioValue”,它会认为该值是字符串而不是<代码> DATETIME。简单地将解析后的DateTime
对象保留为
DateTime
,然后可以使用
AddWithValue`like:

var date = DateTime.ParseExact(dateTimeString, "dd/MM/yyyy", CultureInfo.InvariantCulture);
//and while adding paramter
command.Parameters.AddWithValue("@data", date);
(也可以使用
CultureInfo.InvariantCulture
而不是
null
来解析
DateTime
,在
DateTime
中的默认分隔符与
//code>不同的区域性中,您可能会遇到问题。)

另一个选项是使用
Add
明确指定DB类型,如:

command.Parameters.Add(new SqlParameter("@data", SqlDbType.DateTime) {Value = date});

不要仅仅为了通过SQL参数将字符串转换为
DateTime
,然后再转换回字符串。表中的列可能期望一个<代码>日期时间< /C>值,并且由于您添加了“代码> AddioValue”,它会认为该值是字符串而不是<代码> DATETIME。简单地将解析后的
DateTime
对象保留为
DateTime
,然后可以使用
AddWithValue`like:

var date = DateTime.ParseExact(dateTimeString, "dd/MM/yyyy", CultureInfo.InvariantCulture);
//and while adding paramter
command.Parameters.AddWithValue("@data", date);
(也可以使用
CultureInfo.InvariantCulture
而不是
null
来解析
DateTime
,在
DateTime
中的默认分隔符与
//code>不同的区域性中,您可能会遇到问题。)

另一个选项是使用
Add
明确指定DB类型,如:

command.Parameters.Add(new SqlParameter("@data", SqlDbType.DateTime) {Value = date});

将其转换为ISO-8601格式(yyyy-mm-dd等),以便完全清晰


“MM/dd/yyyy”仅适用于具有美式英语设置的SQL Server安装。

将其转换为ISO-8601格式(yyyy-MM-dd等)以完全清晰


“MM/dd/yyyy”仅适用于具有美国英语设置的SQL Server安装。

您尝试解析如下字符串

line.Substring(5, 14) = "20160127122843"

这应该如何工作?试试这个

string dateTimeString = line.Substring(5, 8); //just 8 to get the date only
var d = DateTime.ParseExact(dateTimeString , "yyyyMMdd", CultureInfo.InvariantCulture);
在此之后,不要使用
ToString()
重新转换日期。只需将其作为键入的日期传递给参数

更新 如果您需要时间,请保留
(5,14)
并尝试此操作

var d = DateTime.ParseExact(dateTimeString , "yyyyMMddHHmmss", CultureInfo.InvariantCulture);

您尝试像这样解析字符串

line.Substring(5, 14) = "20160127122843"

这应该如何工作?试试这个

string dateTimeString = line.Substring(5, 8); //just 8 to get the date only
var d = DateTime.ParseExact(dateTimeString , "yyyyMMdd", CultureInfo.InvariantCulture);
在此之后,不要使用
ToString()
重新转换日期。只需将其作为键入的日期传递给参数

更新 如果您需要时间,请保留
(5,14)
并尝试此操作

var d = DateTime.ParseExact(dateTimeString , "yyyyMMddHHmmss", CultureInfo.InvariantCulture);

名为“data”的字段的数据类型是什么?dateTimeString的值是什么?哪个RDBMS(产品和版本)?您永远不应该依赖于特定于区域性的日期文字。。。使用ISO 8601、ODBC或通用格式行。子字符串(5,14)=20160127122843如果您对时间不感兴趣,为什么不将
(5,14)
更改为
(5,8)
?SQL Server至少会隐式转换此数据类型…名为“data”的字段的数据类型是什么?dateTimeString的值是什么?哪个RDBMS(产品和版本)?您永远不应该依赖于特定于区域性的日期文字。。。使用ISO 8601、ODBC或通用格式行。子字符串(5,14)=20160127122843如果您对时间不感兴趣,为什么不将
(5,14)
更改为
(5,8)
?SQLServer至少会隐式地强制转换它…我使用它:command.Parameters.Add(newsqlparameter(“@data”,SqlDbType.DateTime){Value=date});我明白了:你不能把字符串转换成DATATIME@CodeObiect您是否拿走了最后的
ToString()
?如果将日期作为键入的日期传入,则不需要进行转换…line.Substring(5,14)=20160127122843,并且我必须将其写入SQL。@codeObject,不要将日期转换为字符串。注意答案中的第一行代码,它创建的是
DateTime
对象,而不是字符串。使用它。但我想将字符串转换为日期。我使用它:command.Parameters.Add(newsqlparameter(“@data”,SqlDbType.DateTime){Value=date});我明白了:你不能把字符串转换成DATATIME@CodeObiect您是否拿走了最后的
ToString()
?如果将日期作为键入的日期传入,则不需要进行转换…line.Substring(5,14)=20160127122843,并且我必须将其写入SQL。@codeObject,不要将日期转换为字符串。注意答案中的第一行代码,它创建的是
DateTime
对象,而不是字符串。使用它。但我想将字符串转换为日期。是的,我这样做!谢谢!是的,我做到了!谢谢!你让我开心:)