Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.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
时间戳超出范围-带OLEDB.NET的PostgreSQL_Sql_.net_Postgresql_Timestamp_Oledb - Fatal编程技术网

时间戳超出范围-带OLEDB.NET的PostgreSQL

时间戳超出范围-带OLEDB.NET的PostgreSQL,sql,.net,postgresql,timestamp,oledb,Sql,.net,Postgresql,Timestamp,Oledb,我们有一个.Net应用程序,它将数据存储在PostgreSQL中。我们在PostgreSQL 8.3中有一个完美的工作代码,现在我们正在尝试将PostgreSQL server从8.3版升级到9.3版,我们的代码似乎崩溃了 对于连接PostgeSQL,我们使用的是OLEDB 我们遇到的问题是“时间戳超出范围”。查看日志时,我们收到了奇怪的时间戳“152085-04-28 06:14:51.818821” 在我们的应用程序中,我们试图将一个值从.Net代码传递给postgreSQL函数,该函数的类

我们有一个.Net应用程序,它将数据存储在PostgreSQL中。我们在PostgreSQL 8.3中有一个完美的工作代码,现在我们正在尝试将PostgreSQL server从8.3版升级到9.3版,我们的代码似乎崩溃了

对于连接PostgeSQL,我们使用的是
OLEDB

我们遇到的问题是“
时间戳超出范围”。查看日志时,我们收到了奇怪的时间戳“
152085-04-28 06:14:51.818821

在我们的应用程序中,我们试图将一个值从.Net代码传递给postgreSQL函数,该函数的类型为timestamp。当我们使用OLEDB进行连接时,我们使用参数类型为
OleDbType.DBTimeStamp
并从.Net代码发送日期时间值。此代码在PostgreSQL 8.3中工作,但在9.3中中断。从Postgresql 9.3的日志中,我们收到的参数值是“
152085-04-28 06:14:51.818821

我们试图使用示例.net代码中的
npgsql
提供程序执行相同的函数,方法是传递日期时间值,并将参数类型指定为
NpgsqlDbType.TimestampTZ
,这样我们就得到了正确的结果。从PostgreSQL的日志中,函数接收到的参数值显示为“
E'2014-01-30 12:17:50.804220'::timestamtz
”。 在其他版本的postgresql中尝试过,如9.1、9.2、9.3,并且在所有这些版本中都有所突破

你知道为什么其他版本的PostgreSQL在8.3中完美运行时会出现这种情况吗


谢谢

请显示准确、复制和粘贴的错误消息的全文,以及导致该错误的SQL查询的准确文本。您可能需要在
postgresql.conf.
@Craig Ringer中设置
log_statement=all
,在设置之前和之后,我已经设置了log_statement=all,以获得在postgresql接收的日期时间值,如“152085-05-06 13:22:56.498769”。我正在执行一个函数,该函数接受.NET代码中的时间戳值,我正在发送DateTime值。请参阅以下代码:指令=\“测试\”“测试函数\”;参数.Add(“pDate”,OleDbType.DBTimeStamp,DateTime.Now);参数.Add(“pDateRangeMax”,OleDbType.DBTimeStamp,DateTime.Now+TimeSpan.FromMinutes(5));编辑您的问题(“编辑”链接,标签下)添加更多信息。在您的问题中,您可以将其格式化为可读的格式。并在执行此操作时显示准确的查询和准确的错误文本。@CraigRinger我已经找到了从Ranger error中获取时间戳的原因。在postgrSQL 9.3中收到的值是“152085-05-06 13:22:56.498769”,而不是DateTime ex:“2014-01-31 14:26:56”“我只是想知道为什么在使用OLEDB连接时,我没有从.NET代码中接收到正确的值,相同的代码适用于PostgreSQL 8.3版本并给出正确的结果。我使用“npgsql”编写了一个示例程序,从.NET代码中收到了正确的值,因此确认PostgreSQL中的函数工作正常。尝试通过另一个前端(最好是psql)获取相同的时间戳列。(pg8.3及之前版本中的时间戳(默认情况下)在内部实现为双倍;您的驱动程序可能仍会假设这一点)如果这似乎可行,请更新您的驱动程序/前端程序。顺便问一下:您是如何升级数据的?