@@ -742,43 +742,61 @@ public string SqlColumn(string columnName)
742
742
return DialectProvider . GetQuotedColumnName ( columnName ) ;
743
743
}
744
744
745
+ public virtual IDbDataParameter AddParam ( object value )
746
+ {
747
+ var paramName = Params . Count . ToString ( ) ;
748
+ var paramValue = value ;
749
+
750
+ var parameter = CreateParam ( paramName , paramValue ) ;
751
+ Params . Add ( parameter ) ;
752
+ return parameter ;
753
+ }
754
+
755
+ public virtual void CopyParamsTo ( IDbCommand dbCmd )
756
+ {
757
+ foreach ( var sqlParam in Params )
758
+ {
759
+ dbCmd . Parameters . Add ( sqlParam ) ;
760
+ }
761
+ }
762
+
745
763
public virtual string ToDeleteRowStatement ( )
746
764
{
747
765
return string . Format ( "DELETE FROM {0} {1}" ,
748
766
DialectProvider . GetQuotedTableName ( modelDef ) , WhereExpression ) ;
749
767
}
750
768
751
- public virtual string ToUpdateStatement ( T item , bool excludeDefaults = false )
769
+ public virtual void PrepareUpdateStatement ( IDbCommand dbCmd , T item , bool excludeDefaults = false )
752
770
{
771
+ CopyParamsTo ( dbCmd ) ;
772
+
753
773
var setFields = new StringBuilder ( ) ;
754
774
755
775
foreach ( var fieldDef in modelDef . FieldDefinitions )
756
776
{
757
777
if ( fieldDef . ShouldSkipUpdate ( ) ) continue ;
758
778
if ( fieldDef . IsRowVersion ) continue ;
759
- if ( updateFields . Count > 0
760
- && ! updateFields . Contains ( fieldDef . Name ) ) continue ; // added
779
+ if ( UpdateFields . Count > 0
780
+ && ! UpdateFields . Contains ( fieldDef . Name ) ) continue ; // added
761
781
762
782
var value = fieldDef . GetValue ( item ) ;
763
783
if ( excludeDefaults
764
784
&& ( value == null || ( ! fieldDef . IsNullable && value . Equals ( value . GetType ( ) . GetDefaultValue ( ) ) ) ) )
765
785
continue ;
766
786
767
- fieldDef . GetQuotedValue ( item , DialectProvider ) ;
768
-
769
787
if ( setFields . Length > 0 )
770
788
setFields . Append ( ", " ) ;
771
789
772
790
setFields
773
791
. Append ( DialectProvider . GetQuotedColumnName ( fieldDef . FieldName ) )
774
792
. Append ( "=" )
775
- . Append ( DialectProvider . GetQuotedValue ( value , fieldDef . FieldType ) ) ;
793
+ . Append ( DialectProvider . AddParam ( dbCmd , value ) . ParameterName ) ;
776
794
}
777
795
778
796
if ( setFields . Length == 0 )
779
797
throw new ArgumentException ( "No non-null or non-default values were provided for type: " + typeof ( T ) . Name ) ;
780
798
781
- return string . Format ( "UPDATE {0} SET {1} {2}" ,
799
+ dbCmd . CommandText = string . Format ( "UPDATE {0} SET {1} {2}" ,
782
800
DialectProvider . GetQuotedTableName ( modelDef ) , setFields , WhereExpression ) ;
783
801
}
784
802
0 commit comments