anchor.diff:          | _  -> None 
       | _ -> None 
   
  +module SqlDataReader = 
  +
  +    let internal map mapping (reader: SqlDataReader) = 
  +        reader |> Seq.unfold (fun current -> if current.Read() then Some( mapping reader, current) else None) 
  +
  +    let internal getOption<'a> (key: string) (reader: SqlDataReader) =
  +        let v = reader.[key] 
  +        if v = DbNull then None else Some(unbox<'a> v)
  +        
   type SqlConnection with
   
    //address an issue when regular Dispose on SqlConnection needed for async computation 
  
positive.code:                                 cmd.Connection <- this
                                  use reader = cmd.ExecuteReader()
                                  while reader.Read() do 
                                      let user_type_id = reader.toOption "user_type_id"
                                      let stid = reader.["system_type_id"] |> unbox<byte> |> int
                                      yield {
                                          Column.Name = string reader.["name"]
  
negative.code:         use reader = cmd.ExecuteReader()
  
          while reader.Read() do
              let user_type_id = reader |> SqlDataReader.getOption<int> "user_type_id"
              let system_type_id = reader.["system_type_id"] |> unbox<int>
              yield { 
                  Column.Name = string reader.["name"]
  