例如,当纽约用户输入“2012-12-20 00:00”的DateTime值时,我希望加利福尼亚用户看到完全相同的DateTime值。这些DateTime值不应考虑时区差异,但这就是我看到的情况。目前,SQL Server会将该DateTime作为“2012-12-19 21:00”交付给加利福尼亚用户。请注意,由于从EST到PST的更改而导致的-3小时回滚,现在已经是前一天了(为了本次对话的目的,请忘记DST问题)。
实现原样获取数据,而不是按时区转换,这就是我需要完成的任务。那么您能提供什么建议呢?
以下是需要考虑的一些代码:
这是表格:
CREATE TABLE [dbo].[tblMeterReadings](
[fldMeterReadingsID] [int] IDENTITY(1,1) NOT NULL,
[fldMeterID] [int] NOT NULL,
[fldUser] [varchar](50) NULL,
[fldBy] [varchar](50) NULL,
[fldDateOfReading] [datetime] NULL,
[fldReading] [float] NULL,
[fldIsArchived] [bit] NULL DEFAULT ((0)),
我们有一个名为Sql的类来执行操作,在以下示例中,“sql”是该类的一个对象。调用时使用参数化查询,其中@data0是要存储在SQL DateTime字段中的DateTime对象:
sql.Execute(@"INSERT INTO tblMeterReadings (fldMeterID, fldDateOfReading) VALUES (" + MeterID + ", @data0)", Date);
最终,这将设置一个SqlCommand,分配参数并触发command.ExecuteNonQuery()调用。
现在,要检索日期,我只需将其选择到DataTable中(同样使用我们的Sql类助手):
DataTable myTable = sql.readDataTable(@"SELECT fldMeterID, fldDateOfReading FROM tblMeterReadings");
我看到的是在数据库本身中,日期是"2012-12-20 00:00",正如我所期望的那样,但是当我检查调试中的myTable内容时,我发现该表中的日期是"2012-12-19 21:00"。
数据库是在运行于EST状态的计算机上的SQL Server上创建的。然而,我的计算机设置为PST。因此,在SELECT中DateTime值传递给我的方式有所不同。
我错过了什么?
tblReadings
表的定义。 - Remus Rusanu