OleDbEnumerator.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Data / System / Data / OleDb / OleDbEnumerator.cs / 1305376 / OleDbEnumerator.cs

                            //------------------------------------------------------------------------------ 
// 
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// [....] 
// [....]
//----------------------------------------------------------------------------- 
 
namespace System.Data.OleDb {
 
    using System;
    using System.ComponentModel;
    using System.Data.Common;
    using System.Globalization; 
    using System.Security;
    using System.Security.Permissions; 
 
    public sealed class OleDbEnumerator  {
 
        public OleDbEnumerator() {
        }

        public DataTable GetElements() { 
            OleDbConnection.ExecutePermission.Demand();
 
            DataTable dataTable = new DataTable("MSDAENUM"); // WebData 112482 
            dataTable.Locale = CultureInfo.InvariantCulture;
            OleDbDataReader dataReader = GetRootEnumerator(); 
            OleDbDataAdapter.FillDataTable(dataReader, dataTable);
            return dataTable;
        }
 
        static public OleDbDataReader GetEnumerator(Type type) {
            OleDbConnection.ExecutePermission.Demand(); 
 
            return GetEnumeratorFromType(type);
        } 

        static internal OleDbDataReader GetEnumeratorFromType(Type type) { // WebData 99005
            // will demand security appropriately
            object value = Activator.CreateInstance(type, System.Reflection.BindingFlags.Public|System.Reflection.BindingFlags.Instance, null, null, CultureInfo.InvariantCulture, null); 
            return GetEnumeratorReader(value);
        } 
 
        static private OleDbDataReader GetEnumeratorReader(object value) {
            NativeMethods.ISourcesRowset srcrowset = null; 

            try {
                srcrowset = (NativeMethods.ISourcesRowset) value;
            } 
            catch(InvalidCastException) {
                throw ODB.ISourcesRowsetNotSupported(); 
            } 
            if (null == srcrowset) {
                throw ODB.ISourcesRowsetNotSupported(); 
            }
            value = null; // still held by ISourcesRowset, reused for IRowset

            int propCount = 0; 
            IntPtr propSets = ADP.PtrZero;
 
            Bid.Trace(" IID_IRowset\n"); 
            OleDbHResult hr = srcrowset.GetSourcesRowset(ADP.PtrZero, ODB.IID_IRowset, propCount, propSets, out value);
            Bid.Trace(" %08X{HRESULT}\n", hr); 

            Exception f = OleDbConnection.ProcessResults(hr, null, null);
            if (null != f) {
                throw f; 
            }
 
            OleDbDataReader dataReader = new OleDbDataReader(null, null, 0, CommandBehavior.Default); 
            dataReader.InitializeIRowset(value, ChapterHandle.DB_NULL_HCHAPTER, ADP.RecordsUnaffected);
            dataReader.BuildMetaInfo(); 
            dataReader.HasRowsRead();
            return dataReader;
        }
 
        static public OleDbDataReader GetRootEnumerator() {
            OleDbConnection.ExecutePermission.Demand(); 
 
            IntPtr hscp;
            Bid.ScopeEnter(out hscp, "\n"); 
            try {
                //readonly Guid CLSID_MSDAENUM = new Guid(0xc8b522d0,0x5cf3,0x11ce,0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d);
                //Type msdaenum = Type.GetTypeFromCLSID(CLSID_MSDAENUM, true);
                const string PROGID_MSDAENUM = "MSDAENUM"; 
                Type msdaenum = Type.GetTypeFromProgID(PROGID_MSDAENUM, true);
                return GetEnumeratorFromType(msdaenum); 
            } 
            finally {
                Bid.ScopeLeave(ref hscp); 
            }
        }
    }
} 


// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK