2012-04-25 37 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

相關問題