6
6
using System . Data ;
7
7
using Microsoft . Data . SqlClient . Server ;
8
8
using Xunit ;
9
+ using Xunit . Abstractions ;
10
+ using Xunit . Sdk ;
9
11
10
12
namespace Microsoft . Data . SqlClient . ManualTesting . Tests
11
13
{
@@ -31,9 +33,11 @@ public class UdtDateTimeOffsetTest
31
33
{
32
34
private readonly string _connectionString = null ;
33
35
private readonly string _udtTableType = DataTestUtility . GetUniqueNameForSqlServer ( "DataTimeOffsetTableType" ) ;
36
+ private readonly ITestOutputHelper _testOutputHelper ;
34
37
35
- public UdtDateTimeOffsetTest ( )
38
+ public UdtDateTimeOffsetTest ( ITestOutputHelper testOutputHelper )
36
39
{
40
+ _testOutputHelper = testOutputHelper ;
37
41
_connectionString = DataTestUtility . TCPConnectionString ;
38
42
}
39
43
@@ -74,26 +78,27 @@ public void SelectFromSqlParameterShouldSucceed()
74
78
[ ConditionalFact ( typeof ( DataTestUtility ) , nameof ( DataTestUtility . AreConnStringsSetup ) , nameof ( DataTestUtility . IsNotAzureServer ) , nameof ( DataTestUtility . IsNotAzureSynapse ) ) ]
75
79
public void DateTimeOffsetAllScalesTestShouldSucceed ( )
76
80
{
77
- string tvpTypeName = DataTestUtility . GetUniqueNameForSqlServer ( "tvpType" ) ;
78
-
79
81
using SqlConnection connection = new ( _connectionString ) ;
80
82
connection . Open ( ) ;
81
83
82
- try
84
+ // Use different scale for each test: 0 to 7
85
+ int fromScale = 0 ;
86
+ int toScale = 7 ;
87
+
88
+ for ( int scale = fromScale ; scale <= toScale ; scale ++ )
83
89
{
84
- // Use different scale for each test: 0 to 7
85
- int fromScale = 0 ;
86
- int toScale = 7 ;
90
+ string tvpTypeName = DataTestUtility . GetUniqueNameForSqlServer ( "tvpType" ) ; // Need a unique name per scale, else we get errors. See https://github.com/dotnet/SqlClient/issues/3011
87
91
88
- for ( int scale = fromScale ; scale <= toScale ; scale ++ )
89
- {
90
- DateTimeOffset dateTimeOffset = new DateTimeOffset ( 2024 , 1 , 1 , 23 , 59 , 59 , TimeSpan . Zero ) ;
92
+ DateTimeOffset dateTimeOffset = new DateTimeOffset ( 2024 , 1 , 1 , 23 , 59 , 59 , TimeSpan . Zero ) ;
91
93
92
- // Add sub-second offset corresponding to the scale being tested
93
- TimeSpan subSeconds = TimeSpan . FromTicks ( ( long ) ( TimeSpan . TicksPerSecond / Math . Pow ( 10 , scale ) ) ) ;
94
- dateTimeOffset = dateTimeOffset . Add ( subSeconds ) ;
94
+ // Add sub-second offset corresponding to the scale being tested
95
+ TimeSpan subSeconds = TimeSpan . FromTicks ( ( long ) ( TimeSpan . TicksPerSecond / Math . Pow ( 10 , scale ) ) ) ;
96
+ dateTimeOffset = dateTimeOffset . Add ( subSeconds ) ;
95
97
96
- DataTestUtility . DropUserDefinedType ( connection , tvpTypeName ) ;
98
+ DataTestUtility . DropUserDefinedType ( connection , tvpTypeName ) ;
99
+
100
+ try
101
+ {
97
102
SetupDateTimeOffsetTableType ( connection , tvpTypeName , scale ) ;
98
103
99
104
var param = new SqlParameter
@@ -109,14 +114,24 @@ public void DateTimeOffsetAllScalesTestShouldSucceed()
109
114
{
110
115
cmd . CommandText = "SELECT * FROM @params" ;
111
116
cmd . Parameters . Add ( param ) ;
112
- var result = cmd . ExecuteScalar ( ) ;
113
- Assert . Equal ( dateTimeOffset , result ) ;
117
+
118
+ object result = null ;
119
+ try
120
+ {
121
+ result = cmd . ExecuteScalar ( ) ;
122
+ Assert . Equal ( dateTimeOffset , result ) ;
123
+ }
124
+ catch ( Exception )
125
+ {
126
+ _testOutputHelper . WriteLine ( $ "{ DateTime . UtcNow : O} : Failed for scale { scale } DateTimeOffset: { dateTimeOffset } Result: { result ?? "No result" } ") ;
127
+ throw ;
128
+ }
114
129
}
115
130
}
116
- }
117
- finally
118
- {
119
- DataTestUtility . DropUserDefinedType ( connection , tvpTypeName ) ;
131
+ finally
132
+ {
133
+ DataTestUtility . DropUserDefinedType ( connection , tvpTypeName ) ;
134
+ }
120
135
}
121
136
}
122
137
0 commit comments