2017-01-07 21:54:51 +08:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Data;
|
|
|
|
|
namespace SqlSugar
|
|
|
|
|
{
|
|
|
|
|
public static partial class IDataRecordExtensions
|
|
|
|
|
{
|
2017-06-25 23:42:53 +08:00
|
|
|
|
|
2017-07-09 21:11:32 +08:00
|
|
|
|
#region Common Extensions
|
2017-06-25 23:42:53 +08:00
|
|
|
|
public static Guid GetStringGuid(this IDataRecord dr, int i)
|
|
|
|
|
{
|
2017-07-09 19:12:41 +08:00
|
|
|
|
var reval = Guid.Parse(dr.GetValue(i).ToString());
|
2017-06-25 23:42:53 +08:00
|
|
|
|
return reval;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static Guid? GetConvertStringGuid(this IDataRecord dr, int i)
|
|
|
|
|
{
|
|
|
|
|
if (dr.IsDBNull(i))
|
|
|
|
|
{
|
|
|
|
|
return Guid.Empty;
|
|
|
|
|
}
|
|
|
|
|
var reval = Guid.Parse(dr.GetValue(i).ToString());
|
|
|
|
|
return reval;
|
|
|
|
|
}
|
|
|
|
|
|
2017-01-07 21:54:51 +08:00
|
|
|
|
public static bool? GetConvertBoolean(this IDataRecord dr, int i)
|
|
|
|
|
{
|
|
|
|
|
var reval = dr.GetBoolean(i);
|
|
|
|
|
return reval;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static byte? GetConvertByte(this IDataRecord dr, int i)
|
|
|
|
|
{
|
|
|
|
|
if (dr.IsDBNull(i))
|
|
|
|
|
{
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
var reval = dr.GetByte(i);
|
|
|
|
|
return reval;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static char? GetConvertChar(this IDataRecord dr, int i)
|
|
|
|
|
{
|
|
|
|
|
if (dr.IsDBNull(i))
|
|
|
|
|
{
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
var reval = dr.GetChar(i);
|
|
|
|
|
return reval;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static DateTime? GetConvertDateTime(this IDataRecord dr, int i)
|
|
|
|
|
{
|
|
|
|
|
if (dr.IsDBNull(i))
|
|
|
|
|
{
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
var reval = dr.GetDateTime(i);
|
|
|
|
|
return reval;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static decimal? GetConvertDecimal(this IDataRecord dr, int i)
|
|
|
|
|
{
|
|
|
|
|
if (dr.IsDBNull(i))
|
|
|
|
|
{
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
var reval = dr.GetDecimal(i);
|
|
|
|
|
return reval;
|
|
|
|
|
}
|
|
|
|
|
|
2017-06-25 23:42:53 +08:00
|
|
|
|
|
2017-01-07 21:54:51 +08:00
|
|
|
|
public static double? GetConvertDouble(this IDataRecord dr, int i)
|
|
|
|
|
{
|
|
|
|
|
if (dr.IsDBNull(i))
|
|
|
|
|
{
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
var reval = dr.GetDouble(i);
|
|
|
|
|
return reval;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static Guid? GetConvertGuid(this IDataRecord dr, int i)
|
|
|
|
|
{
|
|
|
|
|
if (dr.IsDBNull(i))
|
|
|
|
|
{
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
var reval = dr.GetGuid(i);
|
|
|
|
|
return reval;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static short? GetConvertInt16(this IDataRecord dr, int i)
|
|
|
|
|
{
|
|
|
|
|
if (dr.IsDBNull(i))
|
|
|
|
|
{
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
var reval = dr.GetInt16(i);
|
|
|
|
|
return reval;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static Int32? GetConvertInt32(this IDataRecord dr, int i)
|
|
|
|
|
{
|
|
|
|
|
if (dr.IsDBNull(i))
|
|
|
|
|
{
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
var reval = dr.GetInt32(i);
|
|
|
|
|
return reval;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static long? GetConvetInt64(this IDataRecord dr, int i)
|
|
|
|
|
{
|
|
|
|
|
if (dr.IsDBNull(i))
|
|
|
|
|
{
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
var reval = dr.GetInt64(i);
|
|
|
|
|
return reval;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static float? GetConvertFloat(this IDataRecord dr, int i)
|
|
|
|
|
{
|
|
|
|
|
if (dr.IsDBNull(i))
|
|
|
|
|
{
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
var reval = dr.GetFloat(i);
|
|
|
|
|
return reval;
|
|
|
|
|
}
|
|
|
|
|
|
2017-06-07 14:25:33 +08:00
|
|
|
|
public static string GetConvertString(this IDataRecord dr, int i)
|
|
|
|
|
{
|
|
|
|
|
if (dr.IsDBNull(i))
|
|
|
|
|
{
|
|
|
|
|
return null;
|
|
|
|
|
}
|
2017-06-25 23:42:53 +08:00
|
|
|
|
var reval = Convert.ToString(dr.GetValue(i));
|
2017-06-07 14:25:33 +08:00
|
|
|
|
return reval;
|
|
|
|
|
}
|
|
|
|
|
|
2017-01-07 21:54:51 +08:00
|
|
|
|
public static Nullable<T> GetOtherNull<T>(this IDataReader dr, int i) where T : struct
|
|
|
|
|
{
|
|
|
|
|
if (dr.IsDBNull(i))
|
|
|
|
|
{
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
return (T)Convert.ChangeType(dr.GetValue(i), typeof(T));
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2017-06-25 23:42:53 +08:00
|
|
|
|
public static T GetOther<T>(this IDataReader dr, int i)
|
2017-01-07 21:54:51 +08:00
|
|
|
|
{
|
|
|
|
|
return (T)Convert.ChangeType(dr.GetValue(i), typeof(T));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static Nullable<T> GetConvertEnum_Null<T>(this IDataReader dr, int i) where T : struct
|
|
|
|
|
{
|
|
|
|
|
if (dr.IsDBNull(i))
|
|
|
|
|
{
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
object value = dr.GetValue(i);
|
|
|
|
|
T t = (T)Enum.ToObject(typeof(T), value);
|
|
|
|
|
return t;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static T GetEnum<T>(this IDataReader dr, int i) where T : struct
|
|
|
|
|
{
|
|
|
|
|
object value = dr.GetValue(i);
|
|
|
|
|
T t = (T)Enum.ToObject(typeof(T), value);
|
|
|
|
|
return t;
|
|
|
|
|
}
|
2017-04-23 14:46:06 +08:00
|
|
|
|
|
2017-06-25 23:42:53 +08:00
|
|
|
|
public static object GetEntity(this IDataReader dr, SqlSugarClient context)
|
2017-04-23 14:46:06 +08:00
|
|
|
|
{
|
|
|
|
|
return null;
|
|
|
|
|
}
|
2017-07-09 19:12:41 +08:00
|
|
|
|
|
2017-07-09 21:11:32 +08:00
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Sqlite Extensions
|
2017-07-09 19:12:41 +08:00
|
|
|
|
public static Nullable<T> GetSqliteTypeNull<T>(this IDataReader dr, int i) where T : struct
|
|
|
|
|
{
|
2017-08-25 22:25:29 +08:00
|
|
|
|
var type = UtilMethods.GetUnderType(typeof(T));
|
2017-07-09 21:11:32 +08:00
|
|
|
|
if (dr.IsDBNull(i))
|
|
|
|
|
{
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
return SqliteTypeConvert<T>(dr, i, type);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static T GetSqliteType<T>(this IDataReader dr, int i) where T : struct
|
|
|
|
|
{
|
|
|
|
|
var type = typeof(T);
|
|
|
|
|
return SqliteTypeConvert<T>(dr, i, type);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static T SqliteTypeConvert<T>(IDataReader dr, int i, Type type) where T : struct
|
|
|
|
|
{
|
2017-08-25 22:22:12 +08:00
|
|
|
|
if (type.IsIn(UtilConstants.IntType))
|
2017-07-09 19:12:41 +08:00
|
|
|
|
{
|
|
|
|
|
return (T)((object)(dr.GetInt32(i)));
|
|
|
|
|
}
|
2017-08-25 22:22:12 +08:00
|
|
|
|
else if (type == UtilConstants.DateType)
|
2017-07-09 19:12:41 +08:00
|
|
|
|
{
|
|
|
|
|
return (T)Convert.ChangeType(Convert.ToDateTime(dr.GetString(i)), type);
|
|
|
|
|
}
|
2017-08-25 22:22:12 +08:00
|
|
|
|
else if (type == UtilConstants.DecType)
|
2017-07-09 19:12:41 +08:00
|
|
|
|
{
|
2017-07-09 21:11:32 +08:00
|
|
|
|
return (T)Convert.ChangeType(dr.GetDecimal(i), type);
|
2017-07-09 19:12:41 +08:00
|
|
|
|
}
|
2017-08-25 22:22:12 +08:00
|
|
|
|
else if (type == UtilConstants.DobType)
|
2017-07-09 19:12:41 +08:00
|
|
|
|
{
|
2017-07-09 21:11:32 +08:00
|
|
|
|
return (T)Convert.ChangeType(dr.GetDouble(i), type);
|
|
|
|
|
}
|
2017-08-25 22:22:12 +08:00
|
|
|
|
else if (type == UtilConstants.BoolType)
|
2017-07-09 21:11:32 +08:00
|
|
|
|
{
|
|
|
|
|
return (T)Convert.ChangeType(dr.GetBoolean(i), type);
|
|
|
|
|
}
|
2017-08-25 22:22:12 +08:00
|
|
|
|
else if (type == UtilConstants.GuidType)
|
2017-07-09 21:11:32 +08:00
|
|
|
|
{
|
|
|
|
|
string guidString = dr.GetString(i);
|
|
|
|
|
string changeValue = guidString.IsNullOrEmpty() ? Guid.Empty.ToString() : guidString;
|
|
|
|
|
return (T)Convert.ChangeType(Guid.Parse(changeValue), type);
|
2017-07-09 19:12:41 +08:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return (T)Convert.ChangeType((dr.GetString(i)), type);
|
|
|
|
|
}
|
2017-07-09 21:11:32 +08:00
|
|
|
|
}
|
|
|
|
|
#endregion
|
2017-01-07 21:54:51 +08:00
|
|
|
|
}
|
|
|
|
|
}
|