From 1f4e14b2e973ee7de337fd4866d9a5ceff5cb6d1 Mon Sep 17 00:00:00 2001 From: Lucas Faria Mendes Date: Mon, 30 Mar 2026 10:38:18 -0300 Subject: chore: location --- .../SqlDataReaderHelper.cs | 66 ++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 Codemerx/Gestor.Infrastructure/Gestor.Infrastructure.Helpers/SqlDataReaderHelper.cs (limited to 'Codemerx/Gestor.Infrastructure/Gestor.Infrastructure.Helpers/SqlDataReaderHelper.cs') diff --git a/Codemerx/Gestor.Infrastructure/Gestor.Infrastructure.Helpers/SqlDataReaderHelper.cs b/Codemerx/Gestor.Infrastructure/Gestor.Infrastructure.Helpers/SqlDataReaderHelper.cs new file mode 100644 index 0000000..c4087f8 --- /dev/null +++ b/Codemerx/Gestor.Infrastructure/Gestor.Infrastructure.Helpers/SqlDataReaderHelper.cs @@ -0,0 +1,66 @@ +using System; +using System.Data.Common; +using System.Data.SqlClient; +using System.Diagnostics; +using System.Runtime.CompilerServices; +using System.Threading.Tasks; + +namespace Gestor.Infrastructure.Helpers +{ + internal static class SqlDataReaderHelper + { + public static bool FieldIsNull(this SqlDataReader rd, string fieldName) + { + return rd.IsDBNull(rd.GetOrdinal(fieldName)); + } + + public static async Task FieldIsNullAsync(SqlDataReader rd, string fieldName) + { + return await rd.IsDBNullAsync(rd.GetOrdinal(fieldName)); + } + + public static T GetFieldValue(this SqlDataReader rd, string fieldName, bool normalizeNull = true, bool transformField = true) + { + Type type = rd[fieldName].GetType(); + Type type1 = typeof(T); + if (type == typeof(DBNull)) + { + if (normalizeNull && (!type1.IsGenericType || !(type1.GetGenericTypeDefinition() == typeof(Nullable<>)))) + { + if (type1 == typeof(int) || type1 == typeof(double) || type1 == typeof(decimal) || type1 == typeof(long)) + { + return (T)Convert.ChangeType(0, type1); + } + if (type1 == typeof(DateTime)) + { + return (T)Convert.ChangeType(DateTime.MinValue, type1); + } + if (type1 == typeof(bool)) + { + return (T)Convert.ChangeType(false, type1); + } + } + return default(T); + } + Type underlyingType = Nullable.GetUnderlyingType(type1) ?? type1; + if (type == underlyingType) + { + return (T)rd[fieldName]; + } + if (!transformField) + { + return (T)rd[fieldName]; + } + object item = rd[fieldName]; + if (underlyingType.IsEnum) + { + item = Enum.Parse(underlyingType, item.ToString()); + } + if (type == typeof(string) && underlyingType == typeof(bool)) + { + item = (string)item == "1"; + } + return (T)Convert.ChangeType(item, underlyingType); + } + } +} \ No newline at end of file -- cgit v1.2.3