System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 35528d62caf2ec31fc7749e7a62d820c3231a94a:


0000: ef bb bf 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .../************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20  ************. * 
0040: 41 44 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61  ADO.NET 2.0 Data
0050: 20 50 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51   Provider for SQ
0060: 4c 69 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58  Lite Version 3.X
0070: 0a 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52  . * Written by R
0080: 6f 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72  obert Simpson (r
0090: 6f 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c  obert@blackcastl
00a0: 65 73 6f 66 74 2e 63 6f 6d 29 0a 20 2a 20 0a 20  esoft.com). * . 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0a 20 2a 2a 2a 2a 2a 2a 2a 2a   risk!. ********
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2f 0a 0a 6e 61 6d 65 73 70 61 63 65 20 53 79 73  /..namespace Sys
0130: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 0a  tem.Data.SQLite.
0140: 7b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d  {.  using System
0150: 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d  ;.  using System
0160: 2e 44 61 74 61 3b 0a 20 20 75 73 69 6e 67 20 53  .Data;.  using S
0170: 79 73 74 65 6d 2e 44 61 74 61 2e 43 6f 6d 6d 6f  ystem.Data.Commo
0180: 6e 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65  n;.  using Syste
0190: 6d 2e 43 6f 6c 6c 65 63 74 69 6f 6e 73 2e 47 65  m.Collections.Ge
01a0: 6e 65 72 69 63 3b 0a 0a 20 20 2f 2f 2f 20 3c 73  neric;..  /// <s
01b0: 75 6d 6d 61 72 79 3e 0a 20 20 2f 2f 2f 20 53 51  ummary>.  /// SQ
01c0: 4c 69 74 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  Lite implementat
01d0: 69 6f 6e 20 6f 66 20 44 62 44 61 74 61 52 65 61  ion of DbDataRea
01e0: 64 65 72 2e 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d  der..  /// </sum
01f0: 6d 61 72 79 3e 0a 20 20 70 75 62 6c 69 63 20 73  mary>.  public s
0200: 65 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69  ealed class SQLi
0210: 74 65 44 61 74 61 52 65 61 64 65 72 20 3a 20 44  teDataReader : D
0220: 62 44 61 74 61 52 65 61 64 65 72 0a 20 20 7b 0a  bDataReader.  {.
0230: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0240: 3e 0a 20 20 20 20 2f 2f 2f 20 55 6e 64 65 72 6c  >.    /// Underl
0250: 79 69 6e 67 20 63 6f 6d 6d 61 6e 64 20 74 68 69  ying command thi
0260: 73 20 72 65 61 64 65 72 20 69 73 20 61 74 74 61  s reader is atta
0270: 63 68 65 64 20 74 6f 0a 20 20 20 20 2f 2f 2f 20  ched to.    /// 
0280: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70  </summary>.    p
0290: 72 69 76 61 74 65 20 53 51 4c 69 74 65 43 6f 6d  rivate SQLiteCom
02a0: 6d 61 6e 64 20 20 20 5f 63 6f 6d 6d 61 6e 64 3b  mand   _command;
02b0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
02c0: 79 3e 0a 20 20 20 20 2f 2f 2f 20 49 6e 64 65 78  y>.    /// Index
02d0: 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
02e0: 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 74 68 65  statement in the
02f0: 20 63 6f 6d 6d 61 6e 64 20 62 65 69 6e 67 20 70   command being p
0300: 72 6f 63 65 73 73 65 64 0a 20 20 20 20 2f 2f 2f  rocessed.    ///
0310: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
0320: 70 72 69 76 61 74 65 20 69 6e 74 20 20 20 20 20  private int     
0330: 20 20 20 20 20 20 20 20 5f 61 63 74 69 76 65 53          _activeS
0340: 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 3b 0a 20  tatementIndex;. 
0350: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0360: 0a 20 20 20 20 2f 2f 2f 20 43 75 72 72 65 6e 74  .    /// Current
0370: 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67   statement being
0380: 20 52 65 61 64 28 29 0a 20 20 20 20 2f 2f 2f 20   Read().    /// 
0390: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70  </summary>.    p
03a0: 72 69 76 61 74 65 20 53 51 4c 69 74 65 53 74 61  rivate SQLiteSta
03b0: 74 65 6d 65 6e 74 20 5f 61 63 74 69 76 65 53 74  tement _activeSt
03c0: 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 2f 2f 2f  atement;.    ///
03d0: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
03e0: 2f 2f 20 53 74 61 74 65 20 6f 66 20 74 68 65 20  // State of the 
03f0: 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d 65 6e  current statemen
0400: 74 20 62 65 69 6e 67 20 70 72 6f 63 65 73 73 65  t being processe
0410: 64 2e 0a 20 20 20 20 2f 2f 2f 20 2d 31 20 3d 20  d..    /// -1 = 
0420: 46 69 72 73 74 20 53 74 65 70 28 29 20 65 78 65  First Step() exe
0430: 63 75 74 65 64 2c 20 73 6f 20 74 68 65 20 66 69  cuted, so the fi
0440: 72 73 74 20 52 65 61 64 28 29 20 77 69 6c 6c 20  rst Read() will 
0450: 62 65 20 69 67 6e 6f 72 65 64 0a 20 20 20 20 2f  be ignored.    /
0460: 2f 2f 20 20 30 20 3d 20 41 63 74 69 76 65 6c 79  //  0 = Actively
0470: 20 72 65 61 64 69 6e 67 0a 20 20 20 20 2f 2f 2f   reading.    ///
0480: 20 20 31 20 3d 20 46 69 6e 69 73 68 65 64 20 72    1 = Finished r
0490: 65 61 64 69 6e 67 0a 20 20 20 20 2f 2f 2f 20 20  eading.    ///  
04a0: 32 20 3d 20 4e 6f 6e 2d 72 6f 77 2d 72 65 74 75  2 = Non-row-retu
04b0: 72 6e 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 2c  rning statement,
04c0: 20 6e 6f 20 72 65 63 6f 72 64 73 0a 20 20 20 20   no records.    
04d0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
04e0: 20 20 20 70 72 69 76 61 74 65 20 69 6e 74 20 20     private int  
04f0: 20 20 20 20 20 20 20 20 20 20 20 5f 72 65 61 64             _read
0500: 69 6e 67 53 74 61 74 65 3b 0a 20 20 20 20 2f 2f  ingState;.    //
0510: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
0520: 2f 2f 2f 20 4e 75 6d 62 65 72 20 6f 66 20 72 65  /// Number of re
0530: 63 6f 72 64 73 20 61 66 66 65 63 74 65 64 20 62  cords affected b
0540: 79 20 74 68 65 20 69 6e 73 65 72 74 2f 75 70 64  y the insert/upd
0550: 61 74 65 20 73 74 61 74 65 6d 65 6e 74 73 20 65  ate statements e
0560: 78 65 63 75 74 65 64 20 6f 6e 20 74 68 65 20 63  xecuted on the c
0570: 6f 6d 6d 61 6e 64 0a 20 20 20 20 2f 2f 2f 20 3c  ommand.    /// <
0580: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70 72  /summary>.    pr
0590: 69 76 61 74 65 20 69 6e 74 20 20 20 20 20 20 20  ivate int       
05a0: 20 20 20 20 20 20 5f 72 6f 77 73 41 66 66 65 63        _rowsAffec
05b0: 74 65 64 3b 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ted;.    /// <su
05c0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 43  mmary>.    /// C
05d0: 6f 75 6e 74 20 6f 66 20 66 69 65 6c 64 73 20 28  ount of fields (
05e0: 63 6f 6c 75 6d 6e 73 29 20 69 6e 20 74 68 65 20  columns) in the 
05f0: 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20 73 74  row-returning st
0600: 61 74 65 6d 65 6e 74 20 63 75 72 72 65 6e 74 6c  atement currentl
0610: 79 20 62 65 69 6e 67 20 70 72 6f 63 65 73 73 65  y being processe
0620: 64 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  d.    /// </summ
0630: 61 72 79 3e 0a 20 20 20 20 70 72 69 76 61 74 65  ary>.    private
0640: 20 69 6e 74 20 20 20 20 20 20 20 20 20 20 20 20   int            
0650: 20 5f 66 69 65 6c 64 43 6f 75 6e 74 3b 0a 20 20   _fieldCount;.  
0660: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
0670: 20 20 20 20 2f 2f 2f 20 44 61 74 61 74 79 70 65      /// Datatype
0680: 73 20 6f 66 20 61 63 74 69 76 65 20 66 69 65 6c  s of active fiel
0690: 64 73 20 28 63 6f 6c 75 6d 6e 73 29 20 69 6e 20  ds (columns) in 
06a0: 74 68 65 20 63 75 72 72 65 6e 74 20 73 74 61 74  the current stat
06b0: 65 6d 65 6e 74 2c 20 75 73 65 64 20 66 6f 72 20  ement, used for 
06c0: 74 79 70 65 2d 72 65 73 74 72 69 63 74 69 6e 67  type-restricting
06d0: 20 64 61 74 61 0a 20 20 20 20 2f 2f 2f 20 3c 2f   data.    /// </
06e0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70 72 69  summary>.    pri
06f0: 76 61 74 65 20 53 51 4c 69 74 65 54 79 70 65 5b  vate SQLiteType[
0700: 5d 20 20 20 20 5f 66 69 65 6c 64 54 79 70 65 41  ]    _fieldTypeA
0710: 72 72 61 79 3b 0a 0a 20 20 20 20 2f 2f 2f 20 3c  rray;..    /// <
0720: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
0730: 20 54 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66   The behavior of
0740: 20 74 68 65 20 64 61 74 61 72 65 61 64 65 72 0a   the datareader.
0750: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0760: 79 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20 43  y>.    private C
0770: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 5f  ommandBehavior _
0780: 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 3b  commandBehavior;
0790: 0a 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53  ..    internal S
07a0: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 28  QLiteDataReader(
07b0: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6d  SQLiteCommand cm
07c0: 64 2c 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69  d, CommandBehavi
07d0: 6f 72 20 62 65 68 61 76 65 29 0a 20 20 20 20 7b  or behave).    {
07e0: 0a 20 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 20  .      _command 
07f0: 3d 20 63 6d 64 3b 0a 20 20 20 20 20 20 5f 63 6f  = cmd;.      _co
0800: 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 3d 20  mmandBehavior = 
0810: 62 65 68 61 76 65 3b 0a 20 20 20 20 20 20 49 6e  behave;.      In
0820: 69 74 69 61 6c 69 7a 65 28 29 3b 0a 0a 20 20 20  itialize();..   
0830: 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61 6e 64 20     if (_command 
0840: 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20  != null).       
0850: 20 4e 65 78 74 52 65 73 75 6c 74 28 29 3b 0a 20   NextResult();. 
0860: 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 65 72 6e     }..    intern
0870: 61 6c 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69  al void Initiali
0880: 7a 65 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  ze().    {.     
0890: 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
08a0: 74 49 6e 64 65 78 20 3d 20 2d 31 3b 0a 20 20 20  tIndex = -1;.   
08b0: 20 20 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d     _activeStatem
08c0: 65 6e 74 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20  ent = null;.    
08d0: 20 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20    _rowsAffected 
08e0: 3d 20 2d 31 3b 0a 20 20 20 20 20 20 5f 66 69 65  = -1;.      _fie
08f0: 6c 64 43 6f 75 6e 74 20 3d 20 2d 31 3b 0a 20 20  ldCount = -1;.  
0900: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
0910: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 43  mmary>.    /// C
0920: 6c 6f 73 65 73 20 74 68 65 20 64 61 74 61 72 65  loses the datare
0930: 61 64 65 72 2c 20 70 6f 74 65 6e 74 69 61 6c 6c  ader, potentiall
0940: 79 20 63 6c 6f 73 69 6e 67 20 74 68 65 20 63 6f  y closing the co
0950: 6e 6e 65 63 74 69 6f 6e 20 61 73 20 77 65 6c 6c  nnection as well
0960: 20 69 66 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76   if CommandBehav
0970: 69 6f 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65 63 74  ior.CloseConnect
0980: 69 6f 6e 20 77 61 73 20 73 70 65 63 69 66 69 65  ion was specifie
0990: 64 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  d..    /// </sum
09a0: 6d 61 72 79 3e 0a 20 20 20 20 70 75 62 6c 69 63  mary>.    public
09b0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
09c0: 6c 6f 73 65 28 29 0a 20 20 20 20 7b 0a 20 20 20  lose().    {.   
09d0: 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61 6e 64 20     if (_command 
09e0: 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 7b  != null).      {
09f0: 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28  .        while (
0a00: 4e 65 78 74 52 65 73 75 6c 74 28 29 29 0a 20 20  NextResult()).  
0a10: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
0a20: 7d 0a 20 20 20 20 20 20 20 20 5f 63 6f 6d 6d 61  }.        _comma
0a30: 6e 64 2e 43 6c 65 61 72 44 61 74 61 52 65 61 64  nd.ClearDataRead
0a40: 65 72 28 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  er();.      }.. 
0a50: 20 20 20 20 20 2f 2f 20 49 66 20 74 68 65 20 64       // If the d
0a60: 61 74 61 72 65 61 64 65 72 27 73 20 62 65 68 61  atareader's beha
0a70: 76 69 6f 72 20 69 6e 63 6c 75 64 65 73 20 63 6c  vior includes cl
0a80: 6f 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63  osing the connec
0a90: 74 69 6f 6e 2c 20 74 68 65 6e 20 64 6f 20 73 6f  tion, then do so
0aa0: 20 68 65 72 65 2e 0a 20 20 20 20 20 20 69 66 20   here..      if 
0ab0: 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69  ((_commandBehavi
0ac0: 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61  or & CommandBeha
0ad0: 76 69 6f 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65 63  vior.CloseConnec
0ae0: 74 69 6f 6e 29 20 21 3d 20 30 29 0a 20 20 20 20  tion) != 0).    
0af0: 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e      _command.Con
0b00: 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b  nection.Close();
0b10: 0a 0a 20 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64  ..      _command
0b20: 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 5f   = null;.      _
0b30: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 20  activeStatement 
0b40: 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 5f 66  = null;.      _f
0b50: 69 65 6c 64 54 79 70 65 41 72 72 61 79 20 3d 20  ieldTypeArray = 
0b60: 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  null;.    }..   
0b70: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
0b80: 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20     /// Disposes 
0b90: 74 68 65 20 64 61 74 61 72 65 61 64 65 72 2e 20  the datareader. 
0ba0: 20 43 61 6c 6c 73 20 43 6c 6f 73 65 28 29 20 74   Calls Close() t
0bb0: 6f 20 65 6e 73 75 72 65 20 65 76 65 72 79 74 68  o ensure everyth
0bc0: 69 6e 67 20 69 73 20 63 6c 65 61 6e 65 64 20 75  ing is cleaned u
0bd0: 70 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  p..    /// </sum
0be0: 6d 61 72 79 3e 0a 20 20 20 20 70 75 62 6c 69 63  mary>.    public
0bf0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 44   override void D
0c00: 69 73 70 6f 73 65 28 29 0a 20 20 20 20 7b 0a 20  ispose().    {. 
0c10: 20 20 20 20 20 43 6c 6f 73 65 28 29 3b 0a 20 20       Close();.  
0c20: 20 20 20 20 47 43 2e 53 75 70 70 72 65 73 73 46      GC.SuppressF
0c30: 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b 0a 20  inalize(this);. 
0c40: 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73     }..    /// <s
0c50: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
0c60: 54 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 20 69  Throw an error i
0c70: 66 20 74 68 65 20 64 61 74 61 72 65 61 64 65 72  f the datareader
0c80: 20 69 73 20 63 6c 6f 73 65 64 0a 20 20 20 20 2f   is closed.    /
0c90: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
0ca0: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
0cb0: 68 65 63 6b 43 6c 6f 73 65 64 28 29 0a 20 20 20  heckClosed().   
0cc0: 20 7b 0a 20 20 20 20 20 20 69 66 20 28 5f 63 6f   {.      if (_co
0cd0: 6d 6d 61 6e 64 20 3d 3d 20 6e 75 6c 6c 29 0a 20  mmand == null). 
0ce0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
0cf0: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
0d00: 6e 45 78 63 65 70 74 69 6f 6e 28 22 44 61 74 61  nException("Data
0d10: 52 65 61 64 65 72 20 68 61 73 20 62 65 65 6e 20  Reader has been 
0d20: 63 6c 6f 73 65 64 22 29 3b 0a 20 20 20 20 7d 0a  closed");.    }.
0d30: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0d40: 79 3e 0a 20 20 20 20 2f 2f 2f 20 45 6e 75 6d 65  y>.    /// Enume
0d50: 72 61 74 6f 72 20 73 75 70 70 6f 72 74 0a 20 20  rator support.  
0d60: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0d70: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
0d80: 73 3e 52 65 74 75 72 6e 73 20 61 20 44 62 45 6e  s>Returns a DbEn
0d90: 75 6d 65 72 61 74 6f 72 20 6f 62 6a 65 63 74 2e  umerator object.
0da0: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70  </returns>.    p
0db0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 43  ublic override C
0dc0: 6f 6c 6c 65 63 74 69 6f 6e 73 2e 49 45 6e 75 6d  ollections.IEnum
0dd0: 65 72 61 74 6f 72 20 47 65 74 45 6e 75 6d 65 72  erator GetEnumer
0de0: 61 74 6f 72 28 29 0a 20 20 20 20 7b 0a 20 20 20  ator().    {.   
0df0: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 44 62     return new Db
0e00: 45 6e 75 6d 65 72 61 74 6f 72 28 74 68 69 73 29  Enumerator(this)
0e10: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  ;.    }..    ///
0e20: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
0e30: 2f 2f 20 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  // .    /// </su
0e40: 6d 6d 61 72 79 3e 0a 20 20 20 20 70 75 62 6c 69  mmary>.    publi
0e50: 63 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 44  c override int D
0e60: 65 70 74 68 0a 20 20 20 20 7b 0a 20 20 20 20 20  epth.    {.     
0e70: 20 67 65 74 0a 20 20 20 20 20 20 7b 0a 20 20 20   get.      {.   
0e80: 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64       CheckClosed
0e90: 28 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75  ();.        retu
0ea0: 72 6e 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rn 0;.      }.  
0eb0: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
0ec0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 0a  mmary>.    /// .
0ed0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0ee0: 79 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  y>.    public ov
0ef0: 65 72 72 69 64 65 20 69 6e 74 20 46 69 65 6c 64  erride int Field
0f00: 43 6f 75 6e 74 0a 20 20 20 20 7b 0a 20 20 20 20  Count.    {.    
0f10: 20 20 67 65 74 0a 20 20 20 20 20 20 7b 0a 20 20    get.      {.  
0f20: 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65        CheckClose
0f30: 64 28 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74  d();.        ret
0f40: 75 72 6e 20 5f 66 69 65 6c 64 43 6f 75 6e 74 3b  urn _fieldCount;
0f50: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a  .      }.    }..
0f60: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0f70: 3e 0a 20 20 20 20 2f 2f 2f 20 53 51 4c 69 74 65  >.    /// SQLite
0f80: 20 69 73 20 69 6e 68 65 72 65 6e 74 6c 79 20 75   is inherently u
0f90: 6e 2d 74 79 70 65 64 2e 20 20 41 6c 6c 20 64 61  n-typed.  All da
0fa0: 74 61 74 79 70 65 73 20 69 6e 20 53 51 4c 69 74  tatypes in SQLit
0fb0: 65 20 61 72 65 20 6e 61 74 69 76 65 6c 79 20 73  e are natively s
0fc0: 74 72 69 6e 67 73 2e 20 20 54 68 65 20 64 65 66  trings.  The def
0fd0: 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 65 20 63  inition of the c
0fe0: 6f 6c 75 6d 6e 73 20 6f 66 20 61 20 74 61 62 6c  olumns of a tabl
0ff0: 65 0a 20 20 20 20 2f 2f 2f 20 61 6e 64 20 74 68  e.    /// and th
1000: 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 72 65  e affinity of re
1010: 74 75 72 6e 65 64 20 74 79 70 65 73 20 61 72 65  turned types are
1020: 20 61 6c 6c 20 77 65 20 68 61 76 65 20 74 6f 20   all we have to 
1030: 67 6f 20 6f 6e 20 74 6f 20 74 79 70 65 2d 72 65  go on to type-re
1040: 73 74 72 69 63 74 20 64 61 74 61 20 69 6e 20 74  strict data in t
1050: 68 65 20 72 65 61 64 65 72 2e 0a 20 20 20 20 2f  he reader..    /
1060: 2f 2f 20 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  // .    /// This
1070: 20 66 75 6e 63 74 69 6f 6e 20 61 74 74 65 6d 70   function attemp
1080: 74 73 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  ts to verify tha
1090: 74 20 74 68 65 20 74 79 70 65 20 6f 66 20 64 61  t the type of da
10a0: 74 61 20 62 65 69 6e 67 20 72 65 71 75 65 73 74  ta being request
10b0: 65 64 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6d  ed of a column m
10c0: 61 74 63 68 65 73 20 74 68 65 20 64 61 74 61 74  atches the datat
10d0: 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ype of the colum
10e0: 6e 2e 20 20 49 6e 0a 20 20 20 20 2f 2f 2f 20 74  n.  In.    /// t
10f0: 68 65 20 63 61 73 65 20 6f 66 20 63 6f 6c 75 6d  he case of colum
1100: 6e 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20  ns that are not 
1110: 62 61 63 6b 65 64 20 69 6e 74 6f 20 61 20 74 61  backed into a ta
1120: 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2c 20  ble definition, 
1130: 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20 6d 61  we attempt to ma
1140: 74 63 68 20 75 70 20 74 68 65 20 61 66 66 69 6e  tch up the affin
1150: 69 74 79 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  ity of a column 
1160: 28 69 6e 74 2c 20 64 6f 75 62 6c 65 2c 20 73 74  (int, double, st
1170: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 29 0a 20 20  ring or blob).  
1180: 20 20 2f 2f 2f 20 74 6f 20 61 20 73 65 74 20 6f    /// to a set o
1190: 66 20 6b 6e 6f 77 6e 20 74 79 70 65 73 20 74 68  f known types th
11a0: 61 74 20 63 6c 6f 73 65 6c 79 20 6d 61 74 63 68  at closely match
11b0: 20 74 68 61 74 20 61 66 66 69 6e 69 74 79 2e 20   that affinity. 
11c0: 20 49 74 27 73 20 6e 6f 74 20 61 6e 20 65 78 61   It's not an exa
11d0: 63 74 20 73 63 69 65 6e 63 65 2c 20 62 75 74 20  ct science, but 
11e0: 69 74 73 20 74 68 65 20 62 65 73 74 20 77 65 20  its the best we 
11f0: 63 61 6e 20 64 6f 2e 0a 20 20 20 20 2f 2f 2f 20  can do..    /// 
1200: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f  </summary>.    /
1210: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0a 20 20 20  // <returns>.   
1220: 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69   /// This functi
1230: 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 49 6e 76  on throws an Inv
1240: 61 6c 69 64 54 79 70 65 43 61 73 74 28 29 20 65  alidTypeCast() e
1250: 78 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20  xception if the 
1260: 72 65 71 75 65 73 74 65 64 20 74 79 70 65 20 64  requested type d
1270: 6f 65 73 6e 27 74 20 6d 61 74 63 68 20 74 68 65  oesn't match the
1280: 20 63 6f 6c 75 6d 6e 27 73 20 64 65 66 69 6e 69   column's defini
1290: 74 69 6f 6e 20 6f 72 20 61 66 66 69 6e 69 74 79  tion or affinity
12a0: 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
12b0: 72 6e 73 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  rns>.    /// <pa
12c0: 72 61 6d 20 6e 61 6d 65 3d 22 6f 72 64 69 6e 61  ram name="ordina
12d0: 6c 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  l">The index of 
12e0: 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 74 79  the column to ty
12f0: 70 65 2d 63 68 65 63 6b 3c 2f 70 61 72 61 6d 3e  pe-check</param>
1300: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1310: 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68 65 20 74  name="typ">The t
1320: 79 70 65 20 77 65 20 77 61 6e 74 20 74 6f 20 67  ype we want to g
1330: 65 74 20 6f 75 74 20 6f 66 20 74 68 65 20 63 6f  et out of the co
1340: 6c 75 6d 6e 3c 2f 70 61 72 61 6d 3e 0a 20 20 20  lumn</param>.   
1350: 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 56 65   private void Ve
1360: 72 69 66 79 54 79 70 65 28 69 6e 74 20 6f 72 64  rifyType(int ord
1370: 69 6e 61 6c 2c 20 44 62 54 79 70 65 20 74 79 70  inal, DbType typ
1380: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 53 51  ).    {.      SQ
1390: 4c 69 74 65 54 79 70 65 20 74 20 3d 20 47 65 74  LiteType t = Get
13a0: 53 51 4c 69 74 65 54 79 70 65 28 6f 72 64 69 6e  SQLiteType(ordin
13b0: 61 6c 29 3b 0a 0a 20 20 20 20 20 20 69 66 20 28  al);..      if (
13c0: 74 2e 54 79 70 65 20 3d 3d 20 74 79 70 29 20 72  t.Type == typ) r
13d0: 65 74 75 72 6e 3b 0a 0a 20 20 20 20 20 20 69 66  eturn;..      if
13e0: 20 28 74 2e 54 79 70 65 20 21 3d 20 44 62 54 79   (t.Type != DbTy
13f0: 70 65 2e 4f 62 6a 65 63 74 29 0a 20 20 20 20 20  pe.Object).     
1400: 20 7b 0a 20 20 20 20 20 20 20 20 2f 2f 20 43 6f   {.        // Co
1410: 65 72 63 61 62 6c 65 20 74 79 70 65 2c 20 75 73  ercable type, us
1420: 75 61 6c 6c 79 20 61 20 6c 69 74 65 72 61 6c 20  ually a literal 
1430: 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 0a 20 20 20  of some kind.   
1440: 20 20 20 20 20 73 77 69 74 63 68 20 28 5f 66 69       switch (_fi
1450: 65 6c 64 54 79 70 65 41 72 72 61 79 5b 6f 72 64  eldTypeArray[ord
1460: 69 6e 61 6c 5d 2e 41 66 66 69 6e 69 74 79 29 0a  inal].Affinity).
1470: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
1480: 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66      case TypeAff
1490: 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0a 20 20 20  inity.Int64:.   
14a0: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
14b0: 20 3d 3d 20 44 62 54 79 70 65 2e 49 6e 74 31 36   == DbType.Int16
14c0: 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  ) return;.      
14d0: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
14e0: 20 44 62 54 79 70 65 2e 49 6e 74 33 32 29 20 72   DbType.Int32) r
14f0: 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 20  eturn;.         
1500: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62     if (typ == Db
1510: 54 79 70 65 2e 49 6e 74 36 34 29 20 72 65 74 75  Type.Int64) retu
1520: 72 6e 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  rn;.            
1530: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
1540: 65 2e 42 6f 6f 6c 65 61 6e 29 20 72 65 74 75 72  e.Boolean) retur
1550: 6e 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  n;.            i
1560: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
1570: 2e 42 79 74 65 29 20 72 65 74 75 72 6e 3b 0a 20  .Byte) return;. 
1580: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
1590: 3b 0a 20 20 20 20 20 20 20 20 20 20 63 61 73 65  ;.          case
15a0: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f   TypeAffinity.Do
15b0: 75 62 6c 65 3a 0a 20 20 20 20 20 20 20 20 20 20  uble:.          
15c0: 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54    if (typ == DbT
15d0: 79 70 65 2e 53 69 6e 67 6c 65 29 20 72 65 74 75  ype.Single) retu
15e0: 72 6e 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  rn;.            
15f0: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
1600: 65 2e 44 6f 75 62 6c 65 29 20 72 65 74 75 72 6e  e.Double) return
1610: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ;.            if
1620: 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e   (typ == DbType.
1630: 44 65 63 69 6d 61 6c 29 20 72 65 74 75 72 6e 3b  Decimal) return;
1640: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65  .            bre
1650: 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 63 61  ak;.          ca
1660: 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
1670: 54 65 78 74 3a 0a 20 20 20 20 20 20 20 20 20 20  Text:.          
1680: 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54    if (typ == DbT
1690: 79 70 65 2e 53 42 79 74 65 29 20 72 65 74 75 72  ype.SByte) retur
16a0: 6e 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  n;.            i
16b0: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
16c0: 2e 53 74 72 69 6e 67 29 20 72 65 74 75 72 6e 3b  .String) return;
16d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
16e0: 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 53  (typ == DbType.S
16f0: 42 79 74 65 29 20 72 65 74 75 72 6e 3b 0a 20 20  Byte) return;.  
1700: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79            if (ty
1710: 70 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64  p == DbType.Guid
1720: 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  ) return;.      
1730: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
1740: 20 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d 65   DbType.DateTime
1750: 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  ) return;.      
1760: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1770: 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
1780: 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0a 20  Affinity.Blob:. 
1790: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
17a0: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 53 74 72  yp == DbType.Str
17b0: 69 6e 67 29 20 72 65 74 75 72 6e 3b 0a 20 20 20  ing) return;.   
17c0: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
17d0: 20 3d 3d 20 44 62 54 79 70 65 2e 42 69 6e 61 72   == DbType.Binar
17e0: 79 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  y) return;.     
17f0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
1800: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
1810: 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
1820: 20 49 6e 76 61 6c 69 64 43 61 73 74 45 78 63 65   InvalidCastExce
1830: 70 74 69 6f 6e 28 29 3b 0a 20 20 20 20 7d 0a 0a  ption();.    }..
1840: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1850: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  >.    /// </summ
1860: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ary>.    /// <pa
1870: 72 61 6d 20 6e 61 6d 65 3d 22 6f 72 64 69 6e 61  ram name="ordina
1880: 6c 22 3e 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  l"></param>.    
1890: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 3c 2f 72  /// <returns></r
18a0: 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c  eturns>.    publ
18b0: 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  ic override bool
18c0: 20 47 65 74 42 6f 6f 6c 65 61 6e 28 69 6e 74 20   GetBoolean(int 
18d0: 6f 72 64 69 6e 61 6c 29 0a 20 20 20 20 7b 0a 20  ordinal).    {. 
18e0: 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28       VerifyType(
18f0: 6f 72 64 69 6e 61 6c 2c 20 44 62 54 79 70 65 2e  ordinal, DbType.
1900: 42 6f 6f 6c 65 61 6e 29 3b 0a 20 20 20 20 20 20  Boolean);.      
1910: 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54  return Convert.T
1920: 6f 42 6f 6f 6c 65 61 6e 28 47 65 74 56 61 6c 75  oBoolean(GetValu
1930: 65 28 6f 72 64 69 6e 61 6c 29 29 3b 0a 20 20 20  e(ordinal));.   
1940: 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
1950: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 0a 20  mary>.    /// . 
1960: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1970: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  >.    /// <param
1980: 20 6e 61 6d 65 3d 22 6f 72 64 69 6e 61 6c 22 3e   name="ordinal">
1990: 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f  </param>.    ///
19a0: 20 3c 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75   <returns></retu
19b0: 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20  rns>.    public 
19c0: 6f 76 65 72 72 69 64 65 20 62 79 74 65 20 47 65  override byte Ge
19d0: 74 42 79 74 65 28 69 6e 74 20 6f 72 64 69 6e 61  tByte(int ordina
19e0: 6c 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 56  l).    {.      V
19f0: 65 72 69 66 79 54 79 70 65 28 6f 72 64 69 6e 61  erifyType(ordina
1a00: 6c 2c 20 44 62 54 79 70 65 2e 42 79 74 65 29 3b  l, DbType.Byte);
1a10: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f  .      return Co
1a20: 6e 76 65 72 74 2e 54 6f 42 79 74 65 28 5f 61 63  nvert.ToByte(_ac
1a30: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
1a40: 71 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61 63 74  ql.GetInt32(_act
1a50: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 6f 72  iveStatement, or
1a60: 64 69 6e 61 6c 29 29 3b 0a 20 20 20 20 7d 0a 0a  dinal));.    }..
1a70: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1a80: 3e 0a 20 20 20 20 2f 2f 2f 20 0a 20 20 20 20 2f  >.    /// .    /
1a90: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
1aa0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1ab0: 65 3d 22 6f 72 64 69 6e 61 6c 22 3e 3c 2f 70 61  e="ordinal"></pa
1ac0: 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ram>.    /// <pa
1ad0: 72 61 6d 20 6e 61 6d 65 3d 22 64 61 74 61 4f 66  ram name="dataOf
1ae0: 66 73 65 74 22 3e 3c 2f 70 61 72 61 6d 3e 0a 20  fset"></param>. 
1af0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1b00: 6d 65 3d 22 62 75 66 66 65 72 22 3e 3c 2f 70 61  me="buffer"></pa
1b10: 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ram>.    /// <pa
1b20: 72 61 6d 20 6e 61 6d 65 3d 22 62 75 66 66 65 72  ram name="buffer
1b30: 4f 66 66 73 65 74 22 3e 3c 2f 70 61 72 61 6d 3e  Offset"></param>
1b40: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1b50: 6e 61 6d 65 3d 22 6c 65 6e 67 74 68 22 3e 3c 2f  name="length"></
1b60: 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c  param>.    /// <
1b70: 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72 6e  returns></return
1b80: 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  s>.    public ov
1b90: 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 42  erride long GetB
1ba0: 79 74 65 73 28 69 6e 74 20 6f 72 64 69 6e 61 6c  ytes(int ordinal
1bb0: 2c 20 6c 6f 6e 67 20 64 61 74 61 4f 66 66 73 65  , long dataOffse
1bc0: 74 2c 20 62 79 74 65 5b 5d 20 62 75 66 66 65 72  t, byte[] buffer
1bd0: 2c 20 69 6e 74 20 62 75 66 66 65 72 4f 66 66 73  , int bufferOffs
1be0: 65 74 2c 20 69 6e 74 20 6c 65 6e 67 74 68 29 0a  et, int length).
1bf0: 20 20 20 20 7b 0a 20 20 20 20 20 20 56 65 72 69      {.      Veri
1c00: 66 79 54 79 70 65 28 6f 72 64 69 6e 61 6c 2c 20  fyType(ordinal, 
1c10: 44 62 54 79 70 65 2e 42 69 6e 61 72 79 29 3b 0a  DbType.Binary);.
1c20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63        return _ac
1c30: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
1c40: 71 6c 2e 47 65 74 42 79 74 65 73 28 5f 61 63 74  ql.GetBytes(_act
1c50: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 6f 72  iveStatement, or
1c60: 64 69 6e 61 6c 2c 20 28 69 6e 74 29 64 61 74 61  dinal, (int)data
1c70: 4f 66 66 73 65 74 2c 20 62 75 66 66 65 72 2c 20  Offset, buffer, 
1c80: 62 75 66 66 65 72 4f 66 66 73 65 74 2c 20 6c 65  bufferOffset, le
1c90: 6e 67 74 68 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  ngth);.    }..  
1ca0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
1cb0: 20 20 20 20 2f 2f 2f 20 0a 20 20 20 20 2f 2f 2f      /// .    ///
1cc0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
1cd0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1ce0: 22 6f 72 64 69 6e 61 6c 22 3e 3c 2f 70 61 72 61  "ordinal"></para
1cf0: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
1d00: 72 6e 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20  rns></returns>. 
1d10: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
1d20: 64 65 20 63 68 61 72 20 47 65 74 43 68 61 72 28  de char GetChar(
1d30: 69 6e 74 20 6f 72 64 69 6e 61 6c 29 0a 20 20 20  int ordinal).   
1d40: 20 7b 0a 20 20 20 20 20 20 56 65 72 69 66 79 54   {.      VerifyT
1d50: 79 70 65 28 6f 72 64 69 6e 61 6c 2c 20 44 62 54  ype(ordinal, DbT
1d60: 79 70 65 2e 53 42 79 74 65 29 3b 0a 20 20 20 20  ype.SByte);.    
1d70: 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74    return Convert
1d80: 2e 54 6f 43 68 61 72 28 5f 61 63 74 69 76 65 53  .ToChar(_activeS
1d90: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
1da0: 74 49 6e 74 33 32 28 5f 61 63 74 69 76 65 53 74  tInt32(_activeSt
1db0: 61 74 65 6d 65 6e 74 2c 20 6f 72 64 69 6e 61 6c  atement, ordinal
1dc0: 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  ));.    }..    /
1dd0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
1de0: 20 2f 2f 2f 20 0a 20 20 20 20 2f 2f 2f 20 3c 2f   /// .    /// </
1df0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
1e00: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 72   <param name="or
1e10: 64 69 6e 61 6c 22 3e 3c 2f 70 61 72 61 6d 3e 0a  dinal"></param>.
1e20: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1e30: 61 6d 65 3d 22 64 61 74 61 4f 66 66 73 65 74 22  ame="dataOffset"
1e40: 3e 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f  ></param>.    //
1e50: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62  / <param name="b
1e60: 75 66 66 65 72 22 3e 3c 2f 70 61 72 61 6d 3e 0a  uffer"></param>.
1e70: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1e80: 61 6d 65 3d 22 62 75 66 66 65 72 4f 66 66 73 65  ame="bufferOffse
1e90: 74 22 3e 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  t"></param>.    
1ea0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1eb0: 22 6c 65 6e 67 74 68 22 3e 3c 2f 70 61 72 61 6d  "length"></param
1ec0: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  >.    /// <retur
1ed0: 6e 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20  ns></returns>.  
1ee0: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
1ef0: 65 20 6c 6f 6e 67 20 47 65 74 43 68 61 72 73 28  e long GetChars(
1f00: 69 6e 74 20 6f 72 64 69 6e 61 6c 2c 20 6c 6f 6e  int ordinal, lon
1f10: 67 20 64 61 74 61 4f 66 66 73 65 74 2c 20 63 68  g dataOffset, ch
1f20: 61 72 5b 5d 20 62 75 66 66 65 72 2c 20 69 6e 74  ar[] buffer, int
1f30: 20 62 75 66 66 65 72 4f 66 66 73 65 74 2c 20 69   bufferOffset, i
1f40: 6e 74 20 6c 65 6e 67 74 68 29 0a 20 20 20 20 7b  nt length).    {
1f50: 0a 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70  .      VerifyTyp
1f60: 65 28 6f 72 64 69 6e 61 6c 2c 20 44 62 54 79 70  e(ordinal, DbTyp
1f70: 65 2e 53 74 72 69 6e 67 29 3b 0a 20 20 20 20 20  e.String);.     
1f80: 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53   return _activeS
1f90: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
1fa0: 74 43 68 61 72 73 28 5f 61 63 74 69 76 65 53 74  tChars(_activeSt
1fb0: 61 74 65 6d 65 6e 74 2c 20 6f 72 64 69 6e 61 6c  atement, ordinal
1fc0: 2c 20 28 69 6e 74 29 64 61 74 61 4f 66 66 73 65  , (int)dataOffse
1fd0: 74 2c 20 62 75 66 66 65 72 2c 20 62 75 66 66 65  t, buffer, buffe
1fe0: 72 4f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29  rOffset, length)
1ff0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  ;.    }..    ///
2000: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
2010: 2f 2f 20 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  // .    /// </su
2020: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
2030: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 72 64 69  param name="ordi
2040: 6e 61 6c 22 3e 3c 2f 70 61 72 61 6d 3e 0a 20 20  nal"></param>.  
2050: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 3c    /// <returns><
2060: 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75  /returns>.    pu
2070: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73 74  blic override st
2080: 72 69 6e 67 20 47 65 74 44 61 74 61 54 79 70 65  ring GetDataType
2090: 4e 61 6d 65 28 69 6e 74 20 6f 72 64 69 6e 61 6c  Name(int ordinal
20a0: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 43 68  ).    {.      Ch
20b0: 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0a 20 20 20  eckClosed();.   
20c0: 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76     return _activ
20d0: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
20e0: 43 6f 6c 75 6d 6e 4e 61 6d 65 28 5f 61 63 74 69  ColumnName(_acti
20f0: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 6f 72 64  veStatement, ord
2100: 69 6e 61 6c 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  inal);.    }..  
2110: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
2120: 20 20 20 20 2f 2f 2f 20 0a 20 20 20 20 2f 2f 2f      /// .    ///
2130: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
2140: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2150: 22 6f 72 64 69 6e 61 6c 22 3e 3c 2f 70 61 72 61  "ordinal"></para
2160: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
2170: 72 6e 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20  rns></returns>. 
2180: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
2190: 64 65 20 44 61 74 65 54 69 6d 65 20 47 65 74 44  de DateTime GetD
21a0: 61 74 65 54 69 6d 65 28 69 6e 74 20 6f 72 64 69  ateTime(int ordi
21b0: 6e 61 6c 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  nal).    {.     
21c0: 20 56 65 72 69 66 79 54 79 70 65 28 6f 72 64 69   VerifyType(ordi
21d0: 6e 61 6c 2c 20 44 62 54 79 70 65 2e 44 61 74 65  nal, DbType.Date
21e0: 54 69 6d 65 29 3b 0a 20 20 20 20 20 20 72 65 74  Time);.      ret
21f0: 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65  urn _activeState
2200: 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 44 61 74  ment._sql.GetDat
2210: 65 54 69 6d 65 28 5f 61 63 74 69 76 65 53 74 61  eTime(_activeSta
2220: 74 65 6d 65 6e 74 2c 20 6f 72 64 69 6e 61 6c 29  tement, ordinal)
2230: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  ;.    }..    ///
2240: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
2250: 2f 2f 20 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  // .    /// </su
2260: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
2270: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 72 64 69  param name="ordi
2280: 6e 61 6c 22 3e 3c 2f 70 61 72 61 6d 3e 0a 20 20  nal"></param>.  
2290: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 3c    /// <returns><
22a0: 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75  /returns>.    pu
22b0: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 64 65  blic override de
22c0: 63 69 6d 61 6c 20 47 65 74 44 65 63 69 6d 61 6c  cimal GetDecimal
22d0: 28 69 6e 74 20 6f 72 64 69 6e 61 6c 29 0a 20 20  (int ordinal).  
22e0: 20 20 7b 0a 20 20 20 20 20 20 56 65 72 69 66 79    {.      Verify
22f0: 54 79 70 65 28 6f 72 64 69 6e 61 6c 2c 20 44 62  Type(ordinal, Db
2300: 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 3b 0a 20  Type.Decimal);. 
2310: 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76       return Conv
2320: 65 72 74 2e 54 6f 44 65 63 69 6d 61 6c 28 5f 61  ert.ToDecimal(_a
2330: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
2340: 73 71 6c 2e 47 65 74 44 6f 75 62 6c 65 28 5f 61  sql.GetDouble(_a
2350: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
2360: 6f 72 64 69 6e 61 6c 29 29 3b 0a 20 20 20 20 7d  ordinal));.    }
2370: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
2380: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 0a 20 20 20  ry>.    /// .   
2390: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
23a0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
23b0: 61 6d 65 3d 22 6f 72 64 69 6e 61 6c 22 3e 3c 2f  ame="ordinal"></
23c0: 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c  param>.    /// <
23d0: 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72 6e  returns></return
23e0: 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  s>.    public ov
23f0: 65 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65  erride double Ge
2400: 74 44 6f 75 62 6c 65 28 69 6e 74 20 6f 72 64 69  tDouble(int ordi
2410: 6e 61 6c 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  nal).    {.     
2420: 20 56 65 72 69 66 79 54 79 70 65 28 6f 72 64 69   VerifyType(ordi
2430: 6e 61 6c 2c 20 44 62 54 79 70 65 2e 44 6f 75 62  nal, DbType.Doub
2440: 6c 65 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  le);.      retur
2450: 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  n _activeStateme
2460: 6e 74 2e 5f 73 71 6c 2e 47 65 74 44 6f 75 62 6c  nt._sql.GetDoubl
2470: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
2480: 6e 74 2c 20 6f 72 64 69 6e 61 6c 29 3b 0a 20 20  nt, ordinal);.  
2490: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
24a0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 0a  mmary>.    /// .
24b0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
24c0: 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  y>.    /// <para
24d0: 6d 20 6e 61 6d 65 3d 22 6f 72 64 69 6e 61 6c 22  m name="ordinal"
24e0: 3e 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f  ></param>.    //
24f0: 2f 20 3c 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74  / <returns></ret
2500: 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63  urns>.    public
2510: 20 6f 76 65 72 72 69 64 65 20 54 79 70 65 20 47   override Type G
2520: 65 74 46 69 65 6c 64 54 79 70 65 28 69 6e 74 20  etFieldType(int 
2530: 6f 72 64 69 6e 61 6c 29 0a 20 20 20 20 7b 0a 20  ordinal).    {. 
2540: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
2550: 74 65 43 6f 6e 76 65 72 74 2e 53 51 4c 69 74 65  teConvert.SQLite
2560: 54 79 70 65 54 6f 54 79 70 65 28 47 65 74 53 51  TypeToType(GetSQ
2570: 4c 69 74 65 54 79 70 65 28 6f 72 64 69 6e 61 6c  LiteType(ordinal
2580: 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  ));.    }..    /
2590: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
25a0: 20 2f 2f 2f 20 0a 20 20 20 20 2f 2f 2f 20 3c 2f   /// .    /// </
25b0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
25c0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 72   <param name="or
25d0: 64 69 6e 61 6c 22 3e 3c 2f 70 61 72 61 6d 3e 0a  dinal"></param>.
25e0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
25f0: 3e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20  ></returns>.    
2600: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
2610: 66 6c 6f 61 74 20 47 65 74 46 6c 6f 61 74 28 69  float GetFloat(i
2620: 6e 74 20 6f 72 64 69 6e 61 6c 29 0a 20 20 20 20  nt ordinal).    
2630: 7b 0a 20 20 20 20 20 20 56 65 72 69 66 79 54 79  {.      VerifyTy
2640: 70 65 28 6f 72 64 69 6e 61 6c 2c 20 44 62 54 79  pe(ordinal, DbTy
2650: 70 65 2e 53 69 6e 67 6c 65 29 3b 0a 20 20 20 20  pe.Single);.    
2660: 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74    return Convert
2670: 2e 54 6f 53 69 6e 67 6c 65 28 5f 61 63 74 69 76  .ToSingle(_activ
2680: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
2690: 47 65 74 44 6f 75 62 6c 65 28 5f 61 63 74 69 76  GetDouble(_activ
26a0: 65 53 74 61 74 65 6d 65 6e 74 2c 20 6f 72 64 69  eStatement, ordi
26b0: 6e 61 6c 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  nal));.    }..  
26c0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
26d0: 20 20 20 20 2f 2f 2f 20 0a 20 20 20 20 2f 2f 2f      /// .    ///
26e0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
26f0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2700: 22 6f 72 64 69 6e 61 6c 22 3e 3c 2f 70 61 72 61  "ordinal"></para
2710: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
2720: 72 6e 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20  rns></returns>. 
2730: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
2740: 64 65 20 47 75 69 64 20 47 65 74 47 75 69 64 28  de Guid GetGuid(
2750: 69 6e 74 20 6f 72 64 69 6e 61 6c 29 0a 20 20 20  int ordinal).   
2760: 20 7b 0a 20 20 20 20 20 20 56 65 72 69 66 79 54   {.      VerifyT
2770: 79 70 65 28 6f 72 64 69 6e 61 6c 2c 20 44 62 54  ype(ordinal, DbT
2780: 79 70 65 2e 47 75 69 64 29 3b 0a 20 20 20 20 20  ype.Guid);.     
2790: 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69 64   return new Guid
27a0: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
27b0: 74 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74 28 5f  t._sql.GetText(_
27c0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
27d0: 20 6f 72 64 69 6e 61 6c 29 29 3b 0a 20 20 20 20   ordinal));.    
27e0: 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  }..    /// <summ
27f0: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 0a 20 20  ary>.    /// .  
2800: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2810: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
2820: 6e 61 6d 65 3d 22 6f 72 64 69 6e 61 6c 22 3e 3c  name="ordinal"><
2830: 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20  /param>.    /// 
2840: 3c 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72  <returns></retur
2850: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ns>.    public o
2860: 76 65 72 72 69 64 65 20 49 6e 74 31 36 20 47 65  verride Int16 Ge
2870: 74 49 6e 74 31 36 28 69 6e 74 20 6f 72 64 69 6e  tInt16(int ordin
2880: 61 6c 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  al).    {.      
2890: 56 65 72 69 66 79 54 79 70 65 28 6f 72 64 69 6e  VerifyType(ordin
28a0: 61 6c 2c 20 44 62 54 79 70 65 2e 49 6e 74 31 36  al, DbType.Int16
28b0: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
28c0: 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 31 36 28  Convert.ToInt16(
28d0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
28e0: 2e 5f 73 71 6c 2e 47 65 74 49 6e 74 33 32 28 5f  ._sql.GetInt32(_
28f0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
2900: 20 6f 72 64 69 6e 61 6c 29 29 3b 0a 20 20 20 20   ordinal));.    
2910: 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  }..    /// <summ
2920: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 0a 20 20  ary>.    /// .  
2930: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2940: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
2950: 6e 61 6d 65 3d 22 6f 72 64 69 6e 61 6c 22 3e 3c  name="ordinal"><
2960: 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20  /param>.    /// 
2970: 3c 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72  <returns></retur
2980: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ns>.    public o
2990: 76 65 72 72 69 64 65 20 49 6e 74 33 32 20 47 65  verride Int32 Ge
29a0: 74 49 6e 74 33 32 28 69 6e 74 20 6f 72 64 69 6e  tInt32(int ordin
29b0: 61 6c 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  al).    {.      
29c0: 56 65 72 69 66 79 54 79 70 65 28 6f 72 64 69 6e  VerifyType(ordin
29d0: 61 6c 2c 20 44 62 54 79 70 65 2e 49 6e 74 33 32  al, DbType.Int32
29e0: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
29f0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
2a00: 2e 5f 73 71 6c 2e 47 65 74 49 6e 74 33 32 28 5f  ._sql.GetInt32(_
2a10: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
2a20: 20 6f 72 64 69 6e 61 6c 29 3b 0a 20 20 20 20 7d   ordinal);.    }
2a30: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
2a40: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 0a 20 20 20  ry>.    /// .   
2a50: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
2a60: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2a70: 61 6d 65 3d 22 6f 72 64 69 6e 61 6c 22 3e 3c 2f  ame="ordinal"></
2a80: 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c  param>.    /// <
2a90: 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72 6e  returns></return
2aa0: 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  s>.    public ov
2ab0: 65 72 72 69 64 65 20 49 6e 74 36 34 20 47 65 74  erride Int64 Get
2ac0: 49 6e 74 36 34 28 69 6e 74 20 6f 72 64 69 6e 61  Int64(int ordina
2ad0: 6c 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 56  l).    {.      V
2ae0: 65 72 69 66 79 54 79 70 65 28 6f 72 64 69 6e 61  erifyType(ordina
2af0: 6c 2c 20 44 62 54 79 70 65 2e 49 6e 74 36 34 29  l, DbType.Int64)
2b00: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f  ;.      return _
2b10: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
2b20: 5f 73 71 6c 2e 47 65 74 49 6e 74 36 34 28 5f 61  _sql.GetInt64(_a
2b30: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
2b40: 6f 72 64 69 6e 61 6c 29 3b 0a 20 20 20 20 7d 0a  ordinal);.    }.
2b50: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
2b60: 79 3e 0a 20 20 20 20 2f 2f 2f 20 0a 20 20 20 20  y>.    /// .    
2b70: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
2b80: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2b90: 6d 65 3d 22 6f 72 64 69 6e 61 6c 22 3e 3c 2f 70  me="ordinal"></p
2ba0: 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72  aram>.    /// <r
2bb0: 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72 6e 73  eturns></returns
2bc0: 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  >.    public ove
2bd0: 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65 74  rride string Get
2be0: 4e 61 6d 65 28 69 6e 74 20 6f 72 64 69 6e 61 6c  Name(int ordinal
2bf0: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 43 68  ).    {.      Ch
2c00: 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0a 20 20 20  eckClosed();.   
2c10: 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76     return _activ
2c20: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
2c30: 43 6f 6c 75 6d 6e 4e 61 6d 65 28 5f 61 63 74 69  ColumnName(_acti
2c40: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 6f 72 64  veStatement, ord
2c50: 69 6e 61 6c 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  inal);.    }..  
2c60: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
2c70: 20 20 20 20 2f 2f 2f 20 0a 20 20 20 20 2f 2f 2f      /// .    ///
2c80: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
2c90: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2ca0: 22 6e 61 6d 65 22 3e 3c 2f 70 61 72 61 6d 3e 0a  "name"></param>.
2cb0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
2cc0: 3e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20  ></returns>.    
2cd0: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
2ce0: 69 6e 74 20 47 65 74 4f 72 64 69 6e 61 6c 28 73  int GetOrdinal(s
2cf0: 74 72 69 6e 67 20 6e 61 6d 65 29 0a 20 20 20 20  tring name).    
2d00: 7b 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f  {.      CheckClo
2d10: 73 65 64 28 29 3b 0a 20 20 20 20 20 20 72 65 74  sed();.      ret
2d20: 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65  urn _activeState
2d30: 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e  ment._sql.Column
2d40: 49 6e 64 65 78 28 5f 61 63 74 69 76 65 53 74 61  Index(_activeSta
2d50: 74 65 6d 65 6e 74 2c 20 6e 61 6d 65 29 3b 0a 20  tement, name);. 
2d60: 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73     }..    /// <s
2d70: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
2d80: 53 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  Schema informati
2d90: 6f 6e 20 69 6e 20 53 51 4c 69 74 65 20 69 73 20  on in SQLite is 
2da0: 61 6e 20 69 66 66 79 2d 62 75 73 69 6e 65 73 73  an iffy-business
2db0: 2e 20 20 57 65 27 76 65 20 65 78 74 65 6e 64 65  .  We've extende
2dc0: 64 20 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c  d the native SQL
2dd0: 69 74 65 33 2e 44 4c 4c 20 74 6f 20 69 6e 63 6c  ite3.DLL to incl
2de0: 75 64 65 20 61 20 73 70 65 63 69 61 6c 20 70 72  ude a special pr
2df0: 61 67 6d 61 20 63 61 6c 6c 65 64 0a 20 20 20 20  agma called.    
2e00: 2f 2f 2f 20 50 52 41 47 4d 41 20 72 65 61 6c 5f  /// PRAGMA real_
2e10: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 0a 20 20 20  column_names.   
2e20: 20 2f 2f 2f 20 57 68 65 6e 20 65 6e 61 62 6c 65   /// When enable
2e30: 64 2c 20 74 68 65 20 70 72 61 67 6d 61 20 63 61  d, the pragma ca
2e40: 75 73 65 73 20 61 6c 6c 20 63 6f 6c 75 6d 6e 20  uses all column 
2e50: 61 6c 69 61 73 65 73 20 74 6f 20 62 65 20 69 67  aliases to be ig
2e60: 6e 6f 72 65 64 2c 20 61 6e 64 20 74 68 65 20 66  nored, and the f
2e70: 75 6c 6c 20 44 61 74 61 62 61 73 65 2e 54 61 62  ull Database.Tab
2e80: 6c 65 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 20 74 6f  le.ColumnName to
2e90: 20 62 65 20 72 65 74 75 72 6e 65 64 20 66 6f 72   be returned for
2ea0: 0a 20 20 20 20 2f 2f 2f 20 65 61 63 68 20 63 6f  .    /// each co
2eb0: 6c 75 6d 6e 20 6f 66 20 61 20 53 45 4c 45 43 54  lumn of a SELECT
2ec0: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 55 73 69   statement.  Usi
2ed0: 6e 67 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74  ng this informat
2ee0: 69 6f 6e 20 69 74 20 69 73 20 74 68 65 6e 20 70  ion it is then p
2ef0: 6f 73 73 69 62 6c 65 20 74 6f 20 71 75 65 72 79  ossible to query
2f00: 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 61   each database a
2f10: 6e 64 20 74 61 62 6c 65 20 66 6f 72 20 74 68 65  nd table for the
2f20: 0a 20 20 20 20 2f 2f 2f 20 6d 61 74 63 68 69 6e  .    /// matchin
2f30: 67 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20 61 73  g column, and as
2f40: 73 6f 63 69 61 74 65 20 69 74 20 77 69 74 68 20  sociate it with 
2f50: 74 68 65 20 61 63 74 69 76 65 20 73 74 61 74 65  the active state
2f60: 6d 65 6e 74 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ment..    /// </
2f70: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
2f80: 20 3c 72 65 6d 61 72 6b 73 3e 0a 20 20 20 20 2f   <remarks>.    /
2f90: 2f 2f 20 54 68 65 20 63 75 72 72 65 6e 74 20 63  // The current c
2fa0: 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 6c 6f  onnection is clo
2fb0: 6e 65 64 20 66 6f 72 20 74 68 65 20 73 61 6b 65  ned for the sake
2fc0: 20 6f 66 20 65 78 65 63 75 74 69 6e 67 20 74 68   of executing th
2fd0: 69 73 20 73 74 61 74 65 6d 65 6e 74 2c 20 73 6f  is statement, so
2fe0: 20 61 73 20 74 6f 20 61 76 6f 69 64 20 61 6e 79   as to avoid any
2ff0: 20 70 6f 73 73 69 62 69 6c 69 74 79 20 6f 66 20   possibility of 
3000: 63 6f 72 72 75 70 74 69 6e 67 20 74 68 65 0a 20  corrupting the. 
3010: 20 20 20 2f 2f 2f 20 6f 72 69 67 69 6e 61 6c 20     /// original 
3020: 63 6f 6e 6e 65 63 74 69 6f 6e 27 73 20 65 78 69  connection's exi
3030: 73 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73  sting statements
3040: 20 6f 72 20 73 74 61 74 65 2e 20 20 41 6e 79 20   or state.  Any 
3050: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
3060: 65 73 20 61 72 65 20 72 65 2d 61 74 74 61 63 68  es are re-attach
3070: 65 64 20 74 6f 20 74 68 65 20 6e 65 77 20 63 6f  ed to the new co
3080: 6e 6e 65 63 74 69 6f 6e 2e 0a 20 20 20 20 2f 2f  nnection..    //
3090: 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0a 20 20 20  / </remarks>.   
30a0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65   /// <returns>Re
30b0: 74 75 72 6e 73 20 61 20 44 61 74 61 54 61 62 6c  turns a DataTabl
30c0: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
30d0: 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74   schema informat
30e0: 69 6f 6e 20 66 6f 72 20 74 68 65 20 61 63 74 69  ion for the acti
30f0: 76 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  ve SELECT statem
3100: 65 6e 74 20 62 65 69 6e 67 20 70 72 6f 63 65 73  ent being proces
3110: 73 65 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20  sed.</returns>. 
3120: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
3130: 64 65 20 44 61 74 61 54 61 62 6c 65 20 47 65 74  de DataTable Get
3140: 53 63 68 65 6d 61 54 61 62 6c 65 28 29 0a 20 20  SchemaTable().  
3150: 20 20 7b 0a 20 20 20 20 20 20 43 68 65 63 6b 43    {.      CheckC
3160: 6c 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20 20 20  losed();..      
3170: 44 61 74 61 54 61 62 6c 65 20 74 62 6c 20 3d 20  DataTable tbl = 
3180: 6e 65 77 20 44 61 74 61 54 61 62 6c 65 28 22 53  new DataTable("S
3190: 63 68 65 6d 61 22 29 3b 0a 20 20 20 20 20 20 73  chema");.      s
31a0: 74 72 69 6e 67 5b 5d 20 61 72 4e 61 6d 65 3b 0a  tring[] arName;.
31b0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 74 72        string str
31c0: 54 61 62 6c 65 3b 0a 20 20 20 20 20 20 73 74 72  Table;.      str
31d0: 69 6e 67 20 73 74 72 43 61 74 61 6c 6f 67 3b 0a  ing strCatalog;.
31e0: 20 20 20 20 20 20 44 61 74 61 52 6f 77 20 72 6f        DataRow ro
31f0: 77 3b 0a 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  w;..      tbl.Co
3200: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
3210: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75  TableColumn.Colu
3220: 6d 6e 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28 53  mnName, typeof(S
3230: 74 72 69 6e 67 29 29 3b 0a 20 20 20 20 20 20 74  tring));.      t
3240: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
3250: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
3260: 2e 43 6f 6c 75 6d 6e 4f 72 64 69 6e 61 6c 2c 20  .ColumnOrdinal, 
3270: 74 79 70 65 6f 66 28 49 6e 74 33 32 29 29 3b 0a  typeof(Int32));.
3280: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
3290: 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c  s.Add(SchemaTabl
32a0: 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 53 69  eColumn.ColumnSi
32b0: 7a 65 2c 20 74 79 70 65 6f 66 28 49 6e 74 33 32  ze, typeof(Int32
32c0: 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  ));.      tbl.Co
32d0: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
32e0: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65  TableColumn.Nume
32f0: 72 69 63 50 72 65 63 69 73 69 6f 6e 2c 20 74 79  ricPrecision, ty
3300: 70 65 6f 66 28 49 6e 74 33 32 29 29 3b 0a 20 20  peof(Int32));.  
3310: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
3320: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43  Add(SchemaTableC
3330: 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 53 63 61  olumn.NumericSca
3340: 6c 65 2c 20 74 79 70 65 6f 66 28 49 6e 74 33 32  le, typeof(Int32
3350: 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  ));.      tbl.Co
3360: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
3370: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 44 61 74 61  TableColumn.Data
3380: 54 79 70 65 2c 20 74 79 70 65 6f 66 28 54 79 70  Type, typeof(Typ
3390: 65 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43  e));.      tbl.C
33a0: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
33b0: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 50 72 6f  aTableColumn.Pro
33c0: 76 69 64 65 72 54 79 70 65 2c 20 74 79 70 65 6f  viderType, typeo
33d0: 66 28 49 6e 74 33 32 29 29 3b 0a 20 20 20 20 20  f(Int32));.     
33e0: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
33f0: 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  (SchemaTableColu
3400: 6d 6e 2e 49 73 4c 6f 6e 67 2c 20 74 79 70 65 6f  mn.IsLong, typeo
3410: 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a 20 20 20  f(Boolean));.   
3420: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
3430: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  dd(SchemaTableCo
3440: 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c  lumn.AllowDBNull
3450: 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e  , typeof(Boolean
3460: 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  ));.      tbl.Co
3470: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
3480: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
3490: 75 6d 6e 2e 49 73 52 65 61 64 4f 6e 6c 79 2c 20  umn.IsReadOnly, 
34a0: 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29  typeof(Boolean))
34b0: 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ;.      tbl.Colu
34c0: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
34d0: 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d  bleOptionalColum
34e0: 6e 2e 49 73 52 6f 77 56 65 72 73 69 6f 6e 2c 20  n.IsRowVersion, 
34f0: 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29  typeof(Boolean))
3500: 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ;.      tbl.Colu
3510: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
3520: 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 55 6e 69 71  bleColumn.IsUniq
3530: 75 65 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65  ue, typeof(Boole
3540: 61 6e 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e  an));.      tbl.
3550: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
3560: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73  maTableColumn.Is
3570: 4b 65 79 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c  Key, typeof(Bool
3580: 65 61 6e 29 29 3b 0a 20 20 20 20 20 20 74 62 6c  ean));.      tbl
3590: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68  .Columns.Add(Sch
35a0: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
35b0: 43 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f 49 6e 63  Column.IsAutoInc
35c0: 72 65 6d 65 6e 74 2c 20 74 79 70 65 6f 66 28 42  rement, typeof(B
35d0: 6f 6f 6c 65 61 6e 29 29 3b 0a 20 20 20 20 20 20  oolean));.      
35e0: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
35f0: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
3600: 6e 2e 42 61 73 65 53 63 68 65 6d 61 4e 61 6d 65  n.BaseSchemaName
3610: 2c 20 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29  , typeof(String)
3620: 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  );.      tbl.Col
3630: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
3640: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
3650: 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61  mn.BaseCatalogNa
3660: 6d 65 2c 20 74 79 70 65 6f 66 28 53 74 72 69 6e  me, typeof(Strin
3670: 67 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43  g));.      tbl.C
3680: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
3690: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73  aTableColumn.Bas
36a0: 65 54 61 62 6c 65 4e 61 6d 65 2c 20 74 79 70 65  eTableName, type
36b0: 6f 66 28 53 74 72 69 6e 67 29 29 3b 0a 20 20 20  of(String));.   
36c0: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
36d0: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  dd(SchemaTableCo
36e0: 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d 6e 4e  lumn.BaseColumnN
36f0: 61 6d 65 2c 20 74 79 70 65 6f 66 28 53 74 72 69  ame, typeof(Stri
3700: 6e 67 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e  ng));.      tbl.
3710: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
3720: 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
3730: 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d 6e  olumn.BaseColumn
3740: 4e 61 6d 65 73 70 61 63 65 2c 20 74 79 70 65 6f  Namespace, typeo
3750: 66 28 73 74 72 69 6e 67 29 29 3b 0a 20 20 20 20  f(string));.    
3760: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
3770: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  d(SchemaTableOpt
3780: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 44 65 66 61  ionalColumn.Defa
3790: 75 6c 74 56 61 6c 75 65 2c 20 74 79 70 65 6f 66  ultValue, typeof
37a0: 28 6f 62 6a 65 63 74 29 29 3b 0a 0a 20 20 20 20  (object));..    
37b0: 20 20 74 62 6c 2e 42 65 67 69 6e 4c 6f 61 64 44    tbl.BeginLoadD
37c0: 61 74 61 28 29 3b 0a 0a 20 20 20 20 20 20 53 51  ata();..      SQ
37d0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63  LiteConnection c
37e0: 6e 6e 20 3d 20 28 53 51 4c 69 74 65 43 6f 6e 6e  nn = (SQLiteConn
37f0: 65 63 74 69 6f 6e 29 5f 63 6f 6d 6d 61 6e 64 2e  ection)_command.
3800: 43 6f 6e 6e 65 63 74 69 6f 6e 3b 0a 0a 20 20 20  Connection;..   
3810: 20 20 20 74 72 79 0a 20 20 20 20 20 20 7b 0a 20     try.      {. 
3820: 20 20 20 20 20 20 20 63 6e 6e 2e 5f 73 71 6c 2e         cnn._sql.
3830: 53 65 74 52 65 61 6c 43 6f 6c 4e 61 6d 65 73 28  SetRealColNames(
3840: 74 72 75 65 29 3b 0a 0a 20 20 20 20 20 20 20 20  true);..        
3850: 2f 2f 20 43 72 65 61 74 65 20 61 20 6e 65 77 20  // Create a new 
3860: 63 6f 6d 6d 61 6e 64 20 62 61 73 65 64 20 6f 6e  command based on
3870: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 2e 20 20   the original.  
3880: 54 68 65 20 6f 6e 6c 79 20 64 69 66 66 65 72 65  The only differe
3890: 6e 63 65 20 62 65 69 6e 67 20 74 68 61 74 20 74  nce being that t
38a0: 68 69 73 20 6e 65 77 20 63 6f 6d 6d 61 6e 64 20  his new command 
38b0: 72 65 74 75 72 6e 73 0a 20 20 20 20 20 20 20 20  returns.        
38c0: 2f 2f 20 66 75 6c 6c 79 2d 71 75 61 6c 69 66 69  // fully-qualifi
38d0: 65 64 20 44 61 74 61 62 61 73 65 2e 54 61 62 6c  ed Database.Tabl
38e0: 65 2e 43 6f 6c 75 6d 6e 20 63 6f 6c 75 6d 6e 20  e.Column column 
38f0: 6e 61 6d 65 73 20 62 65 63 61 75 73 65 20 6f 66  names because of
3900: 20 74 68 65 20 61 62 6f 76 65 20 70 72 61 67 6d   the above pragm
3910: 61 0a 20 20 20 20 20 20 20 20 75 73 69 6e 67 20  a.        using 
3920: 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63  (SQLiteCommand c
3930: 6d 64 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43  md = new SQLiteC
3940: 6f 6d 6d 61 6e 64 28 5f 61 63 74 69 76 65 53 74  ommand(_activeSt
3950: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 53 74 61 74  atement._sqlStat
3960: 65 6d 65 6e 74 2c 20 63 6e 6e 29 29 0a 20 20 20  ement, cnn)).   
3970: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
3980: 20 75 73 69 6e 67 20 28 44 62 44 61 74 61 52 65   using (DbDataRe
3990: 61 64 65 72 20 72 64 20 3d 20 63 6d 64 2e 45 78  ader rd = cmd.Ex
39a0: 65 63 75 74 65 52 65 61 64 65 72 28 29 29 0a 20  ecuteReader()). 
39b0: 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20           {.     
39c0: 20 20 20 20 20 20 20 2f 2f 20 4e 6f 20 6e 65 65         // No nee
39d0: 64 20 74 6f 20 52 65 61 64 28 29 20 66 72 6f 6d  d to Read() from
39e0: 20 74 68 69 73 20 72 65 61 64 65 72 2c 20 77 65   this reader, we
39f0: 20 6a 75 73 74 20 77 61 6e 74 20 74 68 65 20 63   just want the c
3a00: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 0a 20 20 20 20  olumn names.    
3a10: 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74          for (int
3a20: 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 5f 66 69 65   n = 0; n < _fie
3a30: 6c 64 43 6f 75 6e 74 3b 20 6e 2b 2b 29 0a 20 20  ldCount; n++).  
3a40: 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20            {.    
3a50: 20 20 20 20 20 20 20 20 20 20 73 74 72 54 61 62            strTab
3a60: 6c 65 20 3d 20 22 22 3b 0a 20 20 20 20 20 20 20  le = "";.       
3a70: 20 20 20 20 20 20 20 73 74 72 43 61 74 61 6c 6f         strCatalo
3a80: 67 20 3d 20 22 6d 61 69 6e 22 3b 0a 0a 20 20 20  g = "main";..   
3a90: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 3d             row =
3aa0: 20 74 62 6c 2e 4e 65 77 52 6f 77 28 29 3b 0a 0a   tbl.NewRow();..
3ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3ac0: 20 44 65 66 61 75 6c 74 20 73 65 74 74 69 6e 67   Default setting
3ad0: 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  s for the column
3ae0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
3af0: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
3b00: 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 5d  lumn.ColumnName]
3b10: 20 3d 20 47 65 74 4e 61 6d 65 28 6e 29 3b 0a 20   = GetName(n);. 
3b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
3b30: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
3b40: 6d 6e 2e 43 6f 6c 75 6d 6e 4f 72 64 69 6e 61 6c  mn.ColumnOrdinal
3b50: 5d 20 3d 20 6e 3b 0a 20 20 20 20 20 20 20 20 20  ] = n;.         
3b60: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
3b70: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d  ableColumn.Colum
3b80: 6e 53 69 7a 65 5d 20 3d 20 30 3b 0a 20 20 20 20  nSize] = 0;.    
3b90: 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63            row[Sc
3ba0: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
3bb0: 4e 75 6d 65 72 69 63 50 72 65 63 69 73 69 6f 6e  NumericPrecision
3bc0: 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  ] = 0;.         
3bd0: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
3be0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72  ableColumn.Numer
3bf0: 69 63 53 63 61 6c 65 5d 20 3d 20 30 3b 0a 20 20  icScale] = 0;.  
3c00: 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b              row[
3c10: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
3c20: 6e 2e 44 61 74 61 54 79 70 65 5d 20 3d 20 47 65  n.DataType] = Ge
3c30: 74 46 69 65 6c 64 54 79 70 65 28 6e 29 3b 0a 20  tFieldType(n);. 
3c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
3c50: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
3c60: 6d 6e 2e 50 72 6f 76 69 64 65 72 54 79 70 65 5d  mn.ProviderType]
3c70: 20 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70 65   = GetSQLiteType
3c80: 28 6e 29 2e 54 79 70 65 3b 0a 20 20 20 20 20 20  (n).Type;.      
3c90: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
3ca0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73  maTableColumn.Is
3cb0: 4c 6f 6e 67 5d 20 3d 20 66 61 6c 73 65 3b 0a 20  Long] = false;. 
3cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
3cd0: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
3ce0: 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 5d 20  mn.AllowDBNull] 
3cf0: 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20  = true;.        
3d00: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
3d10: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
3d20: 75 6d 6e 2e 49 73 52 65 61 64 4f 6e 6c 79 5d 20  umn.IsReadOnly] 
3d30: 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20  = true;.        
3d40: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
3d50: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
3d60: 75 6d 6e 2e 49 73 52 6f 77 56 65 72 73 69 6f 6e  umn.IsRowVersion
3d70: 5d 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20 20  ] = false;.     
3d80: 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68           row[Sch
3d90: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49  emaTableColumn.I
3da0: 73 55 6e 69 71 75 65 5d 20 3d 20 66 61 6c 73 65  sUnique] = false
3db0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
3dc0: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
3dd0: 6f 6c 75 6d 6e 2e 49 73 4b 65 79 5d 20 3d 20 66  olumn.IsKey] = f
3de0: 61 6c 73 65 3b 0a 20 20 20 20 20 20 20 20 20 20  alse;.          
3df0: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
3e00: 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d  bleOptionalColum
3e10: 6e 2e 49 73 41 75 74 6f 49 6e 63 72 65 6d 65 6e  n.IsAutoIncremen
3e20: 74 5d 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20  t] = false;.    
3e30: 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63            row[Sc
3e40: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
3e50: 6c 43 6f 6c 75 6d 6e 2e 49 73 52 65 61 64 4f 6e  lColumn.IsReadOn
3e60: 6c 79 5d 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20  ly] = false;.   
3e70: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53             row[S
3e80: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
3e90: 2e 42 61 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65 5d  .BaseColumnName]
3ea0: 20 3d 20 47 65 74 4e 61 6d 65 28 6e 29 3b 0a 0a   = GetName(n);..
3eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3ec0: 20 54 72 79 20 61 6e 64 20 65 78 74 72 61 63 74   Try and extract
3ed0: 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 74   the database, t
3ee0: 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 20  able and column 
3ef0: 66 72 6f 6d 20 74 68 65 20 64 61 74 61 72 65 61  from the datarea
3f00: 64 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20  der.            
3f10: 20 20 61 72 4e 61 6d 65 20 3d 20 72 64 2e 47 65    arName = rd.Ge
3f20: 74 4e 61 6d 65 28 6e 29 2e 53 70 6c 69 74 28 27  tName(n).Split('
3f30: 2e 27 29 3b 0a 0a 20 20 20 20 20 20 20 20 20 20  .');..          
3f40: 20 20 20 20 69 66 20 28 61 72 4e 61 6d 65 2e 4c      if (arName.L
3f50: 65 6e 67 74 68 20 3e 20 31 29 0a 20 20 20 20 20  ength > 1).     
3f60: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 54 61             strTa
3f70: 62 6c 65 20 3d 20 61 72 4e 61 6d 65 5b 61 72 4e  ble = arName[arN
3f80: 61 6d 65 2e 4c 65 6e 67 74 68 20 2d 20 32 5d 3b  ame.Length - 2];
3f90: 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3fa0: 69 66 20 28 61 72 4e 61 6d 65 2e 4c 65 6e 67 74  if (arName.Lengt
3fb0: 68 20 3e 20 32 29 0a 20 20 20 20 20 20 20 20 20  h > 2).         
3fc0: 20 20 20 20 20 20 20 73 74 72 43 61 74 61 6c 6f         strCatalo
3fd0: 67 20 3d 20 61 72 4e 61 6d 65 5b 61 72 4e 61 6d  g = arName[arNam
3fe0: 65 2e 4c 65 6e 67 74 68 20 2d 20 33 5d 3b 0a 0a  e.Length - 3];..
3ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4000: 20 49 66 20 77 65 20 68 61 76 65 20 61 20 74 61   If we have a ta
4010: 62 6c 65 2d 62 6f 75 6e 64 20 63 6f 6c 75 6d 6e  ble-bound column
4020: 2c 20 65 78 74 72 61 63 74 20 74 68 65 20 65 78  , extract the ex
4030: 74 72 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  tra information 
4040: 66 72 6f 6d 20 69 74 0a 20 20 20 20 20 20 20 20  from it.        
4050: 20 20 20 20 20 20 69 66 20 28 61 72 4e 61 6d 65        if (arName
4060: 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0a 20 20 20  .Length > 1).   
4070: 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20             {.   
4080: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
4090: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ng (SQLiteComman
40a0: 64 20 63 6d 64 54 61 62 6c 65 20 3d 20 6e 65 77  d cmdTable = new
40b0: 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 28 53   SQLiteCommand(S
40c0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 50 52  tring.Format("PR
40d0: 41 47 4d 41 20 5b 7b 31 7d 5d 2e 54 41 42 4c 45  AGMA [{1}].TABLE
40e0: 5f 49 4e 46 4f 28 5b 7b 30 7d 5d 29 22 2c 20 73  _INFO([{0}])", s
40f0: 74 72 54 61 62 6c 65 2c 20 73 74 72 43 61 74 61  trTable, strCata
4100: 6c 6f 67 29 2c 20 63 6e 6e 29 29 0a 20 20 20 20  log), cnn)).    
4110: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20              {.  
4120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4130: 69 66 20 28 61 72 4e 61 6d 65 2e 4c 65 6e 67 74  if (arName.Lengt
4140: 68 20 3c 20 33 29 20 73 74 72 43 61 74 61 6c 6f  h < 3) strCatalo
4150: 67 20 3d 20 22 22 3b 0a 0a 20 20 20 20 20 20 20  g = "";..       
4160: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
4170: 20 28 44 62 44 61 74 61 52 65 61 64 65 72 20 72   (DbDataReader r
4180: 64 54 61 62 6c 65 20 3d 20 63 6d 64 54 61 62 6c  dTable = cmdTabl
4190: 65 2e 45 78 65 63 75 74 65 52 65 61 64 65 72 28  e.ExecuteReader(
41a0: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )).             
41b0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
41c0: 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65             while
41d0: 20 28 72 64 54 61 62 6c 65 2e 52 65 61 64 28 29   (rdTable.Read()
41e0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
41f0: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
4200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
4210: 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65   (String.Compare
4220: 28 61 72 4e 61 6d 65 5b 61 72 4e 61 6d 65 2e 4c  (arName[arName.L
4230: 65 6e 67 74 68 20 2d 20 31 5d 2c 20 72 64 54 61  ength - 1], rdTa
4240: 62 6c 65 2e 47 65 74 53 74 72 69 6e 67 28 31 29  ble.GetString(1)
4250: 2c 20 74 72 75 65 29 20 3d 3d 20 30 29 0a 20 20  , true) == 0).  
4260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4270: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
4280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
4290: 72 69 6e 67 20 73 74 72 54 79 70 65 20 3d 20 72  ring strType = r
42a0: 64 54 61 62 6c 65 2e 47 65 74 53 74 72 69 6e 67  dTable.GetString
42b0: 28 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  (2);.           
42c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
42d0: 69 6e 67 5b 5d 20 61 72 53 69 7a 65 20 3d 20 73  ing[] arSize = s
42e0: 74 72 54 79 70 65 2e 53 70 6c 69 74 28 27 28 27  trType.Split('('
42f0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
4300: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
4310: 72 53 69 7a 65 2e 4c 65 6e 67 74 68 20 3e 20 31  rSize.Length > 1
4320: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
4330: 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20            {.    
4340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4350: 20 20 20 20 20 20 61 72 53 69 7a 65 20 3d 20 61        arSize = a
4360: 72 53 69 7a 65 5b 31 5d 2e 53 70 6c 69 74 28 27  rSize[1].Split('
4370: 29 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  )');.           
4380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
4390: 66 20 28 61 72 53 69 7a 65 2e 4c 65 6e 67 74 68  f (arSize.Length
43a0: 20 3e 20 31 29 0a 20 20 20 20 20 20 20 20 20 20   > 1).          
43b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43c0: 20 20 72 6f 77 5b 22 43 6f 6c 75 6d 6e 53 69 7a    row["ColumnSiz
43d0: 65 22 5d 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f  e"] = Convert.To
43e0: 49 6e 74 33 32 28 61 72 53 69 7a 65 5b 30 5d 29  Int32(arSize[0])
43f0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
4400: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
4410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4420: 20 20 20 20 62 6f 6f 6c 20 62 4e 6f 74 4e 75 6c      bool bNotNul
4430: 6c 20 3d 20 72 64 54 61 62 6c 65 2e 47 65 74 42  l = rdTable.GetB
4440: 6f 6f 6c 65 61 6e 28 33 29 3b 0a 20 20 20 20 20  oolean(3);.     
4450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4460: 20 20 20 62 6f 6f 6c 20 62 50 72 69 6d 61 72 79     bool bPrimary
4470: 4b 65 79 20 3d 20 72 64 54 61 62 6c 65 2e 47 65  Key = rdTable.Ge
4480: 74 42 6f 6f 6c 65 61 6e 28 35 29 3b 0a 0a 20 20  tBoolean(5);..  
4490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44a0: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
44b0: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65  TableColumn.Base
44c0: 54 61 62 6c 65 4e 61 6d 65 5d 20 3d 20 73 74 72  TableName] = str
44d0: 54 61 62 6c 65 3b 0a 20 20 20 20 20 20 20 20 20  Table;.         
44e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
44f0: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
4500: 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d 6e 4e  lumn.BaseColumnN
4510: 61 6d 65 5d 20 3d 20 72 64 54 61 62 6c 65 2e 47  ame] = rdTable.G
4520: 65 74 53 74 72 69 6e 67 28 31 29 3b 0a 20 20 20  etString(1);.   
4530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4540: 20 20 20 20 20 69 66 20 28 73 74 72 43 61 74 61       if (strCata
4550: 6c 6f 67 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0a  log.Length > 0).
4560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4570: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
4580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4590: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
45a0: 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d  bleOptionalColum
45b0: 6e 2e 42 61 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65  n.BaseColumnName
45c0: 73 70 61 63 65 5d 20 3d 20 73 74 72 43 61 74 61  space] = strCata
45d0: 6c 6f 67 3b 0a 20 20 20 20 20 20 20 20 20 20 20  log;.           
45e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
45f0: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
4600: 6c 75 6d 6e 2e 42 61 73 65 53 63 68 65 6d 61 4e  lumn.BaseSchemaN
4610: 61 6d 65 5d 20 3d 20 73 74 72 43 61 74 61 6c 6f  ame] = strCatalo
4620: 67 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g;.             
4630: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20             }..  
4640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4650: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
4660: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f  TableColumn.Allo
4670: 77 44 42 4e 75 6c 6c 5d 20 3d 20 28 21 62 4e 6f  wDBNull] = (!bNo
4680: 74 4e 75 6c 6c 20 26 26 20 21 62 50 72 69 6d 61  tNull && !bPrima
4690: 72 79 4b 65 79 29 3b 0a 20 20 20 20 20 20 20 20  ryKey);.        
46a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46b0: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
46c0: 6f 6c 75 6d 6e 2e 49 73 55 6e 69 71 75 65 5d 20  olumn.IsUnique] 
46d0: 3d 20 62 50 72 69 6d 61 72 79 4b 65 79 3b 0a 20  = bPrimaryKey;. 
46e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46f0: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
4700: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4b  aTableColumn.IsK
4710: 65 79 5d 20 3d 20 62 50 72 69 6d 61 72 79 4b 65  ey] = bPrimaryKe
4720: 79 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y;.             
4730: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53             row[S
4740: 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
4750: 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f 49  alColumn.IsAutoI
4760: 6e 63 72 65 6d 65 6e 74 5d 20 3d 20 28 62 50 72  ncrement] = (bPr
4770: 69 6d 61 72 79 4b 65 79 20 26 26 20 53 74 72 69  imaryKey && Stri
4780: 6e 67 2e 43 6f 6d 70 61 72 65 28 73 74 72 54 79  ng.Compare(strTy
4790: 70 65 2c 20 22 49 6e 74 65 67 65 72 22 2c 20 74  pe, "Integer", t
47a0: 72 75 65 29 20 3d 3d 20 30 29 3b 0a 20 20 20 20  rue) == 0);.    
47b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47c0: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
47d0: 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d  bleOptionalColum
47e0: 6e 2e 49 73 52 65 61 64 4f 6e 6c 79 5d 20 3d 20  n.IsReadOnly] = 
47f0: 21 28 62 6f 6f 6c 29 72 6f 77 5b 53 63 68 65 6d  !(bool)row[Schem
4800: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
4810: 6c 75 6d 6e 2e 49 73 41 75 74 6f 49 6e 63 72 65  lumn.IsAutoIncre
4820: 6d 65 6e 74 5d 3b 0a 20 20 20 20 20 20 20 20 20  ment];.         
4830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
4840: 66 20 28 72 64 54 61 62 6c 65 2e 49 73 44 42 4e  f (rdTable.IsDBN
4850: 75 6c 6c 28 34 29 20 3d 3d 20 66 61 6c 73 65 29  ull(4) == false)
4860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4870: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53             row[S
4880: 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
4890: 61 6c 43 6f 6c 75 6d 6e 2e 44 65 66 61 75 6c 74  alColumn.Default
48a0: 56 61 6c 75 65 5d 20 3d 20 72 64 54 61 62 6c 65  Value] = rdTable
48b0: 5b 34 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20  [4];.           
48c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
48d0: 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ak;.            
48e0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
48f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4900: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
4910: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
4920: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
4930: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
4940: 20 20 20 20 20 20 74 62 6c 2e 52 6f 77 73 2e 41        tbl.Rows.A
4950: 64 64 28 72 6f 77 29 3b 0a 20 20 20 20 20 20 20  dd(row);.       
4960: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
4970: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
4980: 20 20 20 7d 0a 20 20 20 20 20 20 63 61 74 63 68     }.      catch
4990: 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0a 20   (Exception e). 
49a0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 74       {.        t
49b0: 68 72 6f 77 20 28 65 29 3b 0a 20 20 20 20 20 20  hrow (e);.      
49c0: 7d 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0a  }.      finally.
49d0: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
49e0: 63 6e 6e 2e 5f 73 71 6c 2e 53 65 74 52 65 61 6c  cnn._sql.SetReal
49f0: 43 6f 6c 4e 61 6d 65 73 28 66 61 6c 73 65 29 3b  ColNames(false);
4a00: 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
4a10: 74 62 6c 2e 41 63 63 65 70 74 43 68 61 6e 67 65  tbl.AcceptChange
4a20: 73 28 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 45  s();.      tbl.E
4a30: 6e 64 4c 6f 61 64 44 61 74 61 28 29 3b 0a 0a 20  ndLoadData();.. 
4a40: 20 20 20 20 20 72 65 74 75 72 6e 20 74 62 6c 3b       return tbl;
4a50: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20  .    }..    /// 
4a60: 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  <summary>.    //
4a70: 2f 20 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  / .    /// </sum
4a80: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70  mary>.    /// <p
4a90: 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 72 64 69 6e  aram name="ordin
4aa0: 61 6c 22 3e 3c 2f 70 61 72 61 6d 3e 0a 20 20 20  al"></param>.   
4ab0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 3c 2f   /// <returns></
4ac0: 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62  returns>.    pub
4ad0: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73 74 72  lic override str
4ae0: 69 6e 67 20 47 65 74 53 74 72 69 6e 67 28 69 6e  ing GetString(in
4af0: 74 20 6f 72 64 69 6e 61 6c 29 0a 20 20 20 20 7b  t ordinal).    {
4b00: 0a 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70  .      VerifyTyp
4b10: 65 28 6f 72 64 69 6e 61 6c 2c 20 44 62 54 79 70  e(ordinal, DbTyp
4b20: 65 2e 53 74 72 69 6e 67 29 3b 0a 20 20 20 20 20  e.String);.     
4b30: 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53   return _activeS
4b40: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
4b50: 74 54 65 78 74 28 5f 61 63 74 69 76 65 53 74 61  tText(_activeSta
4b60: 74 65 6d 65 6e 74 2c 20 6f 72 64 69 6e 61 6c 29  tement, ordinal)
4b70: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  ;.    }..    ///
4b80: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
4b90: 2f 2f 20 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  // .    /// </su
4ba0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
4bb0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 72 64 69  param name="ordi
4bc0: 6e 61 6c 22 3e 3c 2f 70 61 72 61 6d 3e 0a 20 20  nal"></param>.  
4bd0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 3c    /// <returns><
4be0: 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75  /returns>.    pu
4bf0: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 6f 62  blic override ob
4c00: 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28 69 6e  ject GetValue(in
4c10: 74 20 6f 72 64 69 6e 61 6c 29 0a 20 20 20 20 7b  t ordinal).    {
4c20: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 54 79 70  .      SQLiteTyp
4c30: 65 20 74 79 70 20 3d 20 47 65 74 53 51 4c 69 74  e typ = GetSQLit
4c40: 65 54 79 70 65 28 6f 72 64 69 6e 61 6c 29 3b 0a  eType(ordinal);.
4c50: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61  .      return _a
4c60: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
4c70: 73 71 6c 2e 47 65 74 56 61 6c 75 65 28 5f 61 63  sql.GetValue(_ac
4c80: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 6f  tiveStatement, o
4c90: 72 64 69 6e 61 6c 2c 20 72 65 66 20 74 79 70 29  rdinal, ref typ)
4ca0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  ;.    }..    ///
4cb0: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
4cc0: 2f 2f 20 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  // .    /// </su
4cd0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
4ce0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75  param name="valu
4cf0: 65 73 22 3e 3c 2f 70 61 72 61 6d 3e 0a 20 20 20  es"></param>.   
4d00: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 3c 2f   /// <returns></
4d10: 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62  returns>.    pub
4d20: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 69 6e 74  lic override int
4d30: 20 47 65 74 56 61 6c 75 65 73 28 6f 62 6a 65 63   GetValues(objec
4d40: 74 5b 5d 20 76 61 6c 75 65 73 29 0a 20 20 20 20  t[] values).    
4d50: 7b 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f  {.      CheckClo
4d60: 73 65 64 28 29 3b 0a 20 20 20 20 20 20 69 6e 74  sed();.      int
4d70: 20 6e 4d 61 78 20 3d 20 5f 66 69 65 6c 64 43 6f   nMax = _fieldCo
4d80: 75 6e 74 3b 0a 20 20 20 20 20 20 69 66 20 28 76  unt;.      if (v
4d90: 61 6c 75 65 73 2e 4c 65 6e 67 74 68 20 3c 20 6e  alues.Length < n
4da0: 4d 61 78 29 20 6e 4d 61 78 20 3d 20 76 61 6c 75  Max) nMax = valu
4db0: 65 73 2e 4c 65 6e 67 74 68 3b 0a 0a 20 20 20 20  es.Length;..    
4dc0: 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30    for (int n = 0
4dd0: 3b 20 6e 20 3c 20 6e 4d 61 78 3b 20 6e 2b 2b 29  ; n < nMax; n++)
4de0: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
4df0: 20 76 61 6c 75 65 73 2e 53 65 74 56 61 6c 75 65   values.SetValue
4e00: 28 47 65 74 56 61 6c 75 65 28 6e 29 2c 20 6e 29  (GetValue(n), n)
4e10: 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
4e20: 20 72 65 74 75 72 6e 20 6e 4d 61 78 3b 0a 20 20   return nMax;.  
4e30: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
4e40: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 0a  mmary>.    /// .
4e50: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
4e60: 79 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  y>.    public ov
4e70: 65 72 72 69 64 65 20 62 6f 6f 6c 20 48 61 73 52  erride bool HasR
4e80: 6f 77 73 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ows.    {.      
4e90: 67 65 74 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  get.      {.    
4ea0: 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28      CheckClosed(
4eb0: 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  );.        retur
4ec0: 6e 20 28 5f 72 65 61 64 69 6e 67 53 74 61 74 65  n (_readingState
4ed0: 20 21 3d 20 32 29 3b 0a 20 20 20 20 20 20 7d 0a   != 2);.      }.
4ee0: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
4ef0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
4f00: 20 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d   .    /// </summ
4f10: 61 72 79 3e 0a 20 20 20 20 70 75 62 6c 69 63 20  ary>.    public 
4f20: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73  override bool Is
4f30: 43 6c 6f 73 65 64 0a 20 20 20 20 7b 0a 20 20 20  Closed.    {.   
4f40: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
4f50: 28 5f 63 6f 6d 6d 61 6e 64 20 3d 3d 20 6e 75 6c  (_command == nul
4f60: 6c 29 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20  l); }.    }..   
4f70: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
4f80: 20 20 20 2f 2f 2f 20 0a 20 20 20 20 2f 2f 2f 20     /// .    /// 
4f90: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f  </summary>.    /
4fa0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
4fb0: 6f 72 64 69 6e 61 6c 22 3e 3c 2f 70 61 72 61 6d  ordinal"></param
4fc0: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  >.    /// <retur
4fd0: 6e 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20  ns></returns>.  
4fe0: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
4ff0: 65 20 62 6f 6f 6c 20 49 73 44 42 4e 75 6c 6c 28  e bool IsDBNull(
5000: 69 6e 74 20 6f 72 64 69 6e 61 6c 29 0a 20 20 20  int ordinal).   
5010: 20 7b 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c   {.      CheckCl
5020: 6f 73 65 64 28 29 3b 0a 20 20 20 20 20 20 72 65  osed();.      re
5030: 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74  turn _activeStat
5040: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 49 73 4e 75 6c  ement._sql.IsNul
5050: 6c 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  l(_activeStateme
5060: 6e 74 2c 20 6f 72 64 69 6e 61 6c 29 3b 0a 20 20  nt, ordinal);.  
5070: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
5080: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 0a  mmary>.    /// .
5090: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
50a0: 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  y>.    /// <retu
50b0: 72 6e 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20  rns></returns>. 
50c0: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
50d0: 64 65 20 62 6f 6f 6c 20 4e 65 78 74 52 65 73 75  de bool NextResu
50e0: 6c 74 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  lt().    {.     
50f0: 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0a   CheckClosed();.
5100: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61  .      SQLiteSta
5110: 74 65 6d 65 6e 74 20 73 74 6d 74 3b 0a 20 20 20  tement stmt;.   
5120: 20 20 20 69 6e 74 20 66 69 65 6c 64 43 6f 75 6e     int fieldCoun
5130: 74 3b 0a 0a 20 20 20 20 20 20 77 68 69 6c 65 20  t;..      while 
5140: 28 74 72 75 65 29 0a 20 20 20 20 20 20 7b 0a 20  (true).      {. 
5150: 20 20 20 20 20 20 20 69 66 20 28 5f 61 63 74 69         if (_acti
5160: 76 65 53 74 61 74 65 6d 65 6e 74 20 21 3d 20 6e  veStatement != n
5170: 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 7b 0a 20  ull).        {. 
5180: 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77           // If w
5190: 65 27 72 65 20 6f 6e 6c 79 20 73 75 70 70 6f 73  e're only suppos
51a0: 65 64 20 74 6f 20 72 65 74 75 72 6e 20 61 20 73  ed to return a s
51b0: 69 6e 67 6c 65 20 72 6f 77 73 65 74 2c 20 73 74  ingle rowset, st
51c0: 65 70 20 74 68 72 6f 75 67 68 20 61 6c 6c 20 72  ep through all r
51d0: 65 6d 61 69 6e 69 6e 67 20 73 74 61 74 65 6d 65  emaining stateme
51e0: 6e 74 73 20 6f 6e 63 65 20 75 6e 74 69 6c 0a 20  nts once until. 
51f0: 20 20 20 20 20 20 20 20 20 2f 2f 20 74 68 65 79           // they
5200: 20 61 72 65 20 61 6c 6c 20 64 6f 6e 65 20 61 6e   are all done an
5210: 64 20 72 65 74 75 72 6e 20 66 61 6c 73 65 20 74  d return false t
5220: 6f 20 69 6e 64 69 63 61 74 65 20 6e 6f 20 6d 6f  o indicate no mo
5230: 72 65 20 72 65 73 75 6c 74 73 65 74 73 20 65 78  re resultsets ex
5240: 69 73 74 2e 0a 20 20 20 20 20 20 20 20 20 20 69  ist..          i
5250: 66 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61  f ((_commandBeha
5260: 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65  vior & CommandBe
5270: 68 61 76 69 6f 72 2e 53 69 6e 67 6c 65 52 65 73  havior.SingleRes
5280: 75 6c 74 29 20 21 3d 20 30 29 0a 20 20 20 20 20  ult) != 0).     
5290: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
52a0: 20 20 20 2f 2f 20 52 65 73 65 74 20 74 68 65 20     // Reset the 
52b0: 70 72 65 76 69 6f 75 73 6c 79 2d 65 78 65 63 75  previously-execu
52c0: 74 65 64 20 63 6f 6d 6d 61 6e 64 0a 20 20 20 20  ted command.    
52d0: 20 20 20 20 20 20 20 20 5f 61 63 74 69 76 65 53          _activeS
52e0: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 52 65  tatement._sql.Re
52f0: 73 65 74 28 5f 61 63 74 69 76 65 53 74 61 74 65  set(_activeState
5300: 6d 65 6e 74 29 3b 0a 0a 20 20 20 20 20 20 20 20  ment);..        
5310: 20 20 20 20 77 68 69 6c 65 20 28 5f 61 63 74 69      while (_acti
5320: 76 65 53 74 61 74 65 6d 65 6e 74 49 6e 64 65 78  veStatementIndex
5330: 20 2b 20 31 20 21 3d 20 5f 63 6f 6d 6d 61 6e 64   + 1 != _command
5340: 2e 5f 73 74 61 74 65 6d 65 6e 74 4c 69 73 74 2e  ._statementList.
5350: 4c 65 6e 67 74 68 29 0a 20 20 20 20 20 20 20 20  Length).        
5360: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
5370: 20 20 20 20 5f 61 63 74 69 76 65 53 74 61 74 65      _activeState
5380: 6d 65 6e 74 49 6e 64 65 78 2b 2b 3b 0a 20 20 20  mentIndex++;.   
5390: 20 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 20             stmt 
53a0: 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 5f 73 74 61 74  = _command._stat
53b0: 65 6d 65 6e 74 4c 69 73 74 5b 5f 61 63 74 69 76  ementList[_activ
53c0: 65 53 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 5d  eStatementIndex]
53d0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
53e0: 73 74 6d 74 2e 5f 73 71 6c 2e 53 74 65 70 28 73  stmt._sql.Step(s
53f0: 74 6d 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  tmt);.          
5400: 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c 2e 52 65      stmt._sql.Re
5410: 73 65 74 28 73 74 6d 74 29 3b 20 2f 2f 20 47 6f  set(stmt); // Go
5420: 74 74 61 20 72 65 73 65 74 20 61 66 74 65 72 20  tta reset after 
5430: 65 76 65 72 79 20 73 74 65 70 20 74 6f 20 72 65  every step to re
5440: 6c 65 61 73 65 20 61 6e 79 20 6c 6f 63 6b 73 20  lease any locks 
5450: 61 6e 64 20 73 75 63 68 21 0a 20 20 20 20 20 20  and such!.      
5460: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5470: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
5480: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20  ;.          }.. 
5490: 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65 73 65           // Rese
54a0: 74 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79  t the previously
54b0: 2d 65 78 65 63 75 74 65 64 20 63 6f 6d 6d 61 6e  -executed comman
54c0: 64 0a 20 20 20 20 20 20 20 20 20 20 5f 61 63 74  d.          _act
54d0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
54e0: 6c 2e 52 65 73 65 74 28 5f 61 63 74 69 76 65 53  l.Reset(_activeS
54f0: 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20 20 20  tatement);.     
5500: 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f 2f     }..        //
5510: 20 49 66 20 77 65 27 76 65 20 72 65 61 63 68 65   If we've reache
5520: 64 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  d the end of the
5530: 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 72 65 74   statements, ret
5540: 75 72 6e 20 66 61 6c 73 65 2c 20 6e 6f 20 6d 6f  urn false, no mo
5550: 72 65 20 72 65 73 75 6c 74 73 65 74 73 0a 20 20  re resultsets.  
5560: 20 20 20 20 20 20 69 66 20 28 5f 61 63 74 69 76        if (_activ
5570: 65 53 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 20  eStatementIndex 
5580: 2b 20 31 20 3d 3d 20 5f 63 6f 6d 6d 61 6e 64 2e  + 1 == _command.
5590: 5f 73 74 61 74 65 6d 65 6e 74 4c 69 73 74 2e 4c  _statementList.L
55a0: 65 6e 67 74 68 29 0a 20 20 20 20 20 20 20 20 20  ength).         
55b0: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a 0a   return false;..
55c0: 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65          // If we
55d0: 20 77 65 72 65 20 6f 6e 20 61 20 72 65 73 75 6c   were on a resul
55e0: 74 73 65 74 2c 20 73 65 74 20 74 68 65 20 73 74  tset, set the st
55f0: 61 74 65 20 74 6f 20 22 64 6f 6e 65 20 72 65 61  ate to "done rea
5600: 64 69 6e 67 22 20 66 6f 72 20 69 74 0a 20 20 20  ding" for it.   
5610: 20 20 20 20 20 69 66 20 28 5f 72 65 61 64 69 6e       if (_readin
5620: 67 53 74 61 74 65 20 3c 20 31 29 0a 20 20 20 20  gState < 1).    
5630: 20 20 20 20 20 20 5f 72 65 61 64 69 6e 67 53 74        _readingSt
5640: 61 74 65 20 3d 20 31 3b 0a 0a 20 20 20 20 20 20  ate = 1;..      
5650: 20 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65    _activeStateme
5660: 6e 74 49 6e 64 65 78 2b 2b 3b 0a 0a 20 20 20 20  ntIndex++;..    
5670: 20 20 20 20 73 74 6d 74 20 3d 20 5f 63 6f 6d 6d      stmt = _comm
5680: 61 6e 64 2e 5f 73 74 61 74 65 6d 65 6e 74 4c 69  and._statementLi
5690: 73 74 5b 5f 61 63 74 69 76 65 53 74 61 74 65 6d  st[_activeStatem
56a0: 65 6e 74 49 6e 64 65 78 5d 3b 0a 20 20 20 20 20  entIndex];.     
56b0: 20 20 20 66 69 65 6c 64 43 6f 75 6e 74 20 3d 20     fieldCount = 
56c0: 73 74 6d 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e  stmt._sql.Column
56d0: 43 6f 75 6e 74 28 73 74 6d 74 29 3b 0a 0a 20 20  Count(stmt);..  
56e0: 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27 72        // If we'r
56f0: 65 20 74 6f 6c 64 20 74 6f 20 67 65 74 20 73 63  e told to get sc
5700: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
5710: 20 6f 6e 6c 79 2c 20 74 68 65 6e 20 64 6f 6e 27   only, then don'
5720: 74 20 70 65 72 66 6f 72 6d 20 61 6e 20 69 6e 69  t perform an ini
5730: 74 69 61 6c 20 73 74 65 70 28 29 20 74 68 72 6f  tial step() thro
5740: 75 67 68 20 74 68 65 20 72 65 73 75 6c 74 73 65  ugh the resultse
5750: 74 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f  t.        if ((_
5760: 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20  commandBehavior 
5770: 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f  & CommandBehavio
5780: 72 2e 53 63 68 65 6d 61 4f 6e 6c 79 29 20 3d 3d  r.SchemaOnly) ==
5790: 20 30 20 7c 7c 20 66 69 65 6c 64 43 6f 75 6e 74   0 || fieldCount
57a0: 20 3d 3d 20 30 29 0a 20 20 20 20 20 20 20 20 7b   == 0).        {
57b0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73  .          if (s
57c0: 74 6d 74 2e 5f 73 71 6c 2e 53 74 65 70 28 73 74  tmt._sql.Step(st
57d0: 6d 74 29 29 0a 20 20 20 20 20 20 20 20 20 20 7b  mt)).          {
57e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 72 65  .            _re
57f0: 61 64 69 6e 67 53 74 61 74 65 20 3d 20 2d 31 3b  adingState = -1;
5800: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
5810: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
5820: 66 69 65 6c 64 43 6f 75 6e 74 20 3d 3d 20 30 29  fieldCount == 0)
5830: 20 2f 2f 20 4e 6f 20 72 6f 77 73 20 72 65 74 75   // No rows retu
5840: 72 6e 65 64 2c 20 69 66 20 66 69 65 6c 64 43 6f  rned, if fieldCo
5850: 75 6e 74 20 69 73 20 7a 65 72 6f 2c 20 73 6b 69  unt is zero, ski
5860: 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20 73 74  p to the next st
5870: 61 74 65 6d 65 6e 74 0a 20 20 20 20 20 20 20 20  atement.        
5880: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
5890: 73 74 6d 74 2e 5f 73 71 6c 2e 52 65 73 65 74 28  stmt._sql.Reset(
58a0: 73 74 6d 74 29 3b 0a 20 20 20 20 20 20 20 20 20  stmt);.         
58b0: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 20 2f 2f 20     continue; // 
58c0: 53 6b 69 70 20 74 68 69 73 20 63 6f 6d 6d 61 6e  Skip this comman
58d0: 64 20 61 6e 64 20 6d 6f 76 65 20 74 6f 20 74 68  d and move to th
58e0: 65 20 6e 65 78 74 2c 20 69 74 20 77 61 73 20 6e  e next, it was n
58f0: 6f 74 20 61 20 72 6f 77 2d 72 65 74 75 72 6e 69  ot a row-returni
5900: 6e 67 20 72 65 73 75 6c 74 73 65 74 0a 20 20 20  ng resultset.   
5910: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
5920: 20 20 20 65 6c 73 65 20 2f 2f 20 4e 6f 20 72 6f     else // No ro
5930: 77 73 2c 20 66 69 65 6c 64 43 6f 75 6e 74 20 69  ws, fieldCount i
5940: 73 20 6e 6f 6e 2d 7a 65 72 6f 20 73 6f 20 73 74  s non-zero so st
5950: 6f 70 20 68 65 72 65 0a 20 20 20 20 20 20 20 20  op here.        
5960: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
5970: 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d 20  _readingState = 
5980: 31 3b 20 2f 2f 20 54 68 69 73 20 63 6f 6d 6d 61  1; // This comma
5990: 6e 64 20 72 65 74 75 72 6e 65 64 20 63 6f 6c 75  nd returned colu
59a0: 6d 6e 73 20 62 75 74 20 6e 6f 20 72 6f 77 73 2c  mns but no rows,
59b0: 20 73 6f 20 72 65 74 75 72 6e 20 74 72 75 65 2c   so return true,
59c0: 20 62 75 74 20 48 61 73 52 6f 77 73 20 3d 20 66   but HasRows = f
59d0: 61 6c 73 65 20 61 6e 64 20 52 65 61 64 28 29 20  alse and Read() 
59e0: 72 65 74 75 72 6e 73 20 66 61 6c 73 65 0a 20 20  returns false.  
59f0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
5a00: 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20    }..        // 
5a10: 41 68 68 2c 20 77 65 20 66 6f 75 6e 64 20 61 20  Ahh, we found a 
5a20: 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20 72 65  row-returning re
5a30: 73 75 6c 74 73 65 74 20 65 6c 69 67 69 62 6c 65  sultset eligible
5a40: 20 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64 21   to be returned!
5a50: 0a 20 20 20 20 20 20 20 20 5f 61 63 74 69 76 65  .        _active
5a60: 53 74 61 74 65 6d 65 6e 74 20 3d 20 73 74 6d 74  Statement = stmt
5a70: 3b 0a 20 20 20 20 20 20 20 20 5f 66 69 65 6c 64  ;.        _field
5a80: 43 6f 75 6e 74 20 3d 20 66 69 65 6c 64 43 6f 75  Count = fieldCou
5a90: 6e 74 3b 0a 20 20 20 20 20 20 20 20 5f 66 69 65  nt;.        _fie
5aa0: 6c 64 54 79 70 65 41 72 72 61 79 20 3d 20 6e 75  ldTypeArray = nu
5ab0: 6c 6c 3b 0a 0a 20 20 20 20 20 20 20 20 72 65 74  ll;..        ret
5ac0: 75 72 6e 20 74 72 75 65 3b 0a 20 20 20 20 20 20  urn true;.      
5ad0: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 69  }.    }..    pri
5ae0: 76 61 74 65 20 53 51 4c 69 74 65 54 79 70 65 20  vate SQLiteType 
5af0: 47 65 74 53 51 4c 69 74 65 54 79 70 65 28 69 6e  GetSQLiteType(in
5b00: 74 20 6f 72 64 69 6e 61 6c 29 0a 20 20 20 20 7b  t ordinal).    {
5b10: 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73  .      CheckClos
5b20: 65 64 28 29 3b 0a 20 20 20 20 20 20 69 66 20 28  ed();.      if (
5b30: 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 20  _fieldTypeArray 
5b40: 3d 3d 20 6e 75 6c 6c 29 20 5f 66 69 65 6c 64 54  == null) _fieldT
5b50: 79 70 65 41 72 72 61 79 20 3d 20 6e 65 77 20 53  ypeArray = new S
5b60: 51 4c 69 74 65 54 79 70 65 5b 5f 66 69 65 6c 64  QLiteType[_field
5b70: 43 6f 75 6e 74 5d 3b 0a 0a 20 20 20 20 20 20 69  Count];..      i
5b80: 66 20 28 5f 66 69 65 6c 64 54 79 70 65 41 72 72  f (_fieldTypeArr
5b90: 61 79 5b 6f 72 64 69 6e 61 6c 5d 2e 41 66 66 69  ay[ordinal].Affi
5ba0: 6e 69 74 79 20 3d 3d 20 30 29 0a 20 20 20 20 20  nity == 0).     
5bb0: 20 20 20 5f 66 69 65 6c 64 54 79 70 65 41 72 72     _fieldTypeArr
5bc0: 61 79 5b 6f 72 64 69 6e 61 6c 5d 2e 54 79 70 65  ay[ordinal].Type
5bd0: 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74   = SQLiteConvert
5be0: 2e 54 79 70 65 4e 61 6d 65 54 6f 44 62 54 79 70  .TypeNameToDbTyp
5bf0: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
5c00: 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79  nt._sql.ColumnTy
5c10: 70 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  pe(_activeStatem
5c20: 65 6e 74 2c 20 6f 72 64 69 6e 61 6c 2c 20 6f 75  ent, ordinal, ou
5c30: 74 20 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61  t _fieldTypeArra
5c40: 79 5b 6f 72 64 69 6e 61 6c 5d 2e 41 66 66 69 6e  y[ordinal].Affin
5c50: 69 74 79 29 29 3b 0a 20 20 20 20 20 20 72 65 74  ity));.      ret
5c60: 75 72 6e 20 5f 66 69 65 6c 64 54 79 70 65 41 72  urn _fieldTypeAr
5c70: 72 61 79 5b 6f 72 64 69 6e 61 6c 5d 3b 0a 20 20  ray[ordinal];.  
5c80: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
5c90: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 0a  mmary>.    /// .
5ca0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
5cb0: 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  y>.    /// <retu
5cc0: 72 6e 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20  rns></returns>. 
5cd0: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
5ce0: 64 65 20 62 6f 6f 6c 20 52 65 61 64 28 29 0a 20  de bool Read(). 
5cf0: 20 20 20 7b 0a 20 20 20 20 20 20 43 68 65 63 6b     {.      Check
5d00: 43 6c 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20 20  Closed();..     
5d10: 20 69 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61   if (_readingSta
5d20: 74 65 20 3d 3d 20 2d 31 29 20 2f 2f 20 46 69 72  te == -1) // Fir
5d30: 73 74 20 73 74 65 70 20 77 61 73 20 61 6c 72 65  st step was alre
5d40: 61 64 79 20 64 6f 6e 65 20 61 74 20 74 68 65 20  ady done at the 
5d50: 4e 65 78 74 52 65 73 75 6c 74 28 29 20 6c 65 76  NextResult() lev
5d60: 65 6c 2c 20 73 6f 20 64 6f 6e 27 74 20 73 74 65  el, so don't ste
5d70: 70 20 61 67 61 69 6e 2c 20 6a 75 73 74 20 72 65  p again, just re
5d80: 74 75 72 6e 20 74 72 75 65 2e 0a 20 20 20 20 20  turn true..     
5d90: 20 7b 0a 20 20 20 20 20 20 20 20 5f 72 65 61 64   {.        _read
5da0: 69 6e 67 53 74 61 74 65 20 3d 20 30 3b 0a 20 20  ingState = 0;.  
5db0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
5dc0: 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  e;.      }.     
5dd0: 20 65 6c 73 65 20 69 66 20 28 5f 72 65 61 64 69   else if (_readi
5de0: 6e 67 53 74 61 74 65 20 3d 3d 20 30 29 20 2f 2f  ngState == 0) //
5df0: 20 41 63 74 69 76 65 6c 79 20 72 65 61 64 69 6e   Actively readin
5e00: 67 20 72 6f 77 73 0a 20 20 20 20 20 20 7b 0a 20  g rows.      {. 
5e10: 20 20 20 20 20 20 20 69 66 20 28 5f 61 63 74 69         if (_acti
5e20: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
5e30: 2e 53 74 65 70 28 5f 61 63 74 69 76 65 53 74 61  .Step(_activeSta
5e40: 74 65 6d 65 6e 74 29 20 3d 3d 20 74 72 75 65 29  tement) == true)
5e50: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
5e60: 6e 20 74 72 75 65 3b 0a 0a 20 20 20 20 20 20 20  n true;..       
5e70: 20 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d   _readingState =
5e80: 20 31 3b 20 2f 2f 20 46 69 6e 69 73 68 65 64 20   1; // Finished 
5e90: 72 65 61 64 69 6e 67 20 72 6f 77 73 0a 20 20 20  reading rows.   
5ea0: 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 65 74 75     }..      retu
5eb0: 72 6e 20 66 61 6c 73 65 3b 0a 20 20 20 20 7d 0a  rn false;.    }.
5ec0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
5ed0: 79 3e 0a 20 20 20 20 2f 2f 2f 20 0a 20 20 20 20  y>.    /// .    
5ee0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
5ef0: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
5f00: 64 65 20 69 6e 74 20 52 65 63 6f 72 64 73 41 66  de int RecordsAf
5f10: 66 65 63 74 65 64 0a 20 20 20 20 7b 0a 20 20 20  fected.    {.   
5f20: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
5f30: 5f 72 6f 77 73 41 66 66 65 63 74 65 64 3b 20 7d  _rowsAffected; }
5f40: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20  .    }..    /// 
5f50: 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  <summary>.    //
5f60: 2f 20 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  / .    /// </sum
5f70: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70  mary>.    /// <p
5f80: 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22  aram name="name"
5f90: 3e 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f  ></param>.    //
5fa0: 2f 20 3c 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74  / <returns></ret
5fb0: 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63  urns>.    public
5fc0: 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74   override object
5fd0: 20 74 68 69 73 5b 73 74 72 69 6e 67 20 6e 61 6d   this[string nam
5fe0: 65 5d 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67  e].    {.      g
5ff0: 65 74 20 7b 20 72 65 74 75 72 6e 20 47 65 74 56  et { return GetV
6000: 61 6c 75 65 28 47 65 74 4f 72 64 69 6e 61 6c 28  alue(GetOrdinal(
6010: 6e 61 6d 65 29 29 3b 20 7d 0a 20 20 20 20 7d 0a  name)); }.    }.
6020: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
6030: 79 3e 0a 20 20 20 20 2f 2f 2f 20 0a 20 20 20 20  y>.    /// .    
6040: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
6050: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
6060: 6d 65 3d 22 6f 72 64 69 6e 61 6c 22 3e 3c 2f 70  me="ordinal"></p
6070: 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72  aram>.    /// <r
6080: 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72 6e 73  eturns></returns
6090: 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  >.    public ove
60a0: 72 72 69 64 65 20 6f 62 6a 65 63 74 20 74 68 69  rride object thi
60b0: 73 5b 69 6e 74 20 6f 72 64 69 6e 61 6c 5d 0a 20  s[int ordinal]. 
60c0: 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 20 7b     {.      get {
60d0: 20 72 65 74 75 72 6e 20 47 65 74 56 61 6c 75 65   return GetValue
60e0: 28 6f 72 64 69 6e 61 6c 29 3b 20 7d 0a 20 20 20  (ordinal); }.   
60f0: 20 7d 0a 20 20 7d 0a 7d 0a                        }.  }.}.