我有一个.aspx页面,其中有查询和informix数据库。此查询通过odbc连接完成,并放入datatable中。然后将此datatable用作单选按钮组的数据源。
我的问题是,由于某种原因,时间被附加到单选按钮上,即"12:00:00 AM“。这很奇怪,因为informix字段是一个不包括时间的日期字段。如果我在网页之外运行查询,它会返回没有时间的查询..."2012-06-15“
总而言之..。
查询如下:
"select DATE(attend_date) as attend_date from soar_major_table where major =? and active<>'N'"创建datatable的代码:
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 ( );
}发布于 2012-04-25 22:41:16
我认为问题出在Informix数据服务器的上游。
在执行以下命令时:
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)类型。
https://stackoverflow.com/questions/10317690
复制相似问题