public static IEnumerable <IDataRecord> AsDataRecords(this IEnumerable <Guid> ids)
        {
            Guard.AgainstNull(ids, nameof(ids));

            if (ids is null)
            {
                throw new ArgumentNullException(nameof(ids));
            }

            var records = new List <MDSC.SqlDataRecord>();

            var definition = new MDSC.SqlMetaData("ID", SqlDbType.UniqueIdentifier);

            foreach (var id in ids)
            {
                var record = new MDSC.SqlDataRecord(definition);

                record.SetGuid(0, id);

                records.Add(record);
            }

            return(records);
        }
        internal static void FillCompatibleITypedSettersFromRecord(SmiEventSink_Default sink, ITypedSettersV3 setters, SmiMetaData[] metaData, SqlDataRecord record, SmiDefaultFieldsProperty useDefaultValues)
        {
            for (int i = 0; i < metaData.Length; ++i)
            {
                if (null != useDefaultValues && useDefaultValues[i])
                {
                    continue;
                }
                if (record.IsDBNull(i))
                {
                    ValueUtilsSmi.SetDBNull_Unchecked(sink, setters, i);
                }
                else
                {
                    switch (metaData[i].SqlDbType)
                    {
                    case SqlDbType.BigInt:
                        Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.Int64));
                        SetInt64_Unchecked(sink, setters, i, record.GetInt64(i));
                        break;

                    case SqlDbType.Binary:
                        Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.SqlBytes));
                        SetBytes_FromRecord(sink, setters, i, metaData[i], record, 0);
                        break;

                    case SqlDbType.Bit:
                        Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.Boolean));
                        SetBoolean_Unchecked(sink, setters, i, record.GetBoolean(i));
                        break;

                    case SqlDbType.Char:
                        Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.SqlChars));
                        SetChars_FromRecord(sink, setters, i, metaData[i], record, 0);
                        break;

                    case SqlDbType.DateTime:
                        Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.DateTime));
                        SetDateTime_Checked(sink, setters, i, metaData[i], record.GetDateTime(i));
                        break;

                    case SqlDbType.Decimal:
                        Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.SqlDecimal));
                        SetSqlDecimal_Unchecked(sink, setters, i, record.GetSqlDecimal(i));
                        break;

                    case SqlDbType.Float:
                        Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.Double));
                        SetDouble_Unchecked(sink, setters, i, record.GetDouble(i));
                        break;

                    case SqlDbType.Image:
                        Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.SqlBytes));
                        SetBytes_FromRecord(sink, setters, i, metaData[i], record, 0);
                        break;

                    case SqlDbType.Int:
                        Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.Int32));
                        SetInt32_Unchecked(sink, setters, i, record.GetInt32(i));
                        break;

                    case SqlDbType.Money:
                        Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.SqlMoney));
                        SetSqlMoney_Unchecked(sink, setters, i, metaData[i], record.GetSqlMoney(i));
                        break;

                    case SqlDbType.NChar:
                    case SqlDbType.NText:
                    case SqlDbType.NVarChar:
                        Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.SqlChars));
                        SetChars_FromRecord(sink, setters, i, metaData[i], record, 0);
                        break;

                    case SqlDbType.Real:
                        Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.Single));
                        SetSingle_Unchecked(sink, setters, i, record.GetFloat(i));
                        break;

                    case SqlDbType.UniqueIdentifier:
                        Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.Guid));
                        SetGuid_Unchecked(sink, setters, i, record.GetGuid(i));
                        break;

                    case SqlDbType.SmallDateTime:
                        Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.DateTime));
                        SetDateTime_Checked(sink, setters, i, metaData[i], record.GetDateTime(i));
                        break;

                    case SqlDbType.SmallInt:
                        Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.Int16));
                        SetInt16_Unchecked(sink, setters, i, record.GetInt16(i));
                        break;

                    case SqlDbType.SmallMoney:
                        Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.SqlMoney));
                        SetSqlMoney_Checked(sink, setters, i, metaData[i], record.GetSqlMoney(i));
                        break;

                    case SqlDbType.Text:
                        Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.SqlChars));
                        SetChars_FromRecord(sink, setters, i, metaData[i], record, 0);
                        break;

                    case SqlDbType.Timestamp:
                        Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.SqlBytes));
                        SetBytes_FromRecord(sink, setters, i, metaData[i], record, 0);
                        break;

                    case SqlDbType.TinyInt:
                        Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.Byte));
                        SetByte_Unchecked(sink, setters, i, record.GetByte(i));
                        break;

                    case SqlDbType.VarBinary:
                        Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.SqlBytes));
                        SetBytes_FromRecord(sink, setters, i, metaData[i], record, 0);
                        break;

                    case SqlDbType.VarChar:
                        Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.String));
                        SetChars_FromRecord(sink, setters, i, metaData[i], record, 0);
                        break;

                    case SqlDbType.Xml:
                        Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.SqlXml));
                        SetSqlXml_Unchecked(sink, setters, i, record.GetSqlXml(i));        // perf improvement?
                        break;

                    case SqlDbType.Variant:
                        object o = record.GetSqlValue(i);
                        ExtendedClrTypeCode typeCode = MetaDataUtilsSmi.DetermineExtendedTypeCode(o);
                        SetCompatibleValue(sink, setters, i, metaData[i], o, typeCode, 0);
                        break;

                    case SqlDbType.Udt:
                        Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.SqlBytes));
                        SetBytes_FromRecord(sink, setters, i, metaData[i], record, 0);
                        break;

                    default:
                        Debug.Assert(false, "unsupported DbType:" + metaData[i].SqlDbType.ToString());
                        throw ADP.NotSupported();
                    }
                }
            }
        }
 internal static void FillCompatibleITypedSettersFromRecord(SmiEventSink_Default sink, ITypedSettersV3 setters, SmiMetaData[] metaData, SqlDataRecord record)
 {
     FillCompatibleITypedSettersFromRecord(sink, setters, metaData, record, null);
 }