2012-04-25 6 views
1

私には、クエリとインフォメーションデータベースを持つ.aspxページがあります。このクエリはODBC接続を介して行われ、データテーブルに格納されます。次に、このデータテーブルをラジオボタングループのデータソースとして使用します。Informix ODBCクエリで日付フィールドに時刻が追加される

私の問題は、何らかの理由で時間が「午前12:00:00」として、ラジオボタンに追加されていることです。 informixフィールドは時刻を含まない日付フィールドなので、これは奇妙です。要約でだから私はそれが時間なしでそれを返すWebページの外部でクエリを実行した場合...「2012-06-15」

...私は取得していますと、次のとおりです。「2012年6月15日12 :00:00 AM 2012年6月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) ... 

をサーバが(そう1900-01-01は、1日目だった)1899年12月31日以降の日数を表す4バイトの整数として、その値を返します、これはInformixのDATEの内部表現です。

これは、「日付+時刻」の値として扱われています。真夜中は日付に時間的な要素がなかったため、傷の中で塩をこすっています。/pm記法。

これは何が起こっているのクライアント側のトレースを伴います。私の疑惑(ODBCドライバーの知識が限られていること以外には何もありません)は、ODBCドライバーではなく.NETレイヤーで問題が発生していることです。しかし、ODBC層の上にいると、私の専門分野の外に出てしまいます(そして、私はODBCの優れた専門知識を主張しません)。

環境でSQLIDEBUG=2:xyzを使用すると、クライアントコードに問題を切り分けることができます(Windowsの場合はSETNET32で設定する必要があります)。 Windows上で動作する場合(Unix上で動作する場合)、ファイル名はxyz_となり、その後には数字と文字のさまざまなグループが続きます。そのファイルはsqliprintで解析でき、Informixデータサーバーに送信されたものが表示され、クライアントに返されます。サーバーへのルーティング中にSQLがハッキングされていないと仮定すると、日付は単純な日付として返されます。問題はクライアント側にあります。 SQLが途中でハッキングされると、それもクライアント側の問題です。

それは、少なくともデバッグのための出発点を与えます。

はあなたのコードが使用している種類のデータ型で非常に慎重に確認してください。特に、DBMSには時刻情報を含むDATE型があり、その解釈を避ける必要がある場合があります。 SQL標準には、DATE(時間なし)、TIME(日付なし)およびTIMESTAMP(日付と時刻)タイプがあります。

+0

あなたの診断は正しいです。私は 'DATE()'を使って簡単なSQLクエリをテストしました。それはODBCドライバverのようです。 3.70TC1は正しい:私は日付だけを見る。 –

関連する問題