Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit ad4321c

Browse files
committed
Merge pull request #465 from yuinlin/FixSqlServerDateTime2FractionalSecondPrecision
fix handling of sqlserver datetime2 fractional second precision
2 parents 45d0183 + 871736d commit ad4321c

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

src/ServiceStack.OrmLite.SqlServer/Converters/SqlServerDateTime2Converter.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Data;
1+
using System;
2+
using System.Data;
23

34
namespace ServiceStack.OrmLite.SqlServer.Converters
45
{
@@ -13,5 +14,10 @@ public override DbType DbType
1314
{
1415
get { return DbType.DateTime2; }
1516
}
17+
18+
public override string ToQuotedString(Type fieldType, object value)
19+
{
20+
return DateTimeFmt((DateTime)value, "yyyyMMdd HH:mm:ss.fffffff");
21+
}
1622
}
1723
}

src/ServiceStack.OrmLite.SqlServerTests/Datetime2Tests.cs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Data.SqlClient;
33
using System.Data.SqlTypes;
4+
using System.Linq;
45
using NUnit.Framework;
56
using ServiceStack.DataAnnotations;
67
using ServiceStack.OrmLite.SqlServer;
@@ -21,7 +22,6 @@ public void datetime_tests__can_use_datetime2()
2122

2223
using (var conn = dbFactory.OpenDbConnection()) {
2324
var test_object_ValidForDatetime2 = Table_for_datetime2_tests.get_test_object_ValidForDatetime2();
24-
var test_object_ValidForNormalDatetime = Table_for_datetime2_tests.get_test_object_ValidForNormalDatetime();
2525

2626
conn.CreateTable<Table_for_datetime2_tests>(true);
2727

@@ -38,10 +38,13 @@ public void datetime_tests__can_use_datetime2()
3838
var fromDb2 = conn.SingleById<Table_for_datetime2_tests>(insertedId);
3939
Assert.AreEqual(test_object_ValidForDatetime2.ToVerifyPrecision.Value.AddYears(1), fromDb2.ToVerifyPrecision);
4040

41-
4241
//check InsertParam
4342
conn.Insert(test_object_ValidForDatetime2);
44-
}
43+
44+
//check select on datetime2 value
45+
var result = conn.Select<Table_for_datetime2_tests>(t => t.ToVerifyPrecision == test_object_ValidForDatetime2.ToVerifyPrecision);
46+
Assert.AreEqual(result.Single().ToVerifyPrecision, test_object_ValidForDatetime2.ToVerifyPrecision);
47+
}
4548
}
4649
[Test]
4750
public void datetime_tests__check_default_behaviour()
@@ -89,10 +92,10 @@ private class Table_for_datetime2_tests
8992
public DateTime? ToVerifyPrecision { get; set; }
9093
public DateTime? NullableDateTimeLeaveItNull { get; set; }
9194

92-
/// <summary>
93-
/// to check datetime(2)'s precision. A regular 'datetime' is not precise enough
94-
/// </summary>
95-
public static readonly DateTime regular_datetime_field_cant_hold_this_exact_moment = new DateTime(2013, 3, 17, 21, 29, 1, 678);
95+
/// <summary>
96+
/// to check datetime(2)'s precision. A regular 'datetime' is not precise enough
97+
/// </summary>
98+
public static readonly DateTime regular_datetime_field_cant_hold_this_exact_moment = new DateTime(2013, 3, 17, 21, 29, 1, 678).AddTicks(1);
9699

97100
public static Table_for_datetime2_tests get_test_object_ValidForDatetime2() { return new Table_for_datetime2_tests { SomeDateTime = new DateTime(1, 1, 1), ToVerifyPrecision = regular_datetime_field_cant_hold_this_exact_moment }; }
98101

0 commit comments

Comments
 (0)