Mercurial > pub > bltoolkit
diff Source/DataAccess/SqlQueryInfo.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Source/DataAccess/SqlQueryInfo.cs Thu Mar 27 21:46:09 2014 +0400 @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using System.Data; + +using BLToolkit.Data; +using BLToolkit.Mapping; + +namespace BLToolkit.DataAccess +{ + public class SqlQueryInfo + { + //NOTE Added empty constructor + public SqlQueryInfo() + { + } + + public SqlQueryInfo(ObjectMapper objectMapper) + { + ObjectMapper = objectMapper; + } + + public string QueryText { get; set; } + public ObjectMapper ObjectMapper { get; private set; } + + public Type ObjectType + { + get { return ObjectMapper.TypeAccessor.OriginalType; } + } + + //NOTE Changed from private to protected + protected readonly List<SqlQueryParameterInfo> Parameters = new List<SqlQueryParameterInfo>(); + + //NOTE Changed to virtual + public virtual SqlQueryParameterInfo AddParameter(string parameterName, string fieldName) + { + var parameter = new SqlQueryParameterInfo { ParameterName = parameterName, FieldName = fieldName }; + + parameter.SetMemberMapper(ObjectMapper); + + Parameters.Add(parameter); + + return parameter; + } + + public IDbDataParameter[] GetParameters(DbManager db, object[] key) + { + if (Parameters.Count != key.Length) + throw new DataAccessException("Parameter list does match key list."); + + var parameters = new IDbDataParameter[Parameters.Count]; + + for (var i = 0; i < Parameters.Count; i++) + { + var info = Parameters[i]; + + parameters[i] = db.Parameter(info.ParameterName, key[i]); + } + + return parameters; + } + + public IDbDataParameter[] GetParameters(DbManager db, object obj) + { + var parameters = new IDbDataParameter[Parameters.Count]; + + for (var i = 0; i < Parameters.Count; i++) + { + var info = Parameters[i]; + + //parameters[i] = db.Parameter(info.ParameterName, info.MemberMapper.GetValue(obj)); + + var mmi = info.MemberMapper.MapMemberInfo; + var val = info.MemberMapper.GetValue(obj); + + if (val == null && mmi.Nullable/* && mmi.NullValue == null*/) + { + //replace value with DbNull + val = DBNull.Value; + } + + if (mmi.IsDbTypeSet) + { + parameters[i] = mmi.IsDbSizeSet + ? db.Parameter(info.ParameterName, val, info.MemberMapper.DbType, mmi.DbSize) + : db.Parameter(info.ParameterName, val, info.MemberMapper.DbType); + } + else + { + parameters[i] = val != DBNull.Value + ? db.Parameter(info.ParameterName, val) + : db.Parameter(info.ParameterName, val, info.MemberMapper.GetDbType()); + } + } + + return parameters; + } + + public MemberMapper[] GetMemberMappers() + { + var members = new MemberMapper[Parameters.Count]; + + for (var i = 0; i < Parameters.Count; i++) + members[i] = Parameters[i].MemberMapper; + + return members; + } + } +}