Skip to content

Custom conversions

Jacek edited this page Jul 6, 2017 · 9 revisions

SqlFun allows to intercept parameter creation. That is the moment conversions are applied.
Firstly, the parameter builder function must be defined:

let myParamBuilder (defaultPB: ParamBuilder) (prefix: string) (name: string) (expr: Expression) (names: string list) = 
    if expr.Type |> meetsSomeCriteria
    then
        [
            prefix + name,
            expr,
            fun value (command: IDbCommand) ->
                let param = new SqlClient.SqlParameter()
                param.ParameterName <- "@" + name
                if value <> null then
                    param.Value <- performTypeConversion (value)
                command.Parameters.Add(param)
            ,
            getDefaultValue expr.Type 
        ]
    else
        defaultPB prefix name expr names

Then, instead of defaultParamBuilder, the custom one should be used in configuration code:

let createConnection () = new SqlConnection(connectionString)

let sql commandText = sql createConnection myParamBuilder commandText

let storedproc name = storedproc createConnection myParamBuilder name

let buildQuery ctx = FinalQueryPart(ctx, createConnection, defaultParamBuilder)
Clone this wiki locally