anchor.diff:                  log "datareader dispose"
                   dr.Dispose()}
       
  -let PrintfFormatProc (worker: string * obj list -> 'd)  (query: PrintfFormat<'a, _, _, 'd>) : 'a =
  +let internal PrintfFormatProc (worker: string * obj list -> 'd)  (query: PrintfFormat<'a, _, _, 'd>) : 'a =
       if not (FSharpType.IsFunction typeof<'a>) then
           unbox (worker (query.Value, []))
       else
  
positive.code:         let handler = proc types []
          unbox (FSharpValue.MakeFunction(typeof<'a>, handler))
  
  let sqlProcessor (conn: #IDbConnection) (sql: string, values: obj list) =
      let stripFormatting s =
          let i = ref -1
          let eval (rxMatch: Match) =
  
negative.code:     values |> Seq.iteri createParam
      cmd
  
  let internal sqlProcessorToDataReader a b = 
      let cmd = sqlProcessor a b
      cmd.ExecuteReader()
  
  let internal sqlProcessorToUnit a b =
      let cmd = sqlProcessor a b
      cmd.ExecuteNonQuery() |> ignore
  
  let execReaderF connectionFactory a = PrintfFormatProc (sqlProcessorToDataReader connectionFactory) a
  let execNonQueryF connectionFactory a = PrintfFormatProc (sqlProcessorToUnit connectionFactory) a
  
  let internal prepareCommand (connection: #IDbConnection) (sql: string) (cmdType: CommandType) (parameters: (string * DbType * obj) list) =
      let cmd = connection.CreateCommand()
      cmd.CommandText <- sql
      cmd.CommandType <- cmdType
  