@@ -626,7 +626,54 @@ public virtual int Update(string table, string[] columns, string[] values, strin
626626 return ExecuteNonQuery ( String . Format ( query , table , namesAndValues ) ) ;
627627 }
628628
629- public virtual int Insert ( string table , string [ ] columns , object [ ] values )
629+ public virtual int Update ( string table , string where , Dictionary < string , object > changes )
630+ {
631+ if ( string . IsNullOrEmpty ( table ) ) throw new ArgumentNullException ( "table" ) ;
632+
633+ table = QuoteTableNameIfRequired ( table ) ;
634+
635+ var sets = new StringBuilder ( ) ;
636+
637+ var columns = changes . Keys . ToArray ( ) ;
638+
639+ for ( int i = 0 ; i < columns . Length ; i ++ )
640+ {
641+ var column = columns [ i ] ;
642+ if ( sets . Length > 0 ) sets . Append ( ",\r \n " ) ;
643+ sets . AppendFormat ( "{0} = {1}" , QuoteColumnNameIfRequired ( column ) , GenerateParameterName ( i ) ) ;
644+ }
645+
646+ var query = String . Format ( "UPDATE {0} SET {1} " , table , sets ) ;
647+
648+ if ( ! string . IsNullOrWhiteSpace ( where ) )
649+ {
650+ query += "\r \n WHERE " + where ;
651+ }
652+
653+ using ( IDbCommand command = _connection . CreateCommand ( ) )
654+ {
655+ command . Transaction = _transaction ;
656+ command . CommandText = query ;
657+ command . CommandType = CommandType . Text ;
658+
659+ for ( int paramCount = 0 ; paramCount < columns . Length ; paramCount ++ )
660+ {
661+ var value = changes [ columns [ paramCount ] ] ;
662+
663+ IDbDataParameter parameter = command . CreateParameter ( ) ;
664+
665+ ConfigureParameterWithValue ( parameter , paramCount , value ) ;
666+
667+ parameter . ParameterName = GenerateParameterName ( paramCount ) ;
668+
669+ command . Parameters . Add ( parameter ) ;
670+ }
671+
672+ return command . ExecuteNonQuery ( ) ;
673+ }
674+ }
675+
676+ public virtual int Insert ( string table , string [ ] columns , object [ ] values )
630677 {
631678 if ( string . IsNullOrEmpty ( table ) ) throw new ArgumentNullException ( "table" ) ;
632679 if ( columns == null ) throw new ArgumentNullException ( "columns" ) ;
0 commit comments