@@ -96,7 +96,7 @@ public SqlCommandBuilder(IDbConnection connection) {
9696 var table = SqlMapper . Instance . GetTable < T > ( ) ;
9797 var idColumn = table . IdentityColumn ?? throw new InvalidOperationException ( "The identity column could not be found." ) ;
9898
99- var parameter = new SqlParameter ( UsePositionalParameters ? "?1" : GetParameterName ( idColumn . Name ) , idColumn . GetValue ( entity ) ) ;
99+ var parameter = new SqlParameter ( UsePositionalParameters ? "?1" : GetParameterName ( idColumn ) , idColumn . GetValue ( entity ) ) ;
100100 var text = $ """
101101 DELETE FROM { GetTableName ( table ) }
102102 WHERE { QuoteIdentifier ( idColumn . Name ) } = { ( UsePositionalParameters ? "?" : parameter . Name ) }
@@ -116,7 +116,7 @@ public SqlCommandBuilder(IDbConnection connection) {
116116 var table = SqlMapper . Instance . GetTable < T > ( ) ;
117117 var idColumn = table . IdentityColumn ?? throw new InvalidOperationException ( "The identity column could not be found." ) ;
118118
119- var parameter = new SqlParameter ( UsePositionalParameters ? "?1" : GetParameterName ( idColumn . Name ) , id ) ;
119+ var parameter = new SqlParameter ( UsePositionalParameters ? "?1" : GetParameterName ( idColumn ) , id ) ;
120120 var text = $ """
121121 SELECT 1
122122 FROM { GetTableName ( table ) }
@@ -145,7 +145,7 @@ SELECT 1
145145
146146 if ( ! fields . Contains ( idColumn . Name ) ) fields . Add ( idColumn . Name ) ;
147147
148- var parameter = new SqlParameter ( UsePositionalParameters ? "?1" : GetParameterName ( idColumn . Name ) , id ) ;
148+ var parameter = new SqlParameter ( UsePositionalParameters ? "?1" : GetParameterName ( idColumn ) , id ) ;
149149 var text = $ """
150150 SELECT { string . Join ( ", " , fields . Select ( QuoteIdentifier ) ) }
151151 FROM { GetTableName ( table ) }
@@ -169,11 +169,11 @@ SELECT 1
169169 var fields = table . Columns . Values . Where ( column => column . CanRead && ! column . IsComputed ) . ToArray ( ) ;
170170 var text = $ """
171171 INSERT INTO { GetTableName ( table ) } ({ string . Join ( ", " , fields . Select ( field => QuoteIdentifier ( field . Name ) ) ) } )
172- VALUES ({ string . Join ( ", " , fields . Select ( field => UsePositionalParameters ? "?" : GetParameterName ( field . Name ) ) ) } )
172+ VALUES ({ string . Join ( ", " , fields . Select ( field => UsePositionalParameters ? "?" : GetParameterName ( field ) ) ) } )
173173 { ( SupportsReturningClause ? $ "RETURNING { QuoteIdentifier ( idColumn . Name ) } " : $ "; SELECT { LastInsertIdFunction } ;") }
174174 """ ;
175175
176- return ( text , [ .. fields . Select ( ( field , index ) => ( UsePositionalParameters ? $ "?{ index + 1 } " : GetParameterName ( field . Name ) , field . GetValue ( entity ) ) ) ] ) ;
176+ return ( text , [ .. fields . Select ( ( field , index ) => ( UsePositionalParameters ? $ "?{ index + 1 } " : GetParameterName ( field ) , field . GetValue ( entity ) ) ) ] ) ;
177177 }
178178
179179 /// <summary>
@@ -194,13 +194,13 @@ SELECT 1
194194
195195 var text = $ """
196196 UPDATE { GetTableName ( table ) }
197- SET { string . Join ( ", " , fields . Select ( field => $ "{ QuoteIdentifier ( field . Name ) } = { ( UsePositionalParameters ? "?" : GetParameterName ( field . Name ) ) } ") ) }
198- WHERE { QuoteIdentifier ( idColumn . Name ) } = { ( UsePositionalParameters ? "?" : GetParameterName ( idColumn . Name ) ) }
197+ SET { string . Join ( ", " , fields . Select ( field => $ "{ QuoteIdentifier ( field . Name ) } = { ( UsePositionalParameters ? "?" : GetParameterName ( field ) ) } ") ) }
198+ WHERE { QuoteIdentifier ( idColumn . Name ) } = { ( UsePositionalParameters ? "?" : GetParameterName ( idColumn ) ) }
199199 """ ;
200200
201201 return ( text , [
202- .. fields . Select ( ( field , index ) => ( UsePositionalParameters ? $ "?{ index + 1 } " : GetParameterName ( field . Name ) , field . GetValue ( entity ) ) ) ,
203- ( GetParameterName ( idColumn . Name ) , idColumn . GetValue ( entity ) )
202+ .. fields . Select ( ( field , index ) => ( UsePositionalParameters ? $ "?{ index + 1 } " : GetParameterName ( field ) , field . GetValue ( entity ) ) ) ,
203+ ( GetParameterName ( idColumn ) , idColumn . GetValue ( entity ) )
204204 ] ) ;
205205 }
206206
@@ -224,11 +224,27 @@ public string UnquoteIdentifier(string quotedIdentifier) {
224224 }
225225
226226 /// <summary>
227- /// Returns the full parameter name corresponding to the specified partial parameter name .
227+ /// Returns the parameter name corresponding to the specified column .
228228 /// </summary>
229- /// <param name="parameterName">The partial name of the parameter.</param>
230- /// <returns>The full parameter name corresponding to the specified partial parameter name.</returns>
231- private string GetParameterName ( string parameterName ) => $ "{ ParameterPrefix } { parameterName } ";
229+ /// <param name="column">The column providing a parameter name.</param>
230+ /// <returns>The parameter name corresponding to the specified column.</returns>
231+ private string GetParameterName ( DbColumnInfo column ) => $ "{ ParameterPrefix } { column . Name } ";
232+
233+ /// <summary>
234+ /// Returns the parameter value corresponding to th
235+ /// </summary>
236+ /// <typeparam name="T"></typeparam>
237+ /// <param name="column"></param>
238+ /// <param name="entity"></param>
239+ /// <returns></returns>
240+ private static object ? GetParameterValue < T > ( DbColumnInfo column , T entity ) where T : new ( ) {
241+ var value = column . GetValue ( entity ) ;
242+ if ( ! column . PropertyType . IsEnum ) return column . GetValue ( entity ) ;
243+ return column . DbType switch {
244+ DbType . AnsiString or DbType . AnsiStringFixedLength or DbType . String or DbType . StringFixedLength => value ? . ToString ( ) ,
245+ _ => value
246+ } ;
247+ }
232248
233249 /// <summary>
234250 /// Returns the fully qualified name corresponding to the specified table.
0 commit comments