Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit e0216b9

Browse files
committed
ParameterizedSqlExpression GetValue handle null when using parameterized statement
dialect provider base GetParamValue should call ToDbValue instead of FromDbValue oracle dialect provider custom ToDbValue fix handling of null in OracleEnumConverter
1 parent 46d4168 commit e0216b9

File tree

4 files changed

+44
-7
lines changed

4 files changed

+44
-7
lines changed

src/ServiceStack.OrmLite.Oracle/Converters/OracleEnumConverter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public override object ToDbValue(Type fieldType, object value)
3939
return null;
4040
enumValue = enumValue.Trim('"');
4141
return enumValue == ""
42-
? "null"
42+
? null
4343
: enumValue;
4444
}
4545
}

src/ServiceStack.OrmLite.Oracle/OracleOrmLiteDialectProvider.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using System.Reflection;
88
using System.Text;
99
using System.Text.RegularExpressions;
10+
using ServiceStack.OrmLite.Converters;
1011
using ServiceStack.OrmLite.Oracle.Converters;
1112

1213
namespace ServiceStack.OrmLite.Oracle
@@ -409,6 +410,40 @@ public override long InsertAndGetLastInsertId<T>(IDbCommand dbCmd)
409410
// return value;
410411
//}
411412

413+
public override object ToDbValue(object value, Type type)
414+
{
415+
if (value == null || value is DBNull)
416+
return null;
417+
418+
if (type.IsEnum)
419+
return EnumConverter.ToDbValue(type, value);
420+
421+
if (type.IsRefType())
422+
return ReferenceTypeConverter.ToDbValue(type, value);
423+
424+
IOrmLiteConverter converter = null;
425+
try
426+
{
427+
if (Converters.TryGetValue(type, out converter))
428+
{
429+
if (type == typeof(DateTimeOffset))
430+
{
431+
return converter.ToQuotedString(type, value);
432+
}
433+
434+
return converter.ToDbValue(type, value);
435+
}
436+
}
437+
catch (Exception ex)
438+
{
439+
Log.Error("Error in {0}.ToDbValue() value '{1}' and Type '{2}'"
440+
.Fmt(converter.GetType().Name, value != null ? value.GetType().Name : "undefined", type.Name), ex);
441+
throw;
442+
}
443+
444+
return base.ToDbValue(value, type);
445+
}
446+
412447
const string IsoDateFormat = "yyyy-MM-dd";
413448
const string IsoTimeFormat = "HH:mm:ss";
414449
const string IsoMillisecondFormat = "fffffff";

src/ServiceStack.OrmLite/Expressions/ParameterizedSqlExpression.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,11 @@ protected virtual void ConvertToPlaceholderAndParameter(ref object right)
3434

3535
public override object GetValue(object value, Type type)
3636
{
37-
return ((!OrmLiteConfig.UseParameterizeSqlExpressions) || SkipParameterizationForThisExpression)
38-
? DialectProvider.GetQuotedValue(value, type)
39-
: DialectProvider.GetParamValue(value, type);
37+
if ((!OrmLiteConfig.UseParameterizeSqlExpressions) || SkipParameterizationForThisExpression)
38+
return DialectProvider.GetQuotedValue(value, type);
39+
40+
var paramValue = DialectProvider.GetParamValue(value, type);
41+
return paramValue ?? "null";
4042
}
4143

4244
protected override void VisitFilter(string operand, object originalLeft, object originalRight, ref object left, ref object right)

src/ServiceStack.OrmLite/OrmLiteDialectProviderBase.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ public virtual object ToDbValue(object value, Type type)
353353
}
354354
catch (Exception ex)
355355
{
356-
Log.Error("Error in {0}.FromDbValue() value '{1}' and Type '{2}'"
356+
Log.Error("Error in {0}.ToDbValue() value '{1}' and Type '{2}'"
357357
.Fmt(converter.GetType().Name, value != null ? value.GetType().Name : "undefined", type.Name), ex);
358358
throw;
359359
}
@@ -365,7 +365,7 @@ public virtual object ToDbValue(object value, Type type)
365365
}
366366
catch (Exception)
367367
{
368-
Log.ErrorFormat("Error FromDbValue trying to convert {0} into {1}", value, type.Name);
368+
Log.ErrorFormat("Error ToDbValue trying to convert {0} into {1}", value, type.Name);
369369
throw;
370370
}
371371
}
@@ -1406,7 +1406,7 @@ public virtual string GetQuotedValue(object value, Type fieldType)
14061406

14071407
public virtual object GetParamValue(object value, Type fieldType)
14081408
{
1409-
return FromDbValue(value, fieldType);
1409+
return ToDbValue(value, fieldType);
14101410
}
14111411

14121412
public virtual string EscapeWildcards(string value)

0 commit comments

Comments
 (0)