8
8
using System . Data ;
9
9
using System . Data . SqlTypes ;
10
10
using Microsoft . Data . SqlClient . Server ;
11
+ using Microsoft . SqlServer . Types ;
11
12
using Xunit ;
12
13
13
14
namespace Microsoft . Data . SqlClient . Tests
@@ -318,6 +319,19 @@ public void GetChar_ThrowsNotSupported()
318
319
Assert . Throws < NotSupportedException > ( ( ) => record . GetChar ( 0 ) ) ;
319
320
}
320
321
322
+ [ Theory ]
323
+ [ ClassData ( typeof ( GetUdtTypeTestData ) ) ]
324
+ public void GetUdt_ReturnsValue ( Type udtType , object value , string serverTypeName )
325
+ {
326
+ SqlMetaData [ ] metadata = new SqlMetaData [ ] { new SqlMetaData ( nameof ( udtType . Name ) , SqlDbType . Udt , udtType , serverTypeName ) } ;
327
+
328
+ SqlDataRecord record = new SqlDataRecord ( metadata ) ;
329
+
330
+ record . SetValue ( 0 , value ) ;
331
+
332
+ Assert . Equal ( value . ToString ( ) , record . GetValue ( 0 ) . ToString ( ) ) ;
333
+ }
334
+
321
335
[ Theory ]
322
336
[ ClassData ( typeof ( GetXXXBadTypeTestData ) ) ]
323
337
public void GetXXX_ThrowsIfBadType ( Func < SqlDataRecord , object > getXXX )
@@ -342,8 +356,8 @@ public void GetXXX_ReturnValue(SqlDbType dbType, object value, Func<SqlDataRecor
342
356
} ;
343
357
SqlDataRecord record = new SqlDataRecord ( metaData ) ;
344
358
record . SetValue ( 0 , value ) ;
359
+ Assert . Equal ( value , record . GetValue ( 0 ) ) ;
345
360
Assert . Equal ( value , getXXX ( record ) ) ;
346
-
347
361
}
348
362
}
349
363
@@ -369,6 +383,21 @@ IEnumerator IEnumerable.GetEnumerator()
369
383
}
370
384
}
371
385
386
+ public class GetUdtTypeTestData : IEnumerable < object [ ] >
387
+ {
388
+ public IEnumerator < object [ ] > GetEnumerator ( )
389
+ {
390
+ yield return new object [ ] { typeof ( SqlGeography ) , SqlGeography . Point ( 43 , - 81 , 4326 ) , "Geography" } ;
391
+ yield return new object [ ] { typeof ( SqlGeometry ) , SqlGeometry . Point ( 43 , - 81 , 4326 ) , "Geometry" } ;
392
+ yield return new object [ ] { typeof ( SqlHierarchyId ) , SqlHierarchyId . Parse ( "/" ) , "HierarchyId" } ;
393
+ }
394
+
395
+ IEnumerator IEnumerable . GetEnumerator ( )
396
+ {
397
+ return GetEnumerator ( ) ;
398
+ }
399
+ }
400
+
372
401
public class GetXXXCheckValueTestData : IEnumerable < object [ ] >
373
402
{
374
403
public IEnumerator < object [ ] > GetEnumerator ( )
@@ -383,6 +412,10 @@ public IEnumerator<object[]> GetEnumerator()
383
412
yield return new object [ ] { SqlDbType . DateTime , DateTime . Now , new Func < SqlDataRecord , object > ( r => r . GetDateTime ( 0 ) ) } ;
384
413
yield return new object [ ] { SqlDbType . DateTimeOffset , new DateTimeOffset ( DateTime . Now ) , new Func < SqlDataRecord , object > ( r => r . GetDateTimeOffset ( 0 ) ) } ;
385
414
yield return new object [ ] { SqlDbType . Time , TimeSpan . FromHours ( 1 ) , new Func < SqlDataRecord , object > ( r => r . GetTimeSpan ( 0 ) ) } ;
415
+ yield return new object [ ] { SqlDbType . Date , DateTime . Now . Date , new Func < SqlDataRecord , object > ( r => r . GetDateTime ( 0 ) ) } ;
416
+ yield return new object [ ] { SqlDbType . Bit , bool . Parse ( bool . TrueString ) , new Func < SqlDataRecord , object > ( r => r . GetBoolean ( 0 ) ) } ;
417
+ yield return new object [ ] { SqlDbType . SmallDateTime , DateTime . Now , new Func < SqlDataRecord , object > ( r => r . GetDateTime ( 0 ) ) } ;
418
+ yield return new object [ ] { SqlDbType . TinyInt , ( byte ) 1 , new Func < SqlDataRecord , object > ( r => r . GetByte ( 0 ) ) } ;
386
419
}
387
420
388
421
IEnumerator IEnumerable . GetEnumerator ( )
0 commit comments