2012-04-25 55 views
1

我有一个.aspx页面,它有查询和informix数据库。这个查询是通过一个odbc连接完成的,并被放入一个数据表中。然后,这个数据表被用作单选按钮组的数据源。Informix ODBC Query在日期字段上追加时间

我的问题是,无论何种原因,时间将作为“12:00:00 AM”添加到单选按钮上。这很奇怪,因为informix字段是不包含时间的日期字段。如果我要在网页外部运行查询,它会在没有时间的情况下返回它。“2012-06-15”

因此,总结...我得到的是:“2012/6/15 12 :00:00 AM”和我要的是 “2012/06/15”

查询如下:

"select DATE(attend_date) as attend_date from soar_major_table where major =? and active<>'N'" 

创建的代码数据表:

string connString; 
      connString = ConfigurationManager.ConnectionStrings [ "ERP" ].ConnectionString; 


      OdbcConnection conn = new OdbcConnection (); 
      conn.ConnectionString = connString; 


      string sql = "select DATE(attend_date) as attend_date from soar_major_table where major =? and active<>'N' "; 

OdbcCommand command = new OdbcCommand (); 
      command.CommandText = sql; 
      command.Parameters.Add (new OdbcParameter ("major", major)); 
      command.Connection = conn; 

      DataTable dt = new DataTable (); 


      OdbcDataAdapter dataAdapter = new OdbcDataAdapter (); 


      dataAdapter.SelectCommand = command; 


      try 
      { 

       conn.Open (); 


       dataAdapter.Fill (dt); 
      } 
      finally 
      { 
       if (conn != null && conn.State == ConnectionState.Open) 
       { 

        command.Dispose (); 
        dataAdapter.Dispose (); 
        conn.Close (); 
       } 
      } 

      return dt; 

而且最后是电台btn集团的人口:

if (dt.Rows.Count > 0) 
       { 
        rdoDate.DataSource = dt; 

        rdoDate.DataTextField = "attend_date"; 
        rdoDate.DataValueField = "attend_date"; 
        rdoDate.DataBind (); 

       } 

回答

1

问题是Informix数据服务器的上游,我相信。

当你执行:

SELECT DATE(attend_date) ... 

服务器将返回该值表示自1899年12月31日的天数为4个字节的整数(所以1900-01-01为1天),这是Informix中DATE的内部表示。

然后,更高层中的某些东西将其视为'日期+时间'值,并且假设午夜是时间,因为日期中没有时间分量,然后通过在上午格式化伤口/ pm表示法。

这将涉及客户端追踪正在发生的事情。我的怀疑(没有建立在ODBC驱动程序的有限知识之外的任何东西)是问题发生在.NET层而不是ODBC驱动程序。但是,一旦您位于ODBC层之上,您就超出了我的专业领域(并且我没有在ODBC中拥有丰富的专业知识)。

您可能能够通过在环境中使用SQLIDEBUG=2:xyz将问题与客户端代码隔离(您可能需要使用SETNET32 for Windows进行设置)。如果它可以在Windows上运行(它在Unix上运行),那么你最终会得到一个名称为xyz_的文件,然后是各种数字和字母组。该文件可以通过sqliprint进行分析,并会显示发送给Informix数据服务器并返回给客户端的内容。假设SQL在路由到服务器的时候没有被攻击,那么你会看到返回的日期是一个简单的日期,而问题就是客户端。如果SQL在途中遭到黑客入侵,那么这也是客户端问题。

它至少给出了调试的起点。

仔细查看代码使用的类型的数据类型。特别是,某些DBMS具有包含时间信息的DATE类型,并且您可能需要避免该解释。 SQL标准具有DATE(无时间),TIME(无日期)和TIMESTAMP(日期和时间)类型。

+0

您的诊断是正确的。我用'DATE()'测试了简单的SQL查询,它似乎是ODBC驱动程序版本。 3.70TC1正确:我只看到日期。 – 2012-04-26 06:44:03

相关问题