示例#1
0
        public void PqsqlDataReaderTest12()
        {
            mCmd.CommandText = @"select interval '23 days', timestamp '2038-01-01', timestamptz '2038-01-01 00:00:00+02', date '2038-01-01', time '00:00:00', timetz '23:23:23+02';";

            using (PqsqlDataReader reader = mCmd.ExecuteReader())
            {
                Assert.IsTrue(reader.HasRows);

                reader.Read();

                TimeSpan ts0 = reader.GetTimeSpan(0);
                Assert.AreEqual(TimeSpan.FromDays(23), ts0);

                TimeSpan ts1 = reader.GetTimeSpan(1);
                DateTime dt1 = reader.GetDateTime(1);
                Assert.AreEqual(new DateTime(2038, 01, 01, 0, 0, 0), dt1);
                DateTimeOffset dto1 = reader.GetDateTimeOffset(1);
                Assert.AreEqual(new DateTimeOffset(2038, 01, 01, 0, 0, 0, TimeSpan.Zero), dto1);

                TimeSpan ts2 = reader.GetTimeSpan(2);
                DateTime dt2 = reader.GetDateTime(2);
                Assert.AreEqual(new DateTime(2037, 12, 31, 22, 0, 0), dt2);
                DateTimeOffset dto2 = reader.GetDateTimeOffset(2);
                Assert.AreEqual(new DateTimeOffset(2038, 01, 01, 0, 0, 0, TimeSpan.FromHours(2)), dto2);

                TimeSpan ts3 = reader.GetTimeSpan(3);
                DateTime dt3 = reader.GetDateTime(3);
                Assert.AreEqual(new DateTime(2038, 01, 01, 0, 0, 0), dt3);
                DateTimeOffset dto3 = reader.GetDateTimeOffset(3);
                Assert.AreEqual(new DateTimeOffset(2038, 01, 01, 0, 0, 0, TimeSpan.Zero), dto3);

                TimeSpan ts4 = reader.GetTimeSpan(4);
                Assert.AreEqual(TimeSpan.FromSeconds(0), ts4);
                DateTime dt4 = reader.GetDateTime(4);
                Assert.AreEqual(DateTime.MinValue, dt4);
                DateTimeOffset dto4 = reader.GetDateTimeOffset(4);
                Assert.AreEqual(DateTimeOffset.MinValue, dto4);

                TimeSpan ts5 = reader.GetTimeSpan(5);
                //Assert.AreEqual(TimeSpan.FromHours(21).Add(TimeSpan.FromMinutes(23)).Add(TimeSpan.FromSeconds(23)), ts5);
                DateTime dt5 = reader.GetDateTime(5);
                //Assert.AreEqual(DateTime.MinValue.AddHours(21).AddMinutes(23).AddSeconds(23), dt5);
                DateTimeOffset dto5 = reader.GetDateTimeOffset(5);
                //Assert.AreEqual(new DateTimeOffset(DateTime.MinValue.AddHours(23).AddMinutes(23).AddSeconds(23), TimeSpan.FromHours(2)), dto5);

                reader.Close();
            }
        }
        public void PqsqlTypeRegistryTest2()
        {
            mCmd.CommandText = "select localtimestamp, now()::timestamp, now(), now() at time zone 'UTC', '1999-01-01 00:00:00'::timestamp at time zone 'UTC', '2000-07-01 00:00:00'::timestamp at time zone 'Europe/Vienna'";
            mCmd.CommandType = CommandType.Text;

            PqsqlDataReader reader = mCmd.ExecuteReader();

            bool read = reader.Read();

            Assert.IsTrue(read);

            DateTime       localtimestamp0    = reader.GetDateTime(0);
            DateTimeOffset localtimestampoff0 = reader.GetDateTimeOffset(0);

            DateTime       nownotz1    = reader.GetDateTime(1);
            DateTimeOffset nownotzoff1 = reader.GetDateTimeOffset(1);

            DateTime       nowtz2    = reader.GetDateTime(2);
            DateTimeOffset nowtzoff2 = reader.GetDateTimeOffset(2);

            DateTime       nowutc3    = reader.GetDateTime(3);
            DateTimeOffset nowutcoff3 = reader.GetDateTimeOffset(3);

            DateTime       ts19990101000000_4    = reader.GetDateTime(4);
            DateTimeOffset ts19990101000000_off4 = reader.GetDateTimeOffset(4);

            DateTime       ts20000701000000_5    = reader.GetDateTime(5);
            DateTimeOffset ts20000701000000_off5 = reader.GetDateTimeOffset(5);

            DateTimeOffset off0 = TimeZoneInfo.ConvertTime(new DateTimeOffset(localtimestamp0.Ticks, TimeSpan.Zero), TimeZoneInfo.Local);
            DateTimeOffset off1 = TimeZoneInfo.ConvertTime(new DateTimeOffset(nownotz1.Ticks, TimeSpan.Zero), TimeZoneInfo.Local);
            DateTimeOffset off2 = TimeZoneInfo.ConvertTime(new DateTimeOffset(nowtz2.Ticks, TimeSpan.Zero), TimeZoneInfo.Local);
            DateTimeOffset off3 = TimeZoneInfo.ConvertTime(new DateTimeOffset(nowutc3.Ticks, TimeSpan.Zero), TimeZoneInfo.Local);
            DateTimeOffset off4 = TimeZoneInfo.ConvertTime(new DateTimeOffset(ts19990101000000_4.Ticks, TimeSpan.Zero), TimeZoneInfo.Local);
            DateTimeOffset off5 = TimeZoneInfo.ConvertTime(new DateTimeOffset(ts20000701000000_5.Ticks, TimeSpan.Zero), TimeZoneInfo.Local);

            Assert.AreEqual(localtimestampoff0, off0);
            Assert.AreEqual(nownotzoff1, off1);
            Assert.AreEqual(nowtzoff2, off2);
            Assert.AreEqual(nowutcoff3, off3);
            Assert.AreEqual(ts19990101000000_off4, off4);
            Assert.AreEqual(ts20000701000000_off5, off5);

            read = reader.Read();
            Assert.IsFalse(read);
        }
        public void PqsqlTypeRegistryTest5()
        {
            mCmd.CommandText = "select :ts0,:ts1,:ts2,:ts3,:ts4";
            mCmd.CommandType = CommandType.Text;

            PqsqlParameter p0 = new PqsqlParameter("ts0", DbType.DateTimeOffset, new DateTimeOffset(2016, 1, 1, 0, 0, 0, 0, TimeSpan.Zero));

            mCmd.Parameters.Add(p0);

            PqsqlParameter p1 = new PqsqlParameter
            {
                ParameterName = "ts1",
                PqsqlDbType   = PqsqlDbType.Unknown,               // let PqsqlParameterCollection guess the type
                Value         = new DateTimeOffset(new DateTime(2016, 1, 1, 0, 0, 0, 0, DateTimeKind.Local))
            };

            mCmd.Parameters.Add(p1);

            PqsqlParameter p2 = new PqsqlParameter("ts2", DbType.DateTime, new DateTime(2016, 1, 1, 0, 0, 0, 0, DateTimeKind.Local));

            mCmd.Parameters.Add(p2);

            PqsqlParameter p3 = new PqsqlParameter("ts3", DbType.DateTime, new DateTime(2016, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc));

            mCmd.Parameters.Add(p3);

            PqsqlParameter p4 = new PqsqlParameter("ts4", DbType.DateTime, new DateTime(2016, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));

            mCmd.Parameters.Add(p4);

            PqsqlDataReader reader = mCmd.ExecuteReader();

            bool read = reader.Read();

            Assert.IsTrue(read);

            DateTime       ts0      = reader.GetDateTime(0);
            DateTimeOffset tstz0    = reader.GetDateTimeOffset(0);
            DateTimeOffset tsutc0   = tstz0.ToUniversalTime();
            DateTimeOffset tslocal0 = tstz0.ToLocalTime();

            Assert.AreEqual(ts0, tsutc0.DateTime);

            DateTime       ts1      = reader.GetDateTime(1);
            DateTimeOffset tstz1    = reader.GetDateTimeOffset(1);
            DateTimeOffset tsutc1   = tstz1.ToUniversalTime();
            DateTimeOffset tslocal1 = tstz1.ToLocalTime();

            DateTime       ts2      = reader.GetDateTime(2);
            DateTimeOffset tstz2    = reader.GetDateTimeOffset(2);
            DateTimeOffset tsutc2   = tstz2.ToUniversalTime();
            DateTimeOffset tslocal2 = tstz2.ToLocalTime();

            Assert.AreEqual(ts2, tsutc2.UtcDateTime);
            Assert.AreEqual(ts2.ToLocalTime(), tstz2.LocalDateTime);
            Assert.AreEqual(ts2.ToLocalTime(), tsutc2.LocalDateTime);

            DateTime       ts3      = reader.GetDateTime(3);
            DateTimeOffset tstz3    = reader.GetDateTimeOffset(3);
            DateTimeOffset tsutc3   = tstz3.ToUniversalTime();
            DateTimeOffset tslocal3 = tstz3.ToLocalTime();

            Assert.AreEqual(ts3, tstz3.UtcDateTime);
            Assert.AreEqual(ts3, tsutc3.DateTime);

            DateTime       ts4      = reader.GetDateTime(4);
            DateTimeOffset tstz4    = reader.GetDateTimeOffset(4);
            DateTimeOffset tsutc4   = tstz4.ToUniversalTime();
            DateTimeOffset tslocal4 = tstz4.ToLocalTime();

            Assert.AreEqual(ts4, tstz4.UtcDateTime);
            Assert.AreEqual(ts4, tsutc4.DateTime);

            read = reader.Read();
            Assert.IsFalse(read);
        }