Mercurial > pub > bltoolkit
comparison Source/Data/Sql/SqlParameter.cs @ 0:f990fcb411a9
Копия текущей версии из github
| author | cin |
|---|---|
| date | Thu, 27 Mar 2014 21:46:09 +0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:f990fcb411a9 |
|---|---|
| 1 using System; | |
| 2 using System.Collections.Generic; | |
| 3 using System.Data; | |
| 4 using System.Text; | |
| 5 | |
| 6 namespace BLToolkit.Data.Sql | |
| 7 { | |
| 8 using Mapping; | |
| 9 | |
| 10 public class SqlParameter : SqlValueBase, ISqlExpression | |
| 11 { | |
| 12 public SqlParameter(Type systemType, string name, object value, MappingSchema mappingSchema) | |
| 13 { | |
| 14 IsQueryParameter = true; | |
| 15 Name = name; | |
| 16 SystemType = systemType; | |
| 17 _value = value; | |
| 18 DbType = DbType.Object; | |
| 19 | |
| 20 if (systemType != null && mappingSchema != null && systemType.IsEnum) | |
| 21 { | |
| 22 } | |
| 23 } | |
| 24 | |
| 25 public SqlParameter(Type systemType, string name, object value, Converter<object,object> valueConverter) | |
| 26 : this(systemType, name, value, (MappingSchema)null) | |
| 27 { | |
| 28 ValueConverter = valueConverter; | |
| 29 } | |
| 30 | |
| 31 [Obsolete] | |
| 32 public SqlParameter(string name, object value) | |
| 33 : this(value == null ? null : value.GetType(), name, value, (MappingSchema)null) | |
| 34 { | |
| 35 } | |
| 36 | |
| 37 [Obsolete] | |
| 38 public SqlParameter(string name, object value, Converter<object,object> valueConverter) | |
| 39 : this(value == null ? null : value.GetType(), name, value, valueConverter) | |
| 40 { | |
| 41 } | |
| 42 | |
| 43 public string Name { get; set; } | |
| 44 public Type SystemType { get; set; } | |
| 45 public bool IsQueryParameter { get; set; } | |
| 46 public DbType DbType { get; set; } | |
| 47 public int DbSize { get; set; } | |
| 48 | |
| 49 #region Overrides | |
| 50 | |
| 51 #if OVERRIDETOSTRING | |
| 52 | |
| 53 public override string ToString() | |
| 54 { | |
| 55 return ((IQueryElement)this).ToString(new StringBuilder(), new Dictionary<IQueryElement,IQueryElement>()).ToString(); | |
| 56 } | |
| 57 | |
| 58 #endif | |
| 59 | |
| 60 #endregion | |
| 61 | |
| 62 #region ISqlExpression Members | |
| 63 | |
| 64 public int Precedence | |
| 65 { | |
| 66 get { return Sql.Precedence.Primary; } | |
| 67 } | |
| 68 | |
| 69 #endregion | |
| 70 | |
| 71 #region ISqlExpressionWalkable Members | |
| 72 | |
| 73 ISqlExpression ISqlExpressionWalkable.Walk(bool skipColumns, Func<ISqlExpression,ISqlExpression> func) | |
| 74 { | |
| 75 return func(this); | |
| 76 } | |
| 77 | |
| 78 #endregion | |
| 79 | |
| 80 #region IEquatable<ISqlExpression> Members | |
| 81 | |
| 82 bool IEquatable<ISqlExpression>.Equals(ISqlExpression other) | |
| 83 { | |
| 84 if (this == other) | |
| 85 return true; | |
| 86 | |
| 87 var p = other as SqlParameter; | |
| 88 return (object)p != null && Name != null && p.Name != null && Name == p.Name && SystemType == p.SystemType; | |
| 89 } | |
| 90 | |
| 91 #endregion | |
| 92 | |
| 93 #region ISqlExpression Members | |
| 94 | |
| 95 public bool CanBeNull() | |
| 96 { | |
| 97 if (SystemType == null && _value == null) | |
| 98 return true; | |
| 99 | |
| 100 return SqlDataType.CanBeNull(SystemType ?? _value.GetType()); | |
| 101 } | |
| 102 | |
| 103 public bool Equals(ISqlExpression other, Func<ISqlExpression,ISqlExpression,bool> comparer) | |
| 104 { | |
| 105 return ((ISqlExpression)this).Equals(other) && comparer(this, other); | |
| 106 } | |
| 107 | |
| 108 #endregion | |
| 109 | |
| 110 #region ICloneableElement Members | |
| 111 | |
| 112 public ICloneableElement Clone(Dictionary<ICloneableElement,ICloneableElement> objectTree, Predicate<ICloneableElement> doClone) | |
| 113 { | |
| 114 if (!doClone(this)) | |
| 115 return this; | |
| 116 | |
| 117 ICloneableElement clone; | |
| 118 | |
| 119 if (!objectTree.TryGetValue(this, out clone)) | |
| 120 { | |
| 121 var p = new SqlParameter(SystemType, Name, _value, ValueConverter) { IsQueryParameter = IsQueryParameter, DbType = DbType, DbSize = DbSize }; | |
| 122 | |
| 123 objectTree.Add(this, clone = p); | |
| 124 } | |
| 125 | |
| 126 return clone; | |
| 127 } | |
| 128 | |
| 129 #endregion | |
| 130 | |
| 131 #region IQueryElement Members | |
| 132 | |
| 133 public QueryElementType ElementType { get { return QueryElementType.SqlParameter; } } | |
| 134 | |
| 135 StringBuilder IQueryElement.ToString(StringBuilder sb, Dictionary<IQueryElement,IQueryElement> dic) | |
| 136 { | |
| 137 return sb | |
| 138 .Append('@') | |
| 139 .Append(Name ?? "parameter") | |
| 140 .Append('[') | |
| 141 .Append(Value ?? "NULL") | |
| 142 .Append(']'); | |
| 143 } | |
| 144 | |
| 145 #endregion | |
| 146 } | |
| 147 } |
