Example #1
0
 internal DualCoTaskMem(UnsafeNativeMethods.IDBSchemaRowset dbSchemaRowset, out int schemaCount, out IntPtr schemaGuids, out IntPtr schemaRestrictions, out OleDbHResult hr) : this()
 {
     Bid.Trace("<oledb.IDBSchemaRowset.GetSchemas|API|OLEDB>\n");
     hr                 = dbSchemaRowset.GetSchemas(out schemaCount, out this.handle, out this.handle2);
     schemaGuids        = base.handle;
     schemaRestrictions = this.handle2;
     Bid.Trace("<oledb.IDBSchemaRowset.GetSchemas|API|OLEDB|RET> %08X{HRESULT}\n", hr);
 }
 public void Dispose()
 {
     object o = this._unknown;
     this._unknown = null;
     this._value = null;
     if (o != null)
     {
         Marshal.ReleaseComObject(o);
     }
 }
Example #3
0
        public void Dispose()
        {
            object unknown = _unknown;

            _unknown = null !;
            _value   = null !;
            if (null != unknown)
            {
                Marshal.ReleaseComObject(unknown);
            }
        }
Example #4
0
        public void Dispose()
        {
            object o = this._unknown;

            this._unknown = null;
            this._value   = null;
            if (o != null)
            {
                Marshal.ReleaseComObject(o);
            }
        }
        internal SchemaSupport[] GetSchemaRowsetInformation()
        {
            OleDbConnectionString constr = ConnectionString;

            SchemaSupport[] supportedSchemas = constr.SchemaSupport;
            if (null != supportedSchemas)
            {
                return(supportedSchemas);
            }
            using (IDBSchemaRowsetWrapper wrapper = IDBSchemaRowset())
            {
                UnsafeNativeMethods.IDBSchemaRowset dbSchemaRowset = wrapper.Value;
                if (null == dbSchemaRowset)
                {
                    return(null); // IDBSchemaRowset not supported
                }

                OleDbHResult hr;
                int          schemaCount        = 0;
                IntPtr       schemaGuids        = ADP.PtrZero;
                IntPtr       schemaRestrictions = ADP.PtrZero;

                using (DualCoTaskMem safehandle = new DualCoTaskMem(dbSchemaRowset, out schemaCount, out schemaGuids, out schemaRestrictions, out hr))
                {
                    dbSchemaRowset = null;
                    if (hr < 0)
                    { // ignore infomsg
                        ProcessResults(hr);
                    }

                    supportedSchemas = new SchemaSupport[schemaCount];
                    if (ADP.PtrZero != schemaGuids)
                    {
                        for (int i = 0, offset = 0; i < supportedSchemas.Length; ++i, offset += ODB.SizeOf_Guid)
                        {
                            IntPtr ptr = ADP.IntPtrOffset(schemaGuids, i * ODB.SizeOf_Guid);
                            supportedSchemas[i]._schemaRowset = (Guid)Marshal.PtrToStructure(ptr, typeof(Guid));
                        }
                    }
                    if (ADP.PtrZero != schemaRestrictions)
                    {
                        for (int i = 0; i < supportedSchemas.Length; ++i)
                        {
                            supportedSchemas[i]._restrictions = Marshal.ReadInt32(schemaRestrictions, i * 4);
                        }
                    }
                }
                constr.SchemaSupport = supportedSchemas;
                return(supportedSchemas);
            }
        }
        internal DataTable GetSchemaRowset(Guid schema, object[] restrictions)
        {
            IntPtr hscp;

            Bid.ScopeEnter(out hscp, "<oledb.OleDbConnectionInternal.GetSchemaRowset|INFO> %d#, schema=%ls, restrictions\n", ObjectID, schema);
            try {
                if (null == restrictions)   // MDAC 62243
                {
                    restrictions = new object[0];
                }
                DataTable dataTable = null;
                using (IDBSchemaRowsetWrapper wrapper = IDBSchemaRowset()) {
                    UnsafeNativeMethods.IDBSchemaRowset dbSchemaRowset = wrapper.Value;
                    if (null == dbSchemaRowset)
                    {
                        throw ODB.SchemaRowsetsNotSupported(Provider);
                    }

                    UnsafeNativeMethods.IRowset rowset = null;
                    OleDbHResult hr;

                    Bid.Trace("<oledb.IDBSchemaRowset.GetRowset|API|OLEDB> %d#\n", ObjectID);
                    hr = dbSchemaRowset.GetRowset(ADP.PtrZero, ref schema, restrictions.Length, restrictions, ref ODB.IID_IRowset, 0, ADP.PtrZero, out rowset);
                    Bid.Trace("<oledb.IDBSchemaRowset.GetRowset|API|OLEDB|RET> %08X{HRESULT}\n", hr);

                    if (hr < 0)   // ignore infomsg
                    {
                        ProcessResults(hr);
                    }

                    if (null != rowset)
                    {
                        using (OleDbDataReader dataReader = new OleDbDataReader(Connection, null, 0, CommandBehavior.Default)) {
                            dataReader.InitializeIRowset(rowset, ChapterHandle.DB_NULL_HCHAPTER, IntPtr.Zero);
                            dataReader.BuildMetaInfo();
                            dataReader.HasRowsRead();

                            dataTable           = new DataTable();
                            dataTable.Locale    = CultureInfo.InvariantCulture;
                            dataTable.TableName = OleDbSchemaGuid.GetTextFromValue(schema);
                            OleDbDataAdapter.FillDataTable(dataReader, dataTable);
                        }
                    }
                    return(dataTable);
                }
            }
            finally {
                Bid.ScopeLeave(ref hscp);
            }
        }
        internal DataTable GetSchemaRowset(Guid schema, object[] restrictions)
        {
            if (null == restrictions)
            {
                restrictions = Array.Empty <object>();
            }
            DataTable dataTable = null;

            using (IDBSchemaRowsetWrapper wrapper = IDBSchemaRowset())
            {
                UnsafeNativeMethods.IDBSchemaRowset dbSchemaRowset = wrapper.Value;
                if (null == dbSchemaRowset)
                {
                    throw ODB.SchemaRowsetsNotSupported(Provider);
                }

                UnsafeNativeMethods.IRowset rowset = null;
                OleDbHResult hr;
                hr = dbSchemaRowset.GetRowset(ADP.PtrZero, ref schema, restrictions.Length, restrictions, ref ODB.IID_IRowset, 0, ADP.PtrZero, out rowset);

                if (hr < 0)
                { // ignore infomsg
                    ProcessResults(hr);
                }

                if (null != rowset)
                {
                    using (OleDbDataReader dataReader = new OleDbDataReader(Connection, null, 0, CommandBehavior.Default))
                    {
                        dataReader.InitializeIRowset(rowset, ChapterHandle.DB_NULL_HCHAPTER, IntPtr.Zero);
                        dataReader.BuildMetaInfo();
                        dataReader.HasRowsRead();

                        dataTable           = new DataTable();
                        dataTable.Locale    = CultureInfo.InvariantCulture;
                        dataTable.TableName = OleDbSchemaGuid.GetTextFromValue(schema);
                        OleDbDataAdapter.FillDataTable(dataReader, dataTable);
                    }
                }
                return(dataTable);
            }
        }
Example #8
0
 // IDBSchemaRowset.GetSchemas
 internal DualCoTaskMem(UnsafeNativeMethods.IDBSchemaRowset dbSchemaRowset, out int schemaCount, out IntPtr schemaGuids, out IntPtr schemaRestrictions, out OleDbHResult hr) : this()
 {
     hr                 = dbSchemaRowset.GetSchemas(out schemaCount, out base.handle, out this.handle2);
     schemaGuids        = base.handle;
     schemaRestrictions = this.handle2;
 }
Example #9
0
 internal IDBSchemaRowsetWrapper(object unknown)
 {
     _unknown = unknown;
     _value   = (unknown as UnsafeNativeMethods.IDBSchemaRowset) !;
 }
Example #10
0
 public void Dispose() {
     object unknown = _unknown;
     _unknown = null;
     _value = null;
     if (null != unknown) {
         Marshal.ReleaseComObject(unknown);
     }
 }
Example #11
0
 internal IDBSchemaRowsetWrapper(object unknown) {
     _unknown = unknown;
     _value = (unknown as UnsafeNativeMethods.IDBSchemaRowset);
 }
 internal IDBSchemaRowsetWrapper(object unknown)
 {
     this._unknown = unknown;
     this._value = unknown as UnsafeNativeMethods.IDBSchemaRowset;
 }
Example #13
0
 internal IDBSchemaRowsetWrapper(object unknown)
 {
     this._unknown = unknown;
     this._value   = unknown as UnsafeNativeMethods.IDBSchemaRowset;
 }