Commit fa06c306 authored by Marc Gravell's avatar Marc Gravell
parent dc6b077f
......@@ -345,7 +345,7 @@ object ITypeHandler.Parse(Type destinationType, object value)
void ITypeHandler.SetValue(IDbDataParameter parameter, object value)
{
parameter.Value = ((object)value) ?? DBNull.Value;
parameter.Value = SanitizeParameterValue(value);
if (parameter is System.Data.SqlClient.SqlParameter)
{
((System.Data.SqlClient.SqlParameter)parameter).UdtTypeName = udtTypeName;
......@@ -2745,7 +2745,7 @@ public static void PackListParameters(IDbCommand command, string namePrefix, obj
if (FeatureSupport.Get(command.Connection).Arrays)
{
var arrayParm = command.CreateParameter();
arrayParm.Value = value ?? DBNull.Value;
arrayParm.Value = SanitizeParameterValue(value);
arrayParm.ParameterName = namePrefix;
command.Parameters.Add(arrayParm);
}
......@@ -2775,7 +2775,7 @@ public static void PackListParameters(IDbCommand command, string namePrefix, obj
}
else
{
listParam.Value = item ?? DBNull.Value;
listParam.Value = SanitizeParameterValue(item);
command.Parameters.Add(listParam);
}
}
......@@ -2832,7 +2832,34 @@ public static void PackListParameters(IDbCommand command, string namePrefix, obj
}
}
internal static object SanitizeParameterValue(object value)
{
if (value == null) return DBNull.Value;
if (value is Enum)
{
TypeCode typeCode;
if (value is IConvertible)
{
typeCode = ((IConvertible)value).GetTypeCode();
}
else
{
typeCode = TypeExtensions.GetTypeCode(Enum.GetUnderlyingType(value.GetType()));
}
switch (typeCode)
{
case TypeCode.Byte: return (byte)value;
case TypeCode.SByte: return (sbyte)value;
case TypeCode.Int16: return (short)value;
case TypeCode.Int32: return (int)value;
case TypeCode.Int64: return (long)value;
case TypeCode.UInt16: return (ushort)value;
case TypeCode.UInt32: return (uint)value;
case TypeCode.UInt64: return (ulong)value;
}
}
return value;
}
private static IEnumerable<PropertyInfo> FilterParameters(IEnumerable<PropertyInfo> parameters, string sql)
{
return parameters.Where(p => Regex.IsMatch(sql, @"[?@:]" + p.Name + "([^a-z0-9_]+|$)", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.CultureInvariant));
......@@ -4758,7 +4785,7 @@ protected void AddParameters(IDbCommand command, SqlMapper.Identity identity)
p.Direction = param.ParameterDirection;
if (handler == null)
{
p.Value = val ?? DBNull.Value;
p.Value = SqlMapper.SanitizeParameterValue(val);
if (dbType != null && p.DbType != dbType)
{
p.DbType = dbType.Value;
......@@ -5073,7 +5100,7 @@ void SqlMapper.ICustomQueryParameter.AddParameter(IDbCommand command, string nam
}
internal static void Set(IDbDataParameter parameter, DataTable table, string typeName)
{
parameter.Value = (object)table ?? DBNull.Value;
parameter.Value = SqlMapper.SanitizeParameterValue(table);
if (string.IsNullOrEmpty(typeName) && table != null)
{
typeName = SqlMapper.GetTypeName(table);
......@@ -5135,7 +5162,7 @@ public void AddParameter(IDbCommand command, string name)
}
var param = command.CreateParameter();
param.ParameterName = name;
param.Value = (object)Value ?? DBNull.Value;
param.Value = SqlMapper.SanitizeParameterValue(Value);
if (Length == -1 && Value != null && Value.Length <= DefaultLength)
{
param.Size = DefaultLength;
......
......@@ -3208,9 +3208,7 @@ public void LiteralReplacementEnumAndString()
y.Equals(123.45M);
z.Equals(AnotherEnum.A);
}
#if DNXCORE50
[FrameworkFail("https://github.com/dotnet/corefx/issues/1613")]
#endif
public void LiteralReplacementDynamicEnumAndString()
{
var args = new DynamicParameters();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment