123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451 |
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace ProjectBase.Util
- {
- /// <summary>
- /// 转换IDataReader字段对象的格式辅助类
- /// 可以转换有默认值、可空类型的字段数据
- /// </summary>
- public sealed class SmartDataReader
- {
- private DateTime defaultDate;
- private IDataReader reader;
- /// <summary>
- /// 构造函数,传入IDataReader对象
- /// </summary>
- /// <param name="reader"></param>
- public SmartDataReader(IDataReader reader)
- {
- this.defaultDate = Convert.ToDateTime("01/01/1900 00:00:00");
- this.reader = reader;
- }
- /// <summary>
- /// 继续读取下一个操作
- /// </summary>
- public bool Read()
- {
- return this.reader.Read();
- }
- /// <summary>
- /// 转换为BigInt类型数据
- /// </summary>
- public Int64 GetInt64(string column)
- {
- return GetInt64(column, 0);
- }
- /// <summary>
- /// 转换为Int类型数据
- /// </summary>
- public Int64 GetInt64(string column, Int64 defaultIfNull)
- {
- Int64 data = (reader.IsDBNull(reader.GetOrdinal(column))) ? (Int64)defaultIfNull : Int64.Parse(reader[column].ToString());
- return data;
- }
- /// <summary>
- /// 转换为Int类型数据
- /// </summary>
- public Int64? GetInt64Nullable(string column)
- {
- Int64? data = (reader.IsDBNull(reader.GetOrdinal(column))) ? (Int64?)null : Int64.Parse(reader[column].ToString());
- return data;
- }
- /// <summary>
- /// 转换为Int类型数据
- /// </summary>
- public int GetInt32(string column)
- {
- return GetInt32(column, 0);
- }
- /// <summary>
- /// 转换为Int类型数据
- /// </summary>
- public int GetInt32(string column, int defaultIfNull)
- {
- int data = (reader.IsDBNull(reader.GetOrdinal(column))) ? (int)defaultIfNull : int.Parse(reader[column].ToString());
- return data;
- }
- /// <summary>
- /// 转换为Int类型数据
- /// </summary>
- public int? GetInt32Nullable(string column)
- {
- int? data = (reader.IsDBNull(reader.GetOrdinal(column))) ? (int?)null : int.Parse(reader[column].ToString());
- return data;
- }
- /// <summary>
- /// 转换为Int16类型数据
- /// </summary>
- public short GetInt16(string column)
- {
- return GetInt16(column, 0);
- }
- /// <summary>
- /// 转换为Int16类型数据
- /// </summary>
- public short GetInt16(string column, short defaultIfNull)
- {
- short data = (reader.IsDBNull(reader.GetOrdinal(column))) ? defaultIfNull : short.Parse(reader[column].ToString());
- return data;
- }
- /// <summary>
- /// 转换为Int16类型数据
- /// </summary>
- public short? GetInt16Nullable(string column)
- {
- short? data = (reader.IsDBNull(reader.GetOrdinal(column))) ? (short?)null : short.Parse(reader[column].ToString());
- return data;
- }
- /// <summary>
- /// 转换为byte类型数据
- /// </summary>
- public byte GetByte(string column)
- {
- return GetByte(column, 0);
- }
- /// <summary>
- /// 转换为byte类型数据
- /// </summary>
- public byte GetByte(string column, byte defaultIfNull)
- {
- byte data = (reader.IsDBNull(reader.GetOrdinal(column))) ? defaultIfNull : byte.Parse(reader[column].ToString());
- return data;
- }
- /// <summary>
- /// 转换为byte类型数据
- /// </summary>
- public byte? GetByteNullable(string column)
- {
- byte? data = (reader.IsDBNull(reader.GetOrdinal(column))) ? (byte?)null : byte.Parse(reader[column].ToString());
- return data;
- }
- /// <summary>
- /// 转换为Float类型数据
- /// </summary>
- public float GetFloat(string column)
- {
- return GetFloat(column, 0);
- }
- /// <summary>
- /// 转换为Float类型数据
- /// </summary>
- public float GetFloat(string column, float defaultIfNull)
- {
- float data = (reader.IsDBNull(reader.GetOrdinal(column))) ? defaultIfNull : float.Parse(reader[column].ToString());
- return data;
- }
- /// <summary>
- /// 转换为Float类型数据
- /// </summary>
- public float? GetFloatNullable(string column)
- {
- float? data = (reader.IsDBNull(reader.GetOrdinal(column))) ? (float?)null : float.Parse(reader[column].ToString());
- return data;
- }
- /// <summary>
- /// 转换为Double类型数据
- /// </summary>
- public double GetDouble(string column)
- {
- return GetDouble(column, 0);
- }
- /// <summary>
- /// 转换为Double类型数据
- /// </summary>
- public double GetDouble(string column, double defaultIfNull)
- {
- double data = (reader.IsDBNull(reader.GetOrdinal(column))) ? defaultIfNull : double.Parse(reader[column].ToString());
- return data;
- }
- /// <summary>
- /// 转换为Double类型数据(可空类型)
- /// </summary>
- public double? GetDoubleNullable(string column)
- {
- double? data = (reader.IsDBNull(reader.GetOrdinal(column))) ? (double?)null : double.Parse(reader[column].ToString());
- return data;
- }
- /// <summary>
- /// 转换为Decimal类型数据
- /// </summary>
- public decimal GetDecimal(string column)
- {
- return GetDecimal(column, 0);
- }
- /// <summary>
- /// 转换为Decimal类型数据
- /// </summary>
- public decimal GetDecimal(string column, decimal defaultIfNull)
- {
- decimal data = (reader.IsDBNull(reader.GetOrdinal(column))) ? defaultIfNull : decimal.Parse(reader[column].ToString());
- return data;
- }
- /// <summary>
- /// 转换为Decimal类型数据(可空类型)
- /// </summary>
- public decimal? GetDecimalNullable(string column)
- {
- decimal? data = (reader.IsDBNull(reader.GetOrdinal(column))) ? (decimal?)null : decimal.Parse(reader[column].ToString());
- return data;
- }
- /// <summary>
- /// 转换为Single类型数据
- /// </summary>
- public Single GetSingle(string column)
- {
- return GetSingle(column, 0);
- }
- /// <summary>
- /// 转换为Single类型数据
- /// </summary>
- public Single GetSingle(string column, Single defaultIfNull)
- {
- Single data = (reader.IsDBNull(reader.GetOrdinal(column))) ? defaultIfNull : Single.Parse(reader[column].ToString());
- return data;
- }
- /// <summary>
- /// 转换为Single类型数据(可空类型)
- /// </summary>
- public Single? GetSingleNullable(string column)
- {
- Single? data = (reader.IsDBNull(reader.GetOrdinal(column))) ? (Single?)null : Single.Parse(reader[column].ToString());
- return data;
- }
- /// <summary>
- /// 转换为布尔类型数据
- /// </summary>
- public bool GetBoolean(string column)
- {
- return GetBoolean(column, false);
- }
- /// <summary>
- /// 转换为布尔类型数据
- /// </summary>
- public bool GetBoolean(string column, bool defaultIfNull)
- {
- string str = reader[column].ToString();
- bool result = false;
- bool.TryParse(str, out result);
- bool data = (reader.IsDBNull(reader.GetOrdinal(column))) ? defaultIfNull : result;
- return data;
- }
- /// <summary>
- /// 转换为布尔类型数据(可空类型)
- /// </summary>
- public bool? GetBooleanNullable(string column)
- {
- string str = reader[column].ToString();
- bool result = false;
- bool.TryParse(str, out result);
- bool? data = (reader.IsDBNull(reader.GetOrdinal(column))) ? (bool?)null : result;
- return data;
- }
- /// <summary>
- /// 转换为字符串类型数据
- /// </summary>
- public String GetString(string column)
- {
- return GetString(column, "");
- }
- /// <summary>
- /// 转换为字符串类型数据
- /// </summary>
- public string GetString(string column, string defaultIfNull)
- {
- string data = (reader.IsDBNull(reader.GetOrdinal(column))) ? defaultIfNull : reader[column].ToString();
- return data;
- }
- /// <summary>
- /// 转换为Byte字节数据类型数据
- /// </summary>
- public byte[] GetBytes(string column)
- {
- return GetBytes(column, null);
- }
- /// <summary>
- /// 转换为Byte字节数据类型数据
- /// </summary>
- public byte[] GetBytes(string column, string defaultIfNull)
- {
- //string data = (reader.IsDBNull(reader.GetOrdinal(column))) ? defaultIfNull : reader[column].ToString();
- //return System.Text.Encoding.UTF8.GetBytes(data);
- int ndx = reader.GetOrdinal(column);
- if (!reader.IsDBNull(ndx))
- {
- long size = reader.GetBytes(ndx, 0, null, 0, 0); //get the length of data
- byte[] values = new byte[size];
- int bufferSize = 1024;
- long bytesRead = 0;
- int curPos = 0;
- while (bytesRead < size)
- {
- bytesRead += reader.GetBytes(ndx, curPos, values, curPos, bufferSize);
- curPos += bufferSize;
- }
- return values;
- }
- else
- {
- return null;
- }
- }
- /// <summary>
- /// 转换为Guid类型数据
- /// </summary>
- public Guid GetGuid(string column)
- {
- return GetGuid(column, null);
- }
- /// <summary>
- /// 转换为Guid类型数据
- /// </summary>
- public Guid GetGuid(string column, string defaultIfNull)
- {
- string data = (reader.IsDBNull(reader.GetOrdinal(column))) ? defaultIfNull : reader[column].ToString();
- Guid guid = Guid.Empty;
- if (data != null)
- {
- guid = new Guid(data);
- }
- return guid;
- }
- /// <summary>
- /// 转换为Guid类型数据(可空类型)
- /// </summary>
- public Guid? GetGuidNullable(string column)
- {
- string data = (reader.IsDBNull(reader.GetOrdinal(column))) ? null : reader[column].ToString();
- Guid? guid = null;
- if (data != null)
- {
- guid = new Guid(data);
- }
- return guid;
- }
- /// <summary>
- /// 转换为DateTime类型数据
- /// </summary>
- public DateTime GetDateTime(string column)
- {
- return GetDateTime(column, defaultDate);
- }
- /// <summary>
- /// 转换为DateTime类型数据
- /// </summary>
- public DateTime GetDateTime(string column, DateTime defaultIfNull)
- {
- DateTime data = (reader.IsDBNull(reader.GetOrdinal(column))) ? defaultIfNull : Convert.ToDateTime(reader[column].ToString());
- return data;
- }
- /// <summary>
- /// 转换为可空DateTime类型数据
- /// </summary>
- public DateTime? GetDateTimeNullable(string column)
- {
- DateTime? data = (reader.IsDBNull(reader.GetOrdinal(column))) ? (DateTime?)null : Convert.ToDateTime(reader[column].ToString());
- return data;
- }
- /// <summary>
- /// 判断指定的值是否为Null类型
- /// </summary>
- /// <param name="value">指定的值</param>
- public bool IsNull(object value)
- {
- if (value == null)
- return true;
- if (value is System.Data.SqlTypes.INullable && ((System.Data.SqlTypes.INullable)value).IsNull)
- return true;
- if (value == DBNull.Value)
- return true;
- return false;
- }
- /// <summary>
- /// 转换指定的值为可空类型的值
- /// </summary>
- /// <param name="value">指定的值</param>
- /// <returns></returns>
- public T? ConvertToNullableValue<T>(object value) where T : struct
- {
- if (value == null)
- {
- return null;
- }
- else if (value == DBNull.Value)
- {
- return null;
- }
- else if (value is string && string.IsNullOrEmpty((string)value))
- {
- return null;
- }
- else
- {
- if (!(value is T))
- {
- try
- {
- value = Convert.ChangeType(value, typeof(T));
- }
- catch (Exception e)
- {
- throw new ArgumentException("Value值不是一个有效的类型", "value", e);
- }
- }
- return new T?((T)value);
- }
- }
- }
- }
|