internal string GetLiteralInfo(int literal)
 {
     using (IDBInfoWrapper wrapper = this.IDBInfo())
     {
         OleDbHResult result;
         System.Data.Common.UnsafeNativeMethods.IDBInfo dbInfo = wrapper.Value;
         if (dbInfo == null)
         {
             return(null);
         }
         string str          = null;
         IntPtr ptrZero      = ADP.PtrZero;
         int    literalCount = 0;
         using (new DualCoTaskMem(dbInfo, new int[] { literal }, out literalCount, out ptrZero, out result))
         {
             if (OleDbHResult.DB_E_ERRORSOCCURRED != result)
             {
                 if ((1 == literalCount) && (Marshal.ReadInt32(ptrZero, ODB.OffsetOf_tagDBLITERALINFO_it) == literal))
                 {
                     str = Marshal.PtrToStringUni(Marshal.ReadIntPtr(ptrZero, 0));
                 }
                 if (result < OleDbHResult.S_OK)
                 {
                     this.ProcessResults(result);
                 }
             }
             else
             {
                 SafeNativeMethods.Wrapper.ClearErrorInfo();
             }
         }
         return(str);
     }
 }
 internal bool AddInfoKeywordsToTable(DataTable table, DataColumn keyword)
 {
     using (IDBInfoWrapper wrapper = this.IDBInfo())
     {
         string str;
         System.Data.Common.UnsafeNativeMethods.IDBInfo info = wrapper.Value;
         if (info == null)
         {
             return(false);
         }
         Bid.Trace("<oledb.IDBInfo.GetKeywords|API|OLEDB> %d#\n", base.ObjectID);
         OleDbHResult keywords = info.GetKeywords(out str);
         Bid.Trace("<oledb.IDBInfo.GetKeywords|API|OLEDB|RET> %08X{HRESULT}\n", keywords);
         if (keywords < OleDbHResult.S_OK)
         {
             this.ProcessResults(keywords);
         }
         if (str != null)
         {
             string[] strArray = str.Split(new char[] { ',' });
             for (int i = 0; i < strArray.Length; i++)
             {
                 DataRow row = table.NewRow();
                 row[keyword] = strArray[i];
                 table.Rows.Add(row);
                 row.AcceptChanges();
             }
         }
         return(true);
     }
 }
 internal DataTable BuildInfoLiterals()
 {
     using (IDBInfoWrapper wrapper = this.IDBInfo())
     {
         OleDbHResult result;
         System.Data.Common.UnsafeNativeMethods.IDBInfo dbInfo = wrapper.Value;
         if (dbInfo == null)
         {
             return(null);
         }
         DataTable table = new DataTable("DbInfoLiterals")
         {
             Locale = CultureInfo.InvariantCulture
         };
         DataColumn column6 = new DataColumn("LiteralName", typeof(string));
         DataColumn column5 = new DataColumn("LiteralValue", typeof(string));
         DataColumn column4 = new DataColumn("InvalidChars", typeof(string));
         DataColumn column3 = new DataColumn("InvalidStartingChars", typeof(string));
         DataColumn column2 = new DataColumn("Literal", typeof(int));
         DataColumn column  = new DataColumn("Maxlen", typeof(int));
         table.Columns.Add(column6);
         table.Columns.Add(column5);
         table.Columns.Add(column4);
         table.Columns.Add(column3);
         table.Columns.Add(column2);
         table.Columns.Add(column);
         int    literalCount = 0;
         IntPtr ptrZero      = ADP.PtrZero;
         using (new DualCoTaskMem(dbInfo, null, out literalCount, out ptrZero, out result))
         {
             if (OleDbHResult.DB_E_ERRORSOCCURRED != result)
             {
                 long             num2      = ptrZero.ToInt64();
                 tagDBLITERALINFO structure = new tagDBLITERALINFO();
                 int num = 0;
                 while (num < literalCount)
                 {
                     Marshal.PtrToStructure((IntPtr)num2, structure);
                     DataRow row = table.NewRow();
                     row[column6] = ((OleDbLiteral)structure.it).ToString();
                     row[column5] = structure.pwszLiteralValue;
                     row[column4] = structure.pwszInvalidChars;
                     row[column3] = structure.pwszInvalidStartingChars;
                     row[column2] = structure.it;
                     row[column]  = structure.cchMaxLen;
                     table.Rows.Add(row);
                     row.AcceptChanges();
                     num++;
                     num2 += ODB.SizeOf_tagDBLITERALINFO;
                 }
                 if (result < OleDbHResult.S_OK)
                 {
                     this.ProcessResults(result);
                 }
             }
             else
             {
                 SafeNativeMethods.Wrapper.ClearErrorInfo();
             }
         }
         return(table);
     }
 }