2011-03-11 88 views
0

当我尝试从C#中的postgresql检索日期字段时出现此错误。如在select datefield from tablePostgresql错误:字符串未被识别为有效的日期时间

运行postgesql的系统位于IST时区。我无法编辑数据库或部署它的系统上的任何设置。我可以在代码中执行什么操作来防止此问题?

更新:客户端在MST timzone上。忘了提到这一点。

UPDTATE2:将代码附加

DbDataAdapter myAdapter = dbFactory.NewDataAdapter(sSQL, myConnection); 
if (myConnection.State != ConnectionState.Open) 
     myConnection.Open(); 
ds = new DataSet(); 
myAdapter.Fill(ds, dataTableName); 
+0

请出示您所使用的C#代码,而不仅仅是SQL。 – 2011-03-11 10:12:32

回答

1

尝试阅读它作为一个字符串,然后解析它在C#中的日期。

像:

String date = GetFromDb(); 
DateTime realDate = DateTime.Parse(date); 

其是否正常工作,可能只是一个格式错误。

但是,如果这种dosn't帮助,请你张贴你的代码。

谢谢, Alex。

+0

谢谢亚历克斯。我已经发布了我的代码,因为您可以看到我正在使用泛型代码来查询数据库。所以你的解决方案可能不适合我的问题。 – Nishan 2011-03-11 10:36:14

+0

在你的查询中,你可以尝试将日期时间格式转换为MST,但我不熟悉PostgreSQL,但它应该有一些日期时间函数来处理这些问题。谢谢。 – 2011-03-11 10:42:08

3

您确定在DbDataAdapter上使用有效的方言吗?你的工厂返回什么类型?意思是,myAdapter.GetType()返回什么?

PostgreSQL的处理分/ maxvalues比大多数的DB略有不同,并可能返回日期为:

  • '-infinity'对应DateTime.MinValue
  • 'infinity'DateTime.MaxValue

除非你的适配器处理,我猜测你最终可能会遇到类似的错误。

我猜你应该使用Npgsql提供程序中的NpgsqlDataAdapter,但是你不要在某处提及它。

编辑:发现有一个已知的错误:http://pgfoundry.org/forum/message.php?msg_id=1005522,但没有找到这影响哪些版本。它与半小时时区(例如+3:30)有关。我想这也是固定在2.0.8。

http://pgfoundry.org/frs/shownotes.php?release_id=1686一些timestampTZ修复也存在于2.0.10

+0

Devarts PostgreSQL驱动有关于错误'DateTime.MaxValue'(日期存储为10000-01-01代替9999-12-31)与其他DB驱动程序从表中读取时可能产生的异常。 – jgauffin 2011-03-11 11:01:11

+0

是的,我的适配器是'NpgsqlDataAdaptor'。 – Nishan 2011-03-11 11:49:59

+0

我桌子里的日期看起来不错。事实上,我移植了相同的数据在MST时区运行PostgreSQL服务器,发现一切正常。 – Nishan 2011-03-11 11:53:03

相关问题