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 } |