Skip to content

Commit 980450f

Browse files
committed
Add support for DateTime2 DataType in TimeStamp column
1 parent 0fd036f commit 980450f

File tree

3 files changed

+15
-4
lines changed

3 files changed

+15
-4
lines changed

src/Serilog.Sinks.MSSqlServer/Sinks/MSSqlServer/ColumnOptions/TimeStampColumnOptions.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@ public TimeStampColumnOptions() : base()
2020
}
2121

2222
/// <summary>
23-
/// The TimeStamp column only supports the DateTime and DateTimeOffset data types.
23+
/// The TimeStamp column only supports the DateTime, DateTime2 and DateTimeOffset data types.
2424
/// </summary>
2525
public new SqlDbType DataType
2626
{
2727
get => base.DataType;
2828
set
2929
{
30-
if (value != SqlDbType.DateTime && value != SqlDbType.DateTimeOffset)
31-
throw new ArgumentException("The Standard Column \"TimeStamp\" only supports the DateTime and DateTimeOffset formats.");
30+
if (value != SqlDbType.DateTime && value != SqlDbType.DateTimeOffset && value != SqlDbType.DateTime2)
31+
throw new ArgumentException("The Standard Column \"TimeStamp\" only supports the DateTime, DateTime2 and DateTimeOffset formats.");
3232
base.DataType = value;
3333
}
3434
}

src/Serilog.Sinks.MSSqlServer/Sinks/MSSqlServer/Output/JsonLogEventFormatter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ private void WriteTimeStampIfPresent(LogEvent logEvent, TextWriter output, ref s
124124
output.Write(precedingDelimiter);
125125
precedingDelimiter = _commaDelimiter;
126126
var colData = WritePropertyName(logEvent, output, StandardColumn.TimeStamp);
127-
var value = _columnOptions.TimeStamp.DataType == SqlDbType.DateTime
127+
var value = (_columnOptions.TimeStamp.DataType == SqlDbType.DateTime || _columnOptions.TimeStamp.DataType == SqlDbType.DateTime2)
128128
? ((DateTime)colData.Value).ToString("o", CultureInfo.InvariantCulture)
129129
: ((DateTimeOffset)colData.Value).ToString("o", CultureInfo.InvariantCulture);
130130
JsonValueFormatter.WriteQuotedJsonString(value, output);

test/Serilog.Sinks.MSSqlServer.Tests/Sinks/MSSqlServer/ColumnOptions/TimeStampColumnOptionsTests.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,5 +40,16 @@ public void CannotSetDataTypeNVarChar()
4040
// Act and assert - should throw
4141
Assert.Throws<ArgumentException>(() => options.TimeStamp.DataType = SqlDbType.NVarChar);
4242
}
43+
44+
[Trait("Feature", "#300")]
45+
[Fact]
46+
public void CanSetDataTypeDateTime2()
47+
{
48+
// Arrange
49+
var options = new Serilog.Sinks.MSSqlServer.ColumnOptions();
50+
51+
// Act - should not throw
52+
options.TimeStamp.DataType = SqlDbType.DateTime2;
53+
}
4354
}
4455
}

0 commit comments

Comments
 (0)