From 3cf4518e1ff9c51646dab56dd5086e1ed03c59b6 Mon Sep 17 00:00:00 2001 From: Marc Gravell Date: Fri, 12 Apr 2024 11:05:01 +0100 Subject: [PATCH] test fix --- Dapper/SqlMapper.cs | 7 +++++- tests/Dapper.Tests/TypeHandlerTests.cs | 35 +++++++++++++++++--------- 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/Dapper/SqlMapper.cs b/Dapper/SqlMapper.cs index f624f1e9..c6374075 100644 --- a/Dapper/SqlMapper.cs +++ b/Dapper/SqlMapper.cs @@ -3926,7 +3926,12 @@ public static void ThrowDataException(Exception ex, int index, IDataReader reade } else { - formattedValue = Convert.ToString(value) + " - " + Type.GetTypeCode(value.GetType()); + formattedValue = Convert.ToString(value) + " - " + Identify(value.GetType()); + } + static string Identify(Type type) + { + var tc = Type.GetTypeCode(type); + return tc == TypeCode.Object ? type.Name : tc.ToString(); } } catch (Exception valEx) diff --git a/tests/Dapper.Tests/TypeHandlerTests.cs b/tests/Dapper.Tests/TypeHandlerTests.cs index 80c3292f..385ffb90 100644 --- a/tests/Dapper.Tests/TypeHandlerTests.cs +++ b/tests/Dapper.Tests/TypeHandlerTests.cs @@ -28,12 +28,18 @@ public void TestChangingDefaultStringTypeMappingToAnsiString() SqlMapper.PurgeQueryCache(); - SqlMapper.AddTypeMap(typeof(string), DbType.AnsiString, true); // Change Default String Handling to AnsiString - var result02 = connection.Query(sql, param).FirstOrDefault(); - Assert.Equal("varchar", result02); + SqlMapper.AddTypeMap(typeof(string), DbType.AnsiString, false); // Change Default String Handling to AnsiString + try + { + var result02 = connection.Query(sql, param).FirstOrDefault(); + Assert.Equal("varchar", result02); - SqlMapper.PurgeQueryCache(); - SqlMapper.AddTypeMap(typeof(string), DbType.String, true); // Restore Default to Unicode String + SqlMapper.PurgeQueryCache(); + } + finally + { + SqlMapper.AddTypeMap(typeof(string), DbType.String, false); // Restore Default to Unicode String + } } [Fact] @@ -46,13 +52,18 @@ public void TestChangingDefaultStringTypeMappingToAnsiStringFirstOrDefault() Assert.Equal("nvarchar", result01); SqlMapper.PurgeQueryCache(); + SqlMapper.AddTypeMap(typeof(string), DbType.AnsiString, false); // Change Default String Handling to AnsiString + try + { + var result02 = connection.QueryFirstOrDefault(sql, param); + Assert.Equal("varchar", result02); - SqlMapper.AddTypeMap(typeof(string), DbType.AnsiString, true); // Change Default String Handling to AnsiString - var result02 = connection.QueryFirstOrDefault(sql, param); - Assert.Equal("varchar", result02); - - SqlMapper.PurgeQueryCache(); - SqlMapper.AddTypeMap(typeof(string), DbType.String, true); // Restore Default to Unicode String + SqlMapper.PurgeQueryCache(); + } + finally + { + SqlMapper.AddTypeMap(typeof(string), DbType.String, false); // Restore Default to Unicode String + } } [Fact] @@ -643,7 +654,7 @@ public void Issue149_TypeMismatch_SequentialAccess() { Guid guid = Guid.Parse("cf0ef7ac-b6fe-4e24-aeda-a2b45bb5654e"); var ex = Assert.ThrowsAny(() => connection.Query("select @guid as Id", new { guid }).First()); - Assert.Equal("Error parsing column 0 (Id=n/a - Unable to cast object of type 'System.Guid' to type 'System.String'.)", ex.Message); + Assert.Equal("Error parsing column 0 (Id=cf0ef7ac-b6fe-4e24-aeda-a2b45bb5654e - Guid)", ex.Message); } public class Issue149_Person { public string? Id { get; set; } }