Пример #1
0
		private static void AddParameters(IDbCommand command, SqlMapper.Identity identity, object parameters)
		{
			var paramInfoGenerator = ParamInfoGenerators.GetOrAdd(parameters.GetType(), type =>
			{
				var index = identity.ForDynamicParameters(type);

				return SqlMapper.CreateParamInfoGenerator(index, true, true);
			});

			paramInfoGenerator(command, parameters);
		}
Пример #2
0
        public override void AddParameters(IDbCommand command, SqlMapper.Identity identity)
        {
            ResetCachedWhereClause();

            if (_templates != null)
            {
                foreach (var template in _templates)
                {
                    var newIdent = identity.ForDynamicParameters(template.GetType());

                    Action<IDbCommand, object> appender;

                    lock (ParamReaderCache)
                    {
                        if (!ParamReaderCache.TryGetValue(newIdent, out appender))
                        {
                            appender = SqlMapper.CreateParamInfoGenerator(newIdent, false, false);
                            ParamReaderCache[newIdent] = appender;
                        }
                    }

                    appender(command, template);
                }
            }

            foreach (var param in Parameters)
            {
                var name = param.Key;

                var add = !((SqlCommand)command).Parameters.Contains(name);

                SqlParameter p;

                if (add)
                {
                    p = ((SqlCommand)command).CreateParameter();
                    p.ParameterName = name;
                }
                else
                {
                    p = ((SqlCommand)command).Parameters[name];
                }

                var val = param.Value.Value;

                p.Value = val ?? DBNull.Value;
                p.Direction = param.Value.ParameterDirection;

                var s = val as string;

                if (s != null)
                {
                    if (s.Length <= 4000)
                        p.Size = 4000;
                }
                if (param.Value.Size != null)
                {
                    p.Size = param.Value.Size.Value;
                }

                p.DbType = (DbType)param.Value.TargetDatabaseType;

                if (add) command.Parameters.Add(p);

                param.Value.AttachedParameter = p;
            }
        }