using Microsoft.Data.SqlClient; using System.Data.SqlTypes; namespace Library; public static class SQLExtensions { public static string? String( this SqlDataReader reader , string column_id ) { int column_index = reader.FindColumn( column_id ); if ( column_index < 0 ) return null; return reader.String( column_index ); } public static string? String( this SqlDataReader reader , int column_index ) { if ( reader.IsDBNull( column_index ) ) return null; string? o = reader[ column_index ].ToString( ); if ( o == null ) return null; return o!; } public static string StringSafe( this SqlDataReader reader , string column_id ) { int column_index = reader.FindColumn( column_id ); if ( column_index < 0 ) return ""; return reader.StringSafe( column_index ); } public static string StringSafe( this SqlDataReader reader , int column_index ) { if ( reader.IsDBNull( column_index ) ) return ""; string? o = reader[ column_index ].ToString( ); if ( o == null ) return ""; return o!; } public static DateTime DateTime( this SqlDataReader reader , string column_id ) { int column_index = reader.FindColumn( column_id ); if ( column_index < 0 ) return System.DateTime.MinValue; return reader.DateTime( column_index ); } public static DateTime DateTime( this SqlDataReader reader , int column_index ) { object data_value = reader[ column_index ]; if ( data_value is DateTime date_time_result ) return date_time_result; return System.DateTime.MinValue; } public static int Int( this SqlDataReader reader , string column_id , int fallback = 0 ) { int column_index = reader.FindColumn( column_id ); if ( column_index < 0 ) return fallback; return reader.Int( column_index , fallback ); } public static int Int( this SqlDataReader reader , int column_index , int fallback = 0 ) { object data = reader[ column_index ]; if ( data == null ) return fallback; try { return Convert.ToInt32( data ); } catch { } if ( int.TryParse( data.ToString( ) , out int result ) ) return result; return fallback; } public static long Int64( this SqlDataReader reader , string column_id , long fallback ) { int column_index = reader.FindColumn( column_id ); if ( column_index < 0 ) return fallback; return reader.Int64( column_index , fallback ); } public static long Int64( this SqlDataReader reader , int column_index , long fallback ) { object data = reader[ column_index ]; if ( data == null ) return fallback; try { return Convert.ToInt64( data ); } catch { } if ( long.TryParse( data.ToString( ) , out long result ) ) return result; return fallback; } public static decimal Numeric( this SqlDataReader reader , string column_id , decimal fallback ) { int column_index = reader.FindColumn( column_id ); if ( column_index < 0 ) return fallback; return reader.Numeric( column_index , fallback ); } public static decimal Numeric( this SqlDataReader reader , int column_index , decimal fallback ) { SqlDecimal data = reader.GetSqlDecimal( column_index ); if ( data.IsNull ) return 0; return data.Value; } public static int FindColumn( this SqlDataReader reader , string column_id ) { try { return reader.GetOrdinal( column_id ); } catch ( Exception ) { return -1; } } }