Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.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#datareader时时间戳的不同格式_C#_Mysql_Timestamp - Fatal编程技术网

使用c#datareader时时间戳的不同格式

使用c#datareader时时间戳的不同格式,c#,mysql,timestamp,C#,Mysql,Timestamp,我正在使用OdbcDataReader从mysql表中读取时间戳。当我查看表中的数据时,它的格式是2013-09-12 11:11:09。但读者似乎是以12/09/2013 11:11:09的格式阅读的 然后我尝试将其插入另一个mysql表,但收到错误: “时间戳”列的datetime值不正确:“12/09/2013 11:11:09” 在第一排 我怎样才能区分格式上的差异?我是否应该以某种方式引用某个Unix时间戳值?数据不应该以任何文本格式出现在表中。这只是一个日期和时间 当您将数据转换为字

我正在使用
OdbcDataReader
从mysql表中读取时间戳。当我查看表中的数据时,它的格式是
2013-09-12 11:11:09
。但读者似乎是以
12/09/2013 11:11:09
的格式阅读的

然后我尝试将其插入另一个mysql表,但收到错误:

“时间戳”列的datetime值不正确:“12/09/2013 11:11:09” 在第一排


我怎样才能区分格式上的差异?我是否应该以某种方式引用某个Unix时间戳值?

数据不应该以任何文本格式出现在表中。这只是一个日期和时间

当您将数据转换为字符串时,您将看到格式—您应该尽可能少地这样做。特别是,当您将数据插入到另一个表中时,根本不应该使用格式化的值-应该在参数化SQL中使用
DateTime


基本上,除非您真的需要数据的字符串表示形式,否则您应该将其保留在“本机”表示形式中(
DateTime
)。每次你有一个转换到或从文本,这是一个失败的机会。日期和时间对于时区等来说已经足够难了,不需要进行额外的转换。

数据不应该以任何文本格式出现在表中。这只是一个日期和时间

当您将数据转换为字符串时,您将看到格式—您应该尽可能少地这样做。特别是,当您将数据插入到另一个表中时,根本不应该使用格式化的值-应该在参数化SQL中使用
DateTime


基本上,除非您真的需要数据的字符串表示形式,否则您应该将其保留在“本机”表示形式中(
DateTime
)。每次你有一个转换到或从文本,这是一个失败的机会。日期和时间对于时区等来说已经够难了,不需要进行额外的转换。

您如何看待“表中”的数据?我不熟悉MySQL实现,但Oracle和Sql Server的日期时间值以不可读的二进制格式存储,并通过查询工具转换为可读的时间戳。MySQL可能也在做类似的事情

尝试将其插入另一个mysql表中


如果您在插入数据时关心格式,那么您正在做一些非常糟糕的事情。这强烈表明您正在使用一种易受sql注入攻击的技术,而不是参数化查询。如果使用参数化查询,则直接将C#datetime类型指定给查询参数值,ADO.Net对象将处理所需的任何格式。此时,您可以成功地
DateTime.Parse()
DateTime.TryParse()
的任何内容都将成为查询的有效输入。

您如何查看“表中”的数据?我不熟悉MySQL实现,但Oracle和Sql Server的日期时间值以不可读的二进制格式存储,并通过查询工具转换为可读的时间戳。MySQL可能也在做类似的事情

尝试将其插入另一个mysql表中


如果您在插入数据时关心格式,那么您正在做一些非常糟糕的事情。这强烈表明您正在使用一种易受sql注入攻击的技术,而不是参数化查询。如果使用参数化查询,则直接将C#datetime类型指定给查询参数值,ADO.Net对象将处理所需的任何格式。此时,您可以成功地
DateTime.Parse()
DateTime.TryParse()
的任何内容都将成为查询的有效输入。

您可以参考answer@VijayPote当前位置关于那个问题的两个答案都是纸上谈兵。在IMO中,解决不必要地包含字符串转换的根本问题是一种更好的方法answer@VijayPote当前位置关于那个问题的两个答案都是纸上谈兵。在我看来,修复不必要地包含字符串转换的根本问题是一个更好的方法。是的,我想这是因为我正在转换为字符串导致了问题。我正在执行以下操作,其中
reader
包含从mysql表读取的数据
cmd.CommandText=“insert into mytable set timestamp=”+reader[“timestamp”]+“'where id=1”
这一定是错的-我应该怎么做?@Jon:你应该使用参数化SQL,就像我说的,例如,
插入MyTable SET timestamp=@timestamp
然后设置
@timestamp
参数。查看MySqlCommand.Parameters的文档以获取示例。@Jon:太好了。到处使用它。除了日期转换(和幽默)之外,还有一些重要的原因。是的,我想这是因为我转换成字符串导致了问题。我正在执行以下操作,其中
reader
包含从mysql表读取的数据
cmd.CommandText=“insert into mytable set timestamp=”+reader[“timestamp”]+“'where id=1”
这一定是错的-我应该怎么做?@Jon:你应该使用参数化SQL,就像我说的,例如,
插入MyTable SET timestamp=@timestamp
然后设置
@timestamp
参数。查看MySqlCommand.Parameters的文档以获取示例。@Jon:太好了。到处使用它。除了日期转换(和幽默)之外的重要原因,请参阅。我正在使用GUI程序(特别是sqlyog)查看数据。我将研究参数化查询。我将使用GUI程序(特别是sqlyog)查看数据。我将研究参数化查询。