From 9e96c150cb2a0b20611fd588bb350632cafa9e21 Mon Sep 17 00:00:00 2001 From: Ogoun Date: Wed, 8 Jan 2020 23:44:46 +0300 Subject: [PATCH] Upd dbreader extension --- TestApp/HybrydLock.cs | 28 +++++++++++++++++++++ ZeroLevel.SQL/DBReader.cs | 51 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 TestApp/HybrydLock.cs diff --git a/TestApp/HybrydLock.cs b/TestApp/HybrydLock.cs new file mode 100644 index 0000000..abc7bc9 --- /dev/null +++ b/TestApp/HybrydLock.cs @@ -0,0 +1,28 @@ +using System.Threading; + +namespace TestApp +{ + public class HybrydLock + { + private AutoResetEvent _lock = new AutoResetEvent(false); + private volatile int _counter = 0; + + public void Enter() + { + if (Interlocked.Increment(ref _counter) == 1) + { + return; + } + _lock.WaitOne(); + } + + public void Leave() + { + if (Interlocked.Decrement(ref _counter) == 0) + { + return; + } + _lock.Set(); + } + } +} diff --git a/ZeroLevel.SQL/DBReader.cs b/ZeroLevel.SQL/DBReader.cs index 9d23222..99b7af6 100644 --- a/ZeroLevel.SQL/DBReader.cs +++ b/ZeroLevel.SQL/DBReader.cs @@ -33,7 +33,8 @@ namespace ZeroLevel.SqlServer { public static T Read(this DbDataReader reader, int index) { - if (reader[index] == DBNull.Value) return default(T); + if (reader == null) return default; + if (reader[index] == DBNull.Value) return default; Type t; if ((t = Nullable.GetUnderlyingType(typeof(T))) != null) { @@ -43,7 +44,53 @@ namespace ZeroLevel.SqlServer } public static T Read(this DbDataReader reader, string name) { - if (reader[name] == DBNull.Value) return default(T); + if (reader == null) return default; + if (reader[name] == DBNull.Value) return default; + Type t; + if ((t = Nullable.GetUnderlyingType(typeof(T))) != null) + { + return (T)Convert.ChangeType(reader[name], t); + } + return (T)Convert.ChangeType(reader[name], typeof(T)); + } + public static T Read(this IDataReader reader, int index) + { + if (reader == null) return default; + if (reader[index] == DBNull.Value) return default; + Type t; + if ((t = Nullable.GetUnderlyingType(typeof(T))) != null) + { + return (T)Convert.ChangeType(reader[index], t); + } + return (T)Convert.ChangeType(reader[index], typeof(T)); + } + public static T Read(this IDataReader reader, string name) + { + if (reader == null) return default; + if (reader[name] == DBNull.Value) return default; + Type t; + if ((t = Nullable.GetUnderlyingType(typeof(T))) != null) + { + return (T)Convert.ChangeType(reader[name], t); + } + return (T)Convert.ChangeType(reader[name], typeof(T)); + } + + public static T Read(this DataRow reader, int index) + { + if (reader == null) return default; + if (reader.ItemArray[index] == DBNull.Value) return default; + Type t; + if ((t = Nullable.GetUnderlyingType(typeof(T))) != null) + { + return (T)Convert.ChangeType(reader.ItemArray[index], t); + } + return (T)Convert.ChangeType(reader.ItemArray[index], typeof(T)); + } + public static T Read(this DataRow reader, string name) + { + if (reader == null) return default; + if (reader[name] == DBNull.Value) return default; Type t; if ((t = Nullable.GetUnderlyingType(typeof(T))) != null) {