首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Informix ODBC查询在日期字段中追加时间

Informix ODBC查询在日期字段中追加时间
EN

Stack Overflow用户
提问于 2012-04-25 22:22:33
回答 1查看 533关注 0票数 1

我有一个.aspx页面,其中有查询和informix数据库。此查询通过odbc连接完成,并放入datatable中。然后将此datatable用作单选按钮组的数据源。

我的问题是,由于某种原因,时间被附加到单选按钮上,即"12:00:00 AM“。这很奇怪,因为informix字段是一个不包括时间的日期字段。如果我在网页之外运行查询,它会返回没有时间的查询..."2012-06-15“

总而言之..。

查询如下:

代码语言:javascript
复制
"select DATE(attend_date) as attend_date from soar_major_table where major =? and active<>'N'"

创建datatable的代码:

代码语言:javascript
复制
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组的人口:

代码语言:javascript
复制
if ( dt.Rows.Count > 0 )
                {
                    rdoDate.DataSource = dt;

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

                }
EN

回答 1

Stack Overflow用户

发布于 2012-04-25 22:41:16

我认为问题出在Informix数据服务器的上游。

在执行以下命令时:

代码语言:javascript
复制
SELECT DATE(attend_date) ...

服务器将以4字节整数的形式返回该值,表示自1899-12-31以来的天数(因此1900-01-01是第1天),这是Informix中日期的内部表示。

然后,较高层中的某些东西将其视为“日期+时间”值,并假设午夜是因为日期中没有时间部分的时间,然后通过将其格式化为am/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 (date和time)类型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10317690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档