System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact adb4e71f9b1c3d0af50263c2640dbefab1674f5a:


0000: 2f 2a 2a 2a 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 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 20 0d 0a  soft.com).. * ..
00b0: 20 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74   * Released to t
00c0: 68 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e  he public domain
00d0: 2c 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77  , use at your ow
00e0: 6e 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a  n 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: 2a 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65  **/....namespace
0130: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
0140: 69 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20  ite..{..  using 
0150: 53 79 73 74 65 6d 3b 0d 0a 0d 0a 23 69 66 20 21  System;....#if !
0160: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
0170: 26 20 54 52 41 43 45 5f 57 41 52 4e 49 4e 47 0d  & TRACE_WARNING.
0180: 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e  .  using System.
0190: 44 69 61 67 6e 6f 73 74 69 63 73 3b 0d 0a 23 65  Diagnostics;..#e
01a0: 6e 64 69 66 0d 0a 0d 0a 20 20 75 73 69 6e 67 20  ndif....  using 
01b0: 53 79 73 74 65 6d 2e 52 75 6e 74 69 6d 65 2e 49  System.Runtime.I
01c0: 6e 74 65 72 6f 70 53 65 72 76 69 63 65 73 3b 0d  nteropServices;.
01d0: 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e  .  using System.
01e0: 43 6f 6c 6c 65 63 74 69 6f 6e 73 2e 47 65 6e 65  Collections.Gene
01f0: 72 69 63 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79  ric;..  using Sy
0200: 73 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74 69  stem.Globalizati
0210: 6f 6e 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79 73  on;..  using Sys
0220: 74 65 6d 2e 54 65 78 74 3b 0d 0a 0d 0a 20 20 2f  tem.Text;....  /
0230: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
0240: 2f 2f 2f 20 54 68 69 73 20 62 61 73 65 20 63 6c  /// This base cl
0250: 61 73 73 20 70 72 6f 76 69 64 65 73 20 64 61 74  ass provides dat
0260: 61 74 79 70 65 20 63 6f 6e 76 65 72 73 69 6f 6e  atype conversion
0270: 20 73 65 72 76 69 63 65 73 20 66 6f 72 20 74 68   services for th
0280: 65 20 53 51 4c 69 74 65 20 70 72 6f 76 69 64 65  e SQLite provide
0290: 72 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  r...  /// </summ
02a0: 61 72 79 3e 0d 0a 20 20 70 75 62 6c 69 63 20 61  ary>..  public a
02b0: 62 73 74 72 61 63 74 20 63 6c 61 73 73 20 53 51  bstract class SQ
02c0: 4c 69 74 65 43 6f 6e 76 65 72 74 0d 0a 20 20 7b  LiteConvert..  {
02d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
02e0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ry>..    /// The
02f0: 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 55   value for the U
0300: 6e 69 78 20 65 70 6f 63 68 20 28 65 2e 67 2e 20  nix epoch (e.g. 
0310: 4a 61 6e 75 61 72 79 20 31 2c 20 31 39 37 30 20  January 1, 1970 
0320: 61 74 20 6d 69 64 6e 69 67 68 74 2c 20 69 6e 20  at midnight, in 
0330: 55 54 43 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  UTC)...    /// <
0340: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
0350: 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20  rotected static 
0360: 72 65 61 64 6f 6e 6c 79 20 44 61 74 65 54 69 6d  readonly DateTim
0370: 65 20 55 6e 69 78 45 70 6f 63 68 20 3d 0d 0a 20  e UnixEpoch =.. 
0380: 20 20 20 20 20 20 20 6e 65 77 20 44 61 74 65 54         new DateT
0390: 69 6d 65 28 31 39 37 30 2c 20 31 2c 20 31 2c 20  ime(1970, 1, 1, 
03a0: 30 2c 20 30 2c 20 30 2c 20 44 61 74 65 54 69 6d  0, 0, 0, DateTim
03b0: 65 4b 69 6e 64 2e 55 74 63 29 3b 0d 0a 0d 0a 20  eKind.Utc);.... 
03c0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
03d0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 61  ..    /// The va
03e0: 6c 75 65 20 6f 66 20 74 68 65 20 4f 4c 45 20 41  lue of the OLE A
03f0: 75 74 6f 6d 61 74 69 6f 6e 20 65 70 6f 63 68 20  utomation epoch 
0400: 72 65 70 72 65 73 65 6e 74 65 64 20 61 73 20 61  represented as a
0410: 20 4a 75 6c 69 61 6e 20 64 61 79 2e 0d 0a 20 20   Julian day...  
0420: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0430: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74  ..    private st
0440: 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 64 6f  atic readonly do
0450: 75 62 6c 65 20 4f 6c 65 41 75 74 6f 6d 61 74 69  uble OleAutomati
0460: 6f 6e 45 70 6f 63 68 41 73 4a 75 6c 69 61 6e 44  onEpochAsJulianD
0470: 61 79 20 3d 20 32 34 31 35 30 31 38 2e 35 3b 0d  ay = 2415018.5;.
0480: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
0490: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
04a0: 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  e format string 
04b0: 66 6f 72 20 44 61 74 65 54 69 6d 65 20 76 61 6c  for DateTime val
04c0: 75 65 73 20 77 68 65 6e 20 75 73 69 6e 67 20 74  ues when using t
04d0: 68 65 20 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  he InvariantCult
04e0: 75 72 65 20 6f 72 20 43 75 72 72 65 6e 74 43 75  ure or CurrentCu
04f0: 6c 74 75 72 65 20 66 6f 72 6d 61 74 73 2e 0d 0a  lture formats...
0500: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0510: 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  y>..    private 
0520: 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 46 75 6c  const string Ful
0530: 6c 46 6f 72 6d 61 74 20 3d 20 22 79 79 79 79 2d  lFormat = "yyyy-
0540: 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 66  MM-ddTHH:mm:ss.f
0550: 66 66 66 66 66 66 4b 22 3b 0d 0a 0d 0a 20 20 20  ffffffK";....   
0560: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0570: 20 20 20 20 2f 2f 2f 20 41 6e 20 61 72 72 61 79      /// An array
0580: 20 6f 66 20 49 53 4f 38 36 30 31 20 64 61 74 65   of ISO8601 date
0590: 74 69 6d 65 20 66 6f 72 6d 61 74 73 20 77 65 20  time formats we 
05a0: 73 75 70 70 6f 72 74 20 63 6f 6e 76 65 72 73 69  support conversi
05b0: 6f 6e 20 66 72 6f 6d 0d 0a 20 20 20 20 2f 2f 2f  on from..    ///
05c0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
05d0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
05e0: 73 74 72 69 6e 67 5b 5d 20 5f 64 61 74 65 74 69  string[] _dateti
05f0: 6d 65 46 6f 72 6d 61 74 73 20 3d 20 6e 65 77 20  meFormats = new 
0600: 73 74 72 69 6e 67 5b 5d 20 7b 0d 0a 20 20 20 20  string[] {..    
0610: 20 20 22 54 48 48 6d 6d 73 73 4b 22 2c 0d 0a 20    "THHmmssK",.. 
0620: 20 20 20 20 20 22 54 48 48 6d 6d 4b 22 2c 0d 0a       "THHmmK",..
0630: 20 20 20 20 20 20 22 48 48 3a 6d 6d 3a 73 73 2e        "HH:mm:ss.
0640: 46 46 46 46 46 46 46 4b 22 2c 0d 0a 20 20 20 20  FFFFFFFK",..    
0650: 20 20 22 48 48 3a 6d 6d 3a 73 73 4b 22 2c 0d 0a    "HH:mm:ssK",..
0660: 20 20 20 20 20 20 22 48 48 3a 6d 6d 4b 22 2c 0d        "HH:mmK",.
0670: 0a 20 20 20 20 20 20 22 79 79 79 79 2d 4d 4d 2d  .      "yyyy-MM-
0680: 64 64 20 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46  dd HH:mm:ss.FFFF
0690: 46 46 46 4b 22 2c 20 2f 2a 20 4e 4f 54 45 3a 20  FFFK", /* NOTE: 
06a0: 55 54 43 20 64 65 66 61 75 6c 74 20 28 35 29 2e  UTC default (5).
06b0: 20 2a 2f 0d 0a 20 20 20 20 20 20 22 79 79 79 79   */..      "yyyy
06c0: 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 4b  -MM-dd HH:mm:ssK
06d0: 22 2c 0d 0a 20 20 20 20 20 20 22 79 79 79 79 2d  ",..      "yyyy-
06e0: 4d 4d 2d 64 64 20 48 48 3a 6d 6d 4b 22 2c 0d 0a  MM-dd HH:mmK",..
06f0: 20 20 20 20 20 20 22 79 79 79 79 2d 4d 4d 2d 64        "yyyy-MM-d
0700: 64 54 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46  dTHH:mm:ss.FFFFF
0710: 46 46 4b 22 2c 0d 0a 20 20 20 20 20 20 22 79 79  FFK",..      "yy
0720: 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 4b 22  yy-MM-ddTHH:mmK"
0730: 2c 0d 0a 20 20 20 20 20 20 22 79 79 79 79 2d 4d  ,..      "yyyy-M
0740: 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 4b 22 2c  M-ddTHH:mm:ssK",
0750: 0d 0a 20 20 20 20 20 20 22 79 79 79 79 4d 4d 64  ..      "yyyyMMd
0760: 64 48 48 6d 6d 73 73 4b 22 2c 0d 0a 20 20 20 20  dHHmmssK",..    
0770: 20 20 22 79 79 79 79 4d 4d 64 64 48 48 6d 6d 4b    "yyyyMMddHHmmK
0780: 22 2c 0d 0a 20 20 20 20 20 20 22 79 79 79 79 4d  ",..      "yyyyM
0790: 4d 64 64 54 48 48 6d 6d 73 73 46 46 46 46 46 46  MddTHHmmssFFFFFF
07a0: 46 4b 22 2c 0d 0a 20 20 20 20 20 20 22 54 48 48  FK",..      "THH
07b0: 6d 6d 73 73 22 2c 0d 0a 20 20 20 20 20 20 22 54  mmss",..      "T
07c0: 48 48 6d 6d 22 2c 0d 0a 20 20 20 20 20 20 22 48  HHmm",..      "H
07d0: 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 22  H:mm:ss.FFFFFFF"
07e0: 2c 0d 0a 20 20 20 20 20 20 22 48 48 3a 6d 6d 3a  ,..      "HH:mm:
07f0: 73 73 22 2c 0d 0a 20 20 20 20 20 20 22 48 48 3a  ss",..      "HH:
0800: 6d 6d 22 2c 0d 0a 20 20 20 20 20 20 22 79 79 79  mm",..      "yyy
0810: 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73  y-MM-dd HH:mm:ss
0820: 2e 46 46 46 46 46 46 46 22 2c 20 2f 2a 20 4e 4f  .FFFFFFF", /* NO
0830: 54 45 3a 20 4e 6f 6e 2d 55 54 43 20 64 65 66 61  TE: Non-UTC defa
0840: 75 6c 74 20 28 31 39 29 2e 20 2a 2f 0d 0a 20 20  ult (19). */..  
0850: 20 20 20 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20      "yyyy-MM-dd 
0860: 48 48 3a 6d 6d 3a 73 73 22 2c 0d 0a 20 20 20 20  HH:mm:ss",..    
0870: 20 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48    "yyyy-MM-dd HH
0880: 3a 6d 6d 22 2c 0d 0a 20 20 20 20 20 20 22 79 79  :mm",..      "yy
0890: 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73  yy-MM-ddTHH:mm:s
08a0: 73 2e 46 46 46 46 46 46 46 22 2c 0d 0a 20 20 20  s.FFFFFFF",..   
08b0: 20 20 20 22 79 79 79 79 2d 4d 4d 2d 64 64 54 48     "yyyy-MM-ddTH
08c0: 48 3a 6d 6d 22 2c 0d 0a 20 20 20 20 20 20 22 79  H:mm",..      "y
08d0: 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a  yyy-MM-ddTHH:mm:
08e0: 73 73 22 2c 0d 0a 20 20 20 20 20 20 22 79 79 79  ss",..      "yyy
08f0: 79 4d 4d 64 64 48 48 6d 6d 73 73 22 2c 0d 0a 20  yMMddHHmmss",.. 
0900: 20 20 20 20 20 22 79 79 79 79 4d 4d 64 64 48 48       "yyyyMMddHH
0910: 6d 6d 22 2c 0d 0a 20 20 20 20 20 20 22 79 79 79  mm",..      "yyy
0920: 79 4d 4d 64 64 54 48 48 6d 6d 73 73 46 46 46 46  yMMddTHHmmssFFFF
0930: 46 46 46 22 2c 0d 0a 20 20 20 20 20 20 22 79 79  FFF",..      "yy
0940: 79 79 2d 4d 4d 2d 64 64 22 2c 0d 0a 20 20 20 20  yy-MM-dd",..    
0950: 20 20 22 79 79 79 79 4d 4d 64 64 22 2c 0d 0a 20    "yyyyMMdd",.. 
0960: 20 20 20 20 20 22 79 79 2d 4d 4d 2d 64 64 22 0d       "yy-MM-dd".
0970: 0a 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 2f  .    };....    /
0980: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
0990: 20 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65 72 6e    /// The intern
09a0: 61 6c 20 64 65 66 61 75 6c 74 20 66 6f 72 6d 61  al default forma
09b0: 74 20 66 6f 72 20 55 54 43 20 44 61 74 65 54 69  t for UTC DateTi
09c0: 6d 65 20 76 61 6c 75 65 73 20 77 68 65 6e 20 63  me values when c
09d0: 6f 6e 76 65 72 74 69 6e 67 0d 0a 20 20 20 20 2f  onverting..    /
09e0: 2f 2f 20 74 6f 20 61 20 73 74 72 69 6e 67 2e 0d  // to a string..
09f0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
0a00: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
0a10: 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79   static readonly
0a20: 20 73 74 72 69 6e 67 20 5f 64 61 74 65 74 69 6d   string _datetim
0a30: 65 46 6f 72 6d 61 74 55 74 63 20 3d 20 5f 64 61  eFormatUtc = _da
0a40: 74 65 74 69 6d 65 46 6f 72 6d 61 74 73 5b 35 5d  tetimeFormats[5]
0a50: 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ;....    /// <su
0a60: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
0a70: 54 68 65 20 69 6e 74 65 72 6e 61 6c 20 64 65 66  The internal def
0a80: 61 75 6c 74 20 66 6f 72 6d 61 74 20 66 6f 72 20  ault format for 
0a90: 6c 6f 63 61 6c 20 44 61 74 65 54 69 6d 65 20 76  local DateTime v
0aa0: 61 6c 75 65 73 20 77 68 65 6e 20 63 6f 6e 76 65  alues when conve
0ab0: 72 74 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 74  rting..    /// t
0ac0: 6f 20 61 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20  o a string...   
0ad0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0ae0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61  .    private sta
0af0: 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72  tic readonly str
0b00: 69 6e 67 20 5f 64 61 74 65 74 69 6d 65 46 6f 72  ing _datetimeFor
0b10: 6d 61 74 4c 6f 63 61 6c 20 3d 20 5f 64 61 74 65  matLocal = _date
0b20: 74 69 6d 65 46 6f 72 6d 61 74 73 5b 31 39 5d 3b  timeFormats[19];
0b30: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
0b40: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41  mary>..    /// A
0b50: 6e 20 55 54 46 2d 38 20 45 6e 63 6f 64 69 6e 67  n UTF-8 Encoding
0b60: 20 69 6e 73 74 61 6e 63 65 2c 20 73 6f 20 77 65   instance, so we
0b70: 20 63 61 6e 20 63 6f 6e 76 65 72 74 20 73 74 72   can convert str
0b80: 69 6e 67 73 20 74 6f 20 61 6e 64 20 66 72 6f 6d  ings to and from
0b90: 20 55 54 46 2d 38 0d 0a 20 20 20 20 2f 2f 2f 20   UTF-8..    /// 
0ba0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
0bb0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 45  private static E
0bc0: 6e 63 6f 64 69 6e 67 20 5f 75 74 66 38 20 3d 20  ncoding _utf8 = 
0bd0: 6e 65 77 20 55 54 46 38 45 6e 63 6f 64 69 6e 67  new UTF8Encoding
0be0: 28 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ();..    /// <su
0bf0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
0c00: 54 68 65 20 64 65 66 61 75 6c 74 20 44 61 74 65  The default Date
0c10: 54 69 6d 65 20 66 6f 72 6d 61 74 20 66 6f 72 20  Time format for 
0c20: 74 68 69 73 20 69 6e 73 74 61 6e 63 65 0d 0a 20  this instance.. 
0c30: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0c40: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
0c50: 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74  SQLiteDateFormat
0c60: 73 20 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61  s _datetimeForma
0c70: 74 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  t;..    /// <sum
0c80: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
0c90: 68 65 20 64 65 66 61 75 6c 74 20 44 61 74 65 54  he default DateT
0ca0: 69 6d 65 4b 69 6e 64 20 66 6f 72 20 74 68 69 73  imeKind for this
0cb0: 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
0cc0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
0cd0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 44 61 74      internal Dat
0ce0: 65 54 69 6d 65 4b 69 6e 64 20 5f 64 61 74 65 74  eTimeKind _datet
0cf0: 69 6d 65 4b 69 6e 64 3b 0d 0a 20 20 20 20 2f 2f  imeKind;..    //
0d00: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0d10: 20 2f 2f 2f 20 49 6e 69 74 69 61 6c 69 7a 65 73   /// Initializes
0d20: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
0d30: 63 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c  class..    /// <
0d40: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
0d50: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
0d60: 66 6d 74 22 3e 54 68 65 20 64 65 66 61 75 6c 74  fmt">The default
0d70: 20 64 61 74 65 2f 74 69 6d 65 20 66 6f 72 6d 61   date/time forma
0d80: 74 20 74 6f 20 75 73 65 20 66 6f 72 20 74 68 69  t to use for thi
0d90: 73 20 69 6e 73 74 61 6e 63 65 3c 2f 70 61 72 61  s instance</para
0da0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
0db0: 61 6d 20 6e 61 6d 65 3d 22 6b 69 6e 64 22 3e 54  am name="kind">T
0dc0: 68 65 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20  he DateTimeKind 
0dd0: 74 6f 20 75 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d  to use.</param>.
0de0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53 51  .    internal SQ
0df0: 4c 69 74 65 43 6f 6e 76 65 72 74 28 53 51 4c 69  LiteConvert(SQLi
0e00: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 20 66 6d  teDateFormats fm
0e10: 74 2c 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20  t, DateTimeKind 
0e20: 6b 69 6e 64 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  kind)..    {..  
0e30: 20 20 20 20 5f 64 61 74 65 74 69 6d 65 46 6f 72      _datetimeFor
0e40: 6d 61 74 20 3d 20 66 6d 74 3b 0d 0a 20 20 20 20  mat = fmt;..    
0e50: 20 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 20    _datetimeKind 
0e60: 3d 20 6b 69 6e 64 3b 0d 0a 20 20 20 20 7d 0d 0a  = kind;..    }..
0e70: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 55 54  ..    #region UT
0e80: 46 2d 38 20 43 6f 6e 76 65 72 73 69 6f 6e 20 46  F-8 Conversion F
0e90: 75 6e 63 74 69 6f 6e 73 0d 0a 20 20 20 20 2f 2f  unctions..    //
0ea0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0eb0: 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20   /// Converts a 
0ec0: 73 74 72 69 6e 67 20 74 6f 20 61 20 55 54 46 2d  string to a UTF-
0ed0: 38 20 65 6e 63 6f 64 65 64 20 62 79 74 65 20 61  8 encoded byte a
0ee0: 72 72 61 79 20 73 69 7a 65 64 20 74 6f 20 69 6e  rray sized to in
0ef0: 63 6c 75 64 65 20 61 20 6e 75 6c 6c 2d 74 65 72  clude a null-ter
0f00: 6d 69 6e 61 74 69 6e 67 20 63 68 61 72 61 63 74  minating charact
0f10: 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  er...    /// </s
0f20: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
0f30: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 6f   <param name="so
0f40: 75 72 63 65 54 65 78 74 22 3e 54 68 65 20 73 74  urceText">The st
0f50: 72 69 6e 67 20 74 6f 20 63 6f 6e 76 65 72 74 20  ring to convert 
0f60: 74 6f 20 55 54 46 2d 38 3c 2f 70 61 72 61 6d 3e  to UTF-8</param>
0f70: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
0f80: 6e 73 3e 41 20 62 79 74 65 20 61 72 72 61 79 20  ns>A byte array 
0f90: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 63  containing the c
0fa0: 6f 6e 76 65 72 74 65 64 20 73 74 72 69 6e 67 20  onverted string 
0fb0: 70 6c 75 73 20 61 6e 20 65 78 74 72 61 20 30 20  plus an extra 0 
0fc0: 74 65 72 6d 69 6e 61 74 69 6e 67 20 62 79 74 65  terminating byte
0fd0: 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
0fe0: 68 65 20 61 72 72 61 79 2e 3c 2f 72 65 74 75 72  he array.</retur
0ff0: 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
1000: 73 74 61 74 69 63 20 62 79 74 65 5b 5d 20 54 6f  static byte[] To
1010: 55 54 46 38 28 73 74 72 69 6e 67 20 73 6f 75 72  UTF8(string sour
1020: 63 65 54 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a  ceText)..    {..
1030: 20 20 20 20 20 20 42 79 74 65 5b 5d 20 62 79 74        Byte[] byt
1040: 65 41 72 72 61 79 3b 0d 0a 20 20 20 20 20 20 69  eArray;..      i
1050: 6e 74 20 6e 6c 65 6e 20 3d 20 5f 75 74 66 38 2e  nt nlen = _utf8.
1060: 47 65 74 42 79 74 65 43 6f 75 6e 74 28 73 6f 75  GetByteCount(sou
1070: 72 63 65 54 65 78 74 29 20 2b 20 31 3b 0d 0a 0d  rceText) + 1;...
1080: 0a 20 20 20 20 20 20 62 79 74 65 41 72 72 61 79  .      byteArray
1090: 20 3d 20 6e 65 77 20 62 79 74 65 5b 6e 6c 65 6e   = new byte[nlen
10a0: 5d 3b 0d 0a 20 20 20 20 20 20 6e 6c 65 6e 20 3d  ];..      nlen =
10b0: 20 5f 75 74 66 38 2e 47 65 74 42 79 74 65 73 28   _utf8.GetBytes(
10c0: 73 6f 75 72 63 65 54 65 78 74 2c 20 30 2c 20 73  sourceText, 0, s
10d0: 6f 75 72 63 65 54 65 78 74 2e 4c 65 6e 67 74 68  ourceText.Length
10e0: 2c 20 62 79 74 65 41 72 72 61 79 2c 20 30 29 3b  , byteArray, 0);
10f0: 0d 0a 20 20 20 20 20 20 62 79 74 65 41 72 72 61  ..      byteArra
1100: 79 5b 6e 6c 65 6e 5d 20 3d 20 30 3b 0d 0a 0d 0a  y[nlen] = 0;....
1110: 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 79 74        return byt
1120: 65 41 72 72 61 79 3b 0d 0a 20 20 20 20 7d 0d 0a  eArray;..    }..
1130: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
1140: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e  ry>..    /// Con
1150: 76 65 72 74 20 61 20 44 61 74 65 54 69 6d 65 20  vert a DateTime 
1160: 74 6f 20 61 20 55 54 46 2d 38 20 65 6e 63 6f 64  to a UTF-8 encod
1170: 65 64 2c 20 7a 65 72 6f 2d 74 65 72 6d 69 6e 61  ed, zero-termina
1180: 74 65 64 20 62 79 74 65 20 61 72 72 61 79 2e 0d  ted byte array..
1190: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
11a0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
11b0: 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  marks>..    /// 
11c0: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  This function is
11d0: 20 61 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 66   a convenience f
11e0: 75 6e 63 74 69 6f 6e 2c 20 77 68 69 63 68 20 66  unction, which f
11f0: 69 72 73 74 20 63 61 6c 6c 73 20 54 6f 53 74 72  irst calls ToStr
1200: 69 6e 67 28 29 20 6f 6e 20 74 68 65 20 44 61 74  ing() on the Dat
1210: 65 54 69 6d 65 2c 20 61 6e 64 20 74 68 65 6e 20  eTime, and then 
1220: 63 61 6c 6c 73 20 54 6f 55 54 46 38 28 29 20 77  calls ToUTF8() w
1230: 69 74 68 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f  ith the..    ///
1240: 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74 2e 0d   string result..
1250: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72  .    /// </remar
1260: 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ks>..    /// <pa
1270: 72 61 6d 20 6e 61 6d 65 3d 22 64 61 74 65 54 69  ram name="dateTi
1280: 6d 65 56 61 6c 75 65 22 3e 54 68 65 20 44 61 74  meValue">The Dat
1290: 65 54 69 6d 65 20 74 6f 20 63 6f 6e 76 65 72 74  eTime to convert
12a0: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
12b0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20  // <returns>The 
12c0: 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 73 74  UTF-8 encoded st
12d0: 72 69 6e 67 2c 20 69 6e 63 6c 75 64 69 6e 67 20  ring, including 
12e0: 61 20 30 20 74 65 72 6d 69 6e 61 74 69 6e 67 20  a 0 terminating 
12f0: 62 79 74 65 20 61 74 20 74 68 65 20 65 6e 64 20  byte at the end 
1300: 6f 66 20 74 68 65 20 61 72 72 61 79 2e 3c 2f 72  of the array.</r
1310: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
1320: 6c 69 63 20 62 79 74 65 5b 5d 20 54 6f 55 54 46  lic byte[] ToUTF
1330: 38 28 44 61 74 65 54 69 6d 65 20 64 61 74 65 54  8(DateTime dateT
1340: 69 6d 65 56 61 6c 75 65 29 0d 0a 20 20 20 20 7b  imeValue)..    {
1350: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54  ..      return T
1360: 6f 55 54 46 38 28 54 6f 53 74 72 69 6e 67 28 64  oUTF8(ToString(d
1370: 61 74 65 54 69 6d 65 56 61 6c 75 65 29 29 3b 0d  ateTimeValue));.
1380: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
1390: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
13a0: 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20   /// Converts a 
13b0: 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 49 6e  UTF-8 encoded In
13c0: 74 50 74 72 20 6f 66 20 74 68 65 20 73 70 65 63  tPtr of the spec
13d0: 69 66 69 65 64 20 6c 65 6e 67 74 68 20 69 6e 74  ified length int
13e0: 6f 20 61 20 2e 4e 45 54 20 73 74 72 69 6e 67 0d  o a .NET string.
13f0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
1400: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
1410: 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 74 69 76 65  ram name="native
1420: 73 74 72 69 6e 67 22 3e 54 68 65 20 70 6f 69 6e  string">The poin
1430: 74 65 72 20 74 6f 20 74 68 65 20 6d 65 6d 6f 72  ter to the memor
1440: 79 20 77 68 65 72 65 20 74 68 65 20 55 54 46 2d  y where the UTF-
1450: 38 20 73 74 72 69 6e 67 20 69 73 20 65 6e 63 6f  8 string is enco
1460: 64 65 64 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ded</param>..   
1470: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1480: 3d 22 6e 61 74 69 76 65 73 74 72 69 6e 67 6c 65  ="nativestringle
1490: 6e 22 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  n">The number of
14a0: 20 62 79 74 65 73 20 74 6f 20 64 65 63 6f 64 65   bytes to decode
14b0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
14c0: 2f 20 3c 72 65 74 75 72 6e 73 3e 41 20 73 74 72  / <returns>A str
14d0: 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ing containing t
14e0: 68 65 20 74 72 61 6e 73 6c 61 74 65 64 20 63 68  he translated ch
14f0: 61 72 61 63 74 65 72 28 73 29 3c 2f 72 65 74 75  aracter(s)</retu
1500: 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  rns>..    public
1510: 20 76 69 72 74 75 61 6c 20 73 74 72 69 6e 67 20   virtual string 
1520: 54 6f 53 74 72 69 6e 67 28 49 6e 74 50 74 72 20  ToString(IntPtr 
1530: 6e 61 74 69 76 65 73 74 72 69 6e 67 2c 20 69 6e  nativestring, in
1540: 74 20 6e 61 74 69 76 65 73 74 72 69 6e 67 6c 65  t nativestringle
1550: 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  n)..    {..     
1560: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
1570: 72 69 6e 67 28 6e 61 74 69 76 65 73 74 72 69 6e  ring(nativestrin
1580: 67 2c 20 6e 61 74 69 76 65 73 74 72 69 6e 67 6c  g, nativestringl
1590: 65 6e 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  en);..    }.... 
15a0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
15b0: 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72  ..    /// Conver
15c0: 74 73 20 61 20 55 54 46 2d 38 20 65 6e 63 6f 64  ts a UTF-8 encod
15d0: 65 64 20 49 6e 74 50 74 72 20 6f 66 20 74 68 65  ed IntPtr of the
15e0: 20 73 70 65 63 69 66 69 65 64 20 6c 65 6e 67 74   specified lengt
15f0: 68 20 69 6e 74 6f 20 61 20 2e 4e 45 54 20 73 74  h into a .NET st
1600: 72 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ring..    /// </
1610: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
1620: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e  / <param name="n
1630: 61 74 69 76 65 73 74 72 69 6e 67 22 3e 54 68 65  ativestring">The
1640: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
1650: 6d 65 6d 6f 72 79 20 77 68 65 72 65 20 74 68 65  memory where the
1660: 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 69 73   UTF-8 string is
1670: 20 65 6e 63 6f 64 65 64 3c 2f 70 61 72 61 6d 3e   encoded</param>
1680: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
1690: 20 6e 61 6d 65 3d 22 6e 61 74 69 76 65 73 74 72   name="nativestr
16a0: 69 6e 67 6c 65 6e 22 3e 54 68 65 20 6e 75 6d 62  inglen">The numb
16b0: 65 72 20 6f 66 20 62 79 74 65 73 20 74 6f 20 64  er of bytes to d
16c0: 65 63 6f 64 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20  ecode</param>.. 
16d0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
16e0: 41 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  A string contain
16f0: 69 6e 67 20 74 68 65 20 74 72 61 6e 73 6c 61 74  ing the translat
1700: 65 64 20 63 68 61 72 61 63 74 65 72 28 73 29 3c  ed character(s)<
1710: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
1720: 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
1730: 69 6e 67 20 55 54 46 38 54 6f 53 74 72 69 6e 67  ing UTF8ToString
1740: 28 49 6e 74 50 74 72 20 6e 61 74 69 76 65 73 74  (IntPtr nativest
1750: 72 69 6e 67 2c 20 69 6e 74 20 6e 61 74 69 76 65  ring, int native
1760: 73 74 72 69 6e 67 6c 65 6e 29 0d 0a 20 20 20 20  stringlen)..    
1770: 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 61 74  {..      if (nat
1780: 69 76 65 73 74 72 69 6e 67 6c 65 6e 20 3d 3d 20  ivestringlen == 
1790: 30 20 7c 7c 20 6e 61 74 69 76 65 73 74 72 69 6e  0 || nativestrin
17a0: 67 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  g == IntPtr.Zero
17b0: 29 20 72 65 74 75 72 6e 20 22 22 3b 0d 0a 20 20  ) return "";..  
17c0: 20 20 20 20 69 66 20 28 6e 61 74 69 76 65 73 74      if (nativest
17d0: 72 69 6e 67 6c 65 6e 20 3d 3d 20 2d 31 29 0d 0a  ringlen == -1)..
17e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17f0: 20 64 6f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a   do..        {..
1800: 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
1810: 73 74 72 69 6e 67 6c 65 6e 2b 2b 3b 0d 0a 20 20  stringlen++;..  
1820: 20 20 20 20 20 20 7d 20 77 68 69 6c 65 20 28 4d        } while (M
1830: 61 72 73 68 61 6c 2e 52 65 61 64 42 79 74 65 28  arshal.ReadByte(
1840: 6e 61 74 69 76 65 73 74 72 69 6e 67 2c 20 6e 61  nativestring, na
1850: 74 69 76 65 73 74 72 69 6e 67 6c 65 6e 29 20 21  tivestringlen) !
1860: 3d 20 30 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  = 0);..      }..
1870: 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62  ..      byte[] b
1880: 79 74 65 41 72 72 61 79 20 3d 20 6e 65 77 20 62  yteArray = new b
1890: 79 74 65 5b 6e 61 74 69 76 65 73 74 72 69 6e 67  yte[nativestring
18a0: 6c 65 6e 5d 3b 0d 0a 20 20 20 20 20 20 0d 0a 20  len];..      .. 
18b0: 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70       Marshal.Cop
18c0: 79 28 6e 61 74 69 76 65 73 74 72 69 6e 67 2c 20  y(nativestring, 
18d0: 62 79 74 65 41 72 72 61 79 2c 20 30 2c 20 6e 61  byteArray, 0, na
18e0: 74 69 76 65 73 74 72 69 6e 67 6c 65 6e 29 3b 0d  tivestringlen);.
18f0: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
1900: 5f 75 74 66 38 2e 47 65 74 53 74 72 69 6e 67 28  _utf8.GetString(
1910: 62 79 74 65 41 72 72 61 79 2c 20 30 2c 20 6e 61  byteArray, 0, na
1920: 74 69 76 65 73 74 72 69 6e 67 6c 65 6e 29 3b 0d  tivestringlen);.
1930: 0a 20 20 20 20 7d 0d 0a 0d 0a 0d 0a 20 20 20 20  .    }......    
1940: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
1950: 20 20 23 72 65 67 69 6f 6e 20 44 61 74 65 54 69    #region DateTi
1960: 6d 65 20 43 6f 6e 76 65 72 73 69 6f 6e 20 46 75  me Conversion Fu
1970: 6e 63 74 69 6f 6e 73 0d 0a 20 20 20 20 2f 2f 2f  nctions..    ///
1980: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1990: 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 73  /// Converts a s
19a0: 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 44 61 74  tring into a Dat
19b0: 65 54 69 6d 65 2c 20 75 73 69 6e 67 20 74 68 65  eTime, using the
19c0: 20 63 75 72 72 65 6e 74 20 44 61 74 65 54 69 6d   current DateTim
19d0: 65 46 6f 72 6d 61 74 20 73 70 65 63 69 66 69 65  eFormat specifie
19e0: 64 20 66 6f 72 20 74 68 65 20 63 6f 6e 6e 65 63  d for the connec
19f0: 74 69 6f 6e 20 77 68 65 6e 20 69 74 20 77 61 73  tion when it was
1a00: 20 6f 70 65 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f   opened...    //
1a10: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1a20: 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d    /// <remarks>.
1a30: 0a 20 20 20 20 2f 2f 2f 20 41 63 63 65 70 74 61  .    /// Accepta
1a40: 62 6c 65 20 49 53 4f 38 36 30 31 20 44 61 74 65  ble ISO8601 Date
1a50: 54 69 6d 65 20 66 6f 72 6d 61 74 73 20 61 72 65  Time formats are
1a60: 3a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 6c 69 73 74  :..    /// <list
1a70: 20 74 79 70 65 3d 22 62 75 6c 6c 65 74 22 3e 0d   type="bullet">.
1a80: 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c  .    /// <item><
1a90: 64 65 73 63 72 69 70 74 69 6f 6e 3e 54 48 48 6d  description>THHm
1aa0: 6d 73 73 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f  mssK</descriptio
1ab0: 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f  n></item>..    /
1ac0: 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69  // <item><descri
1ad0: 70 74 69 6f 6e 3e 54 48 48 6d 6d 4b 3c 2f 64 65  ption>THHmmK</de
1ae0: 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d  scription></item
1af0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d  >..    /// <item
1b00: 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 48 48  ><description>HH
1b10: 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b 3c  :mm:ss.FFFFFFFK<
1b20: 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69  /description></i
1b30: 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69  tem>..    /// <i
1b40: 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e  tem><description
1b50: 3e 48 48 3a 6d 6d 3a 73 73 4b 3c 2f 64 65 73 63  >HH:mm:ssK</desc
1b60: 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d  ription></item>.
1b70: 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c  .    /// <item><
1b80: 64 65 73 63 72 69 70 74 69 6f 6e 3e 48 48 3a 6d  description>HH:m
1b90: 6d 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  mK</description>
1ba0: 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  </item>..    ///
1bb0: 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74   <item><descript
1bc0: 69 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 20 48  ion>yyyy-MM-dd H
1bd0: 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b  H:mm:ss.FFFFFFFK
1be0: 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f  </description></
1bf0: 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  item>..    /// <
1c00: 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f  item><descriptio
1c10: 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a  n>yyyy-MM-dd HH:
1c20: 6d 6d 3a 73 73 4b 3c 2f 64 65 73 63 72 69 70 74  mm:ssK</descript
1c30: 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20  ion></item>..   
1c40: 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63   /// <item><desc
1c50: 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d 4d 2d  ription>yyyy-MM-
1c60: 64 64 20 48 48 3a 6d 6d 4b 3c 2f 64 65 73 63 72  dd HH:mmK</descr
1c70: 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a  iption></item>..
1c80: 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64      /// <item><d
1c90: 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d  escription>yyyy-
1ca0: 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 46  MM-ddTHH:mm:ss.F
1cb0: 46 46 46 46 46 46 4b 3c 2f 64 65 73 63 72 69 70  FFFFFFK</descrip
1cc0: 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20  tion></item>..  
1cd0: 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73    /// <item><des
1ce0: 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d 4d  cription>yyyy-MM
1cf0: 2d 64 64 54 48 48 3a 6d 6d 4b 3c 2f 64 65 73 63  -ddTHH:mmK</desc
1d00: 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d  ription></item>.
1d10: 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c  .    /// <item><
1d20: 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79  description>yyyy
1d30: 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 4b  -MM-ddTHH:mm:ssK
1d40: 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f  </description></
1d50: 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  item>..    /// <
1d60: 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f  item><descriptio
1d70: 6e 3e 79 79 79 79 4d 4d 64 64 48 48 6d 6d 73 73  n>yyyyMMddHHmmss
1d80: 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  K</description><
1d90: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
1da0: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
1db0: 6f 6e 3e 79 79 79 79 4d 4d 64 64 48 48 6d 6d 4b  on>yyyyMMddHHmmK
1dc0: 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f  </description></
1dd0: 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  item>..    /// <
1de0: 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f  item><descriptio
1df0: 6e 3e 79 79 79 79 4d 4d 64 64 54 48 48 6d 6d 73  n>yyyyMMddTHHmms
1e00: 73 46 46 46 46 46 46 46 4b 3c 2f 64 65 73 63 72  sFFFFFFFK</descr
1e10: 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a  iption></item>..
1e20: 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64      /// <item><d
1e30: 65 73 63 72 69 70 74 69 6f 6e 3e 54 48 48 6d 6d  escription>THHmm
1e40: 73 73 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  ss</description>
1e50: 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  </item>..    ///
1e60: 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74   <item><descript
1e70: 69 6f 6e 3e 54 48 48 6d 6d 3c 2f 64 65 73 63 72  ion>THHmm</descr
1e80: 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a  iption></item>..
1e90: 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64      /// <item><d
1ea0: 65 73 63 72 69 70 74 69 6f 6e 3e 48 48 3a 6d 6d  escription>HH:mm
1eb0: 3a 73 73 2e 46 46 46 46 46 46 46 3c 2f 64 65 73  :ss.FFFFFFF</des
1ec0: 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e  cription></item>
1ed0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e  ..    /// <item>
1ee0: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 48 48 3a  <description>HH:
1ef0: 6d 6d 3a 73 73 3c 2f 64 65 73 63 72 69 70 74 69  mm:ss</descripti
1f00: 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20  on></item>..    
1f10: 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72  /// <item><descr
1f20: 69 70 74 69 6f 6e 3e 48 48 3a 6d 6d 3c 2f 64 65  iption>HH:mm</de
1f30: 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d  scription></item
1f40: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d  >..    /// <item
1f50: 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79  ><description>yy
1f60: 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73  yy-MM-dd HH:mm:s
1f70: 73 2e 46 46 46 46 46 46 46 3c 2f 64 65 73 63 72  s.FFFFFFF</descr
1f80: 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a  iption></item>..
1f90: 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64      /// <item><d
1fa0: 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d  escription>yyyy-
1fb0: 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 3c 2f  MM-dd HH:mm:ss</
1fc0: 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74  description></it
1fd0: 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74  em>..    /// <it
1fe0: 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e  em><description>
1ff0: 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d  yyyy-MM-dd HH:mm
2000: 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f  </description></
2010: 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  item>..    /// <
2020: 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f  item><descriptio
2030: 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a  n>yyyy-MM-ddTHH:
2040: 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 3c 2f 64  mm:ss.FFFFFFF</d
2050: 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65  escription></ite
2060: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65  m>..    /// <ite
2070: 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 79  m><description>y
2080: 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3c  yyy-MM-ddTHH:mm<
2090: 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69  /description></i
20a0: 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69  tem>..    /// <i
20b0: 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e  tem><description
20c0: 3e 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d  >yyyy-MM-ddTHH:m
20d0: 6d 3a 73 73 3c 2f 64 65 73 63 72 69 70 74 69 6f  m:ss</descriptio
20e0: 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f  n></item>..    /
20f0: 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69  // <item><descri
2100: 70 74 69 6f 6e 3e 79 79 79 79 4d 4d 64 64 48 48  ption>yyyyMMddHH
2110: 6d 6d 73 73 3c 2f 64 65 73 63 72 69 70 74 69 6f  mmss</descriptio
2120: 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f  n></item>..    /
2130: 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69  // <item><descri
2140: 70 74 69 6f 6e 3e 79 79 79 79 4d 4d 64 64 48 48  ption>yyyyMMddHH
2150: 6d 6d 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  mm</description>
2160: 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  </item>..    ///
2170: 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74   <item><descript
2180: 69 6f 6e 3e 79 79 79 79 4d 4d 64 64 54 48 48 6d  ion>yyyyMMddTHHm
2190: 6d 73 73 46 46 46 46 46 46 46 3c 2f 64 65 73 63  mssFFFFFFF</desc
21a0: 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d  ription></item>.
21b0: 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c  .    /// <item><
21c0: 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79  description>yyyy
21d0: 2d 4d 4d 2d 64 64 3c 2f 64 65 73 63 72 69 70 74  -MM-dd</descript
21e0: 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20  ion></item>..   
21f0: 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63   /// <item><desc
2200: 72 69 70 74 69 6f 6e 3e 79 79 79 79 4d 4d 64 64  ription>yyyyMMdd
2210: 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f  </description></
2220: 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  item>..    /// <
2230: 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f  item><descriptio
2240: 6e 3e 79 79 2d 4d 4d 2d 64 64 3c 2f 64 65 73 63  n>yy-MM-dd</desc
2250: 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d  ription></item>.
2260: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 6c 69 73 74 3e  .    /// </list>
2270: 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 74 68 65  ..    /// If the
2280: 20 73 74 72 69 6e 67 20 63 61 6e 6e 6f 74 20 62   string cannot b
2290: 65 20 6d 61 74 63 68 65 64 20 74 6f 20 6f 6e 65  e matched to one
22a0: 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 66 6f   of the above fo
22b0: 72 6d 61 74 73 2c 20 61 6e 20 65 78 63 65 70 74  rmats, an except
22c0: 69 6f 6e 20 77 69 6c 6c 20 62 65 20 74 68 72 6f  ion will be thro
22d0: 77 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  wn...    /// </r
22e0: 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f  emarks>..    ///
22f0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 61   <param name="da
2300: 74 65 54 65 78 74 22 3e 54 68 65 20 73 74 72 69  teText">The stri
2310: 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 65 69  ng containing ei
2320: 74 68 65 72 20 61 20 6c 6f 6e 67 20 69 6e 74 65  ther a long inte
2330: 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 31 30  ger number of 10
2340: 30 2d 6e 61 6e 6f 73 65 63 6f 6e 64 20 75 6e 69  0-nanosecond uni
2350: 74 73 20 73 69 6e 63 65 0d 0a 20 20 20 20 2f 2f  ts since..    //
2360: 2f 20 53 79 73 74 65 6d 2e 44 61 74 65 54 69 6d  / System.DateTim
2370: 65 2e 4d 69 6e 56 61 6c 75 65 2c 20 61 20 4a 75  e.MinValue, a Ju
2380: 6c 69 61 6e 20 64 61 79 20 64 6f 75 62 6c 65 2c  lian day double,
2390: 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62   an integer numb
23a0: 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69  er of seconds si
23b0: 6e 63 65 20 74 68 65 20 55 6e 69 78 20 65 70 6f  nce the Unix epo
23c0: 63 68 2c 20 61 0d 0a 20 20 20 20 2f 2f 2f 20 63  ch, a..    /// c
23d0: 75 6c 74 75 72 65 2d 69 6e 64 65 70 65 6e 64 65  ulture-independe
23e0: 6e 74 20 66 6f 72 6d 61 74 74 65 64 20 64 61 74  nt formatted dat
23f0: 65 20 61 6e 64 20 74 69 6d 65 20 73 74 72 69 6e  e and time strin
2400: 67 2c 20 61 20 66 6f 72 6d 61 74 74 65 64 20 64  g, a formatted d
2410: 61 74 65 20 61 6e 64 20 74 69 6d 65 20 73 74 72  ate and time str
2420: 69 6e 67 20 69 6e 20 74 68 65 20 63 75 72 72 65  ing in the curre
2430: 6e 74 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 6c 74  nt..    /// cult
2440: 75 72 65 2c 20 6f 72 20 61 6e 20 49 53 4f 38 36  ure, or an ISO86
2450: 30 31 2d 66 6f 72 6d 61 74 20 73 74 72 69 6e 67  01-format string
2460: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
2470: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41 20 44 61  // <returns>A Da
2480: 74 65 54 69 6d 65 20 76 61 6c 75 65 3c 2f 72 65  teTime value</re
2490: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
24a0: 69 63 20 44 61 74 65 54 69 6d 65 20 54 6f 44 61  ic DateTime ToDa
24b0: 74 65 54 69 6d 65 28 73 74 72 69 6e 67 20 64 61  teTime(string da
24c0: 74 65 54 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a  teText)..    {..
24d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44        return ToD
24e0: 61 74 65 54 69 6d 65 28 64 61 74 65 54 65 78 74  ateTime(dateText
24f0: 2c 20 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61  , _datetimeForma
2500: 74 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64  t, _datetimeKind
2510: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
2520: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2530: 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73      /// Converts
2540: 20 61 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61   a string into a
2550: 20 44 61 74 65 54 69 6d 65 2c 20 75 73 69 6e 67   DateTime, using
2560: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 44   the specified D
2570: 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 20 61 6e  ateTimeFormat an
2580: 64 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 0d  d DateTimeKind..
2590: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
25a0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
25b0: 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  marks>..    /// 
25c0: 41 63 63 65 70 74 61 62 6c 65 20 49 53 4f 38 36  Acceptable ISO86
25d0: 30 31 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d  01 DateTime form
25e0: 61 74 73 20 61 72 65 3a 0d 0a 20 20 20 20 2f 2f  ats are:..    //
25f0: 2f 20 3c 6c 69 73 74 20 74 79 70 65 3d 22 62 75  / <list type="bu
2600: 6c 6c 65 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  llet">..    /// 
2610: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
2620: 6f 6e 3e 54 48 48 6d 6d 73 73 4b 3c 2f 64 65 73  on>THHmmssK</des
2630: 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e  cription></item>
2640: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e  ..    /// <item>
2650: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 54 48 48  <description>THH
2660: 6d 6d 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e  mmK</description
2670: 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f  ></item>..    //
2680: 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70  / <item><descrip
2690: 74 69 6f 6e 3e 48 48 3a 6d 6d 3a 73 73 2e 46 46  tion>HH:mm:ss.FF
26a0: 46 46 46 46 46 4b 3c 2f 64 65 73 63 72 69 70 74  FFFFFK</descript
26b0: 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20  ion></item>..   
26c0: 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63   /// <item><desc
26d0: 72 69 70 74 69 6f 6e 3e 48 48 3a 6d 6d 3a 73 73  ription>HH:mm:ss
26e0: 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  K</description><
26f0: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
2700: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
2710: 6f 6e 3e 48 48 3a 6d 6d 4b 3c 2f 64 65 73 63 72  on>HH:mmK</descr
2720: 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a  iption></item>..
2730: 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64      /// <item><d
2740: 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d  escription>yyyy-
2750: 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 2e 46  MM-dd HH:mm:ss.F
2760: 46 46 46 46 46 46 4b 3c 2f 64 65 73 63 72 69 70  FFFFFFK</descrip
2770: 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20  tion></item>..  
2780: 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73    /// <item><des
2790: 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d 4d  cription>yyyy-MM
27a0: 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 4b 3c 2f 64  -dd HH:mm:ssK</d
27b0: 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65  escription></ite
27c0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65  m>..    /// <ite
27d0: 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 79  m><description>y
27e0: 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 4b  yyy-MM-dd HH:mmK
27f0: 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f  </description></
2800: 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  item>..    /// <
2810: 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f  item><descriptio
2820: 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a  n>yyyy-MM-ddTHH:
2830: 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b 3c 2f  mm:ss.FFFFFFFK</
2840: 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74  description></it
2850: 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74  em>..    /// <it
2860: 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e  em><description>
2870: 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d  yyyy-MM-ddTHH:mm
2880: 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  K</description><
2890: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
28a0: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
28b0: 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48  on>yyyy-MM-ddTHH
28c0: 3a 6d 6d 3a 73 73 4b 3c 2f 64 65 73 63 72 69 70  :mm:ssK</descrip
28d0: 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20  tion></item>..  
28e0: 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73    /// <item><des
28f0: 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 4d 4d 64  cription>yyyyMMd
2900: 64 48 48 6d 6d 73 73 4b 3c 2f 64 65 73 63 72 69  dHHmmssK</descri
2910: 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20  ption></item>.. 
2920: 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65     /// <item><de
2930: 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 4d 4d  scription>yyyyMM
2940: 64 64 48 48 6d 6d 4b 3c 2f 64 65 73 63 72 69 70  ddHHmmK</descrip
2950: 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20  tion></item>..  
2960: 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73    /// <item><des
2970: 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 4d 4d 64  cription>yyyyMMd
2980: 64 54 48 48 6d 6d 73 73 46 46 46 46 46 46 46 4b  dTHHmmssFFFFFFFK
2990: 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f  </description></
29a0: 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  item>..    /// <
29b0: 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f  item><descriptio
29c0: 6e 3e 54 48 48 6d 6d 73 73 3c 2f 64 65 73 63 72  n>THHmmss</descr
29d0: 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a  iption></item>..
29e0: 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64      /// <item><d
29f0: 65 73 63 72 69 70 74 69 6f 6e 3e 54 48 48 6d 6d  escription>THHmm
2a00: 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f  </description></
2a10: 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  item>..    /// <
2a20: 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f  item><descriptio
2a30: 6e 3e 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46  n>HH:mm:ss.FFFFF
2a40: 46 46 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  FF</description>
2a50: 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  </item>..    ///
2a60: 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74   <item><descript
2a70: 69 6f 6e 3e 48 48 3a 6d 6d 3a 73 73 3c 2f 64 65  ion>HH:mm:ss</de
2a80: 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d  scription></item
2a90: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d  >..    /// <item
2aa0: 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 48 48  ><description>HH
2ab0: 3a 6d 6d 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e  :mm</description
2ac0: 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f  ></item>..    //
2ad0: 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70  / <item><descrip
2ae0: 74 69 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 20  tion>yyyy-MM-dd 
2af0: 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46  HH:mm:ss.FFFFFFF
2b00: 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f  </description></
2b10: 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  item>..    /// <
2b20: 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f  item><descriptio
2b30: 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a  n>yyyy-MM-dd HH:
2b40: 6d 6d 3a 73 73 3c 2f 64 65 73 63 72 69 70 74 69  mm:ss</descripti
2b50: 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20  on></item>..    
2b60: 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72  /// <item><descr
2b70: 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64  iption>yyyy-MM-d
2b80: 64 20 48 48 3a 6d 6d 3c 2f 64 65 73 63 72 69 70  d HH:mm</descrip
2b90: 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20  tion></item>..  
2ba0: 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73    /// <item><des
2bb0: 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d 4d  cription>yyyy-MM
2bc0: 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 46 46 46  -ddTHH:mm:ss.FFF
2bd0: 46 46 46 46 3c 2f 64 65 73 63 72 69 70 74 69 6f  FFFF</descriptio
2be0: 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f  n></item>..    /
2bf0: 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69  // <item><descri
2c00: 70 74 69 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64  ption>yyyy-MM-dd
2c10: 54 48 48 3a 6d 6d 3c 2f 64 65 73 63 72 69 70 74  THH:mm</descript
2c20: 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20  ion></item>..   
2c30: 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63   /// <item><desc
2c40: 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d 4d 2d  ription>yyyy-MM-
2c50: 64 64 54 48 48 3a 6d 6d 3a 73 73 3c 2f 64 65 73  ddTHH:mm:ss</des
2c60: 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e  cription></item>
2c70: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e  ..    /// <item>
2c80: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79  <description>yyy
2c90: 79 4d 4d 64 64 48 48 6d 6d 73 73 3c 2f 64 65 73  yMMddHHmmss</des
2ca0: 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e  cription></item>
2cb0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e  ..    /// <item>
2cc0: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79  <description>yyy
2cd0: 79 4d 4d 64 64 48 48 6d 6d 3c 2f 64 65 73 63 72  yMMddHHmm</descr
2ce0: 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a  iption></item>..
2cf0: 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64      /// <item><d
2d00: 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 4d  escription>yyyyM
2d10: 4d 64 64 54 48 48 6d 6d 73 73 46 46 46 46 46 46  MddTHHmmssFFFFFF
2d20: 46 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  F</description><
2d30: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
2d40: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
2d50: 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 3c 2f 64  on>yyyy-MM-dd</d
2d60: 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65  escription></ite
2d70: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65  m>..    /// <ite
2d80: 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 79  m><description>y
2d90: 79 79 79 4d 4d 64 64 3c 2f 64 65 73 63 72 69 70  yyyMMdd</descrip
2da0: 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20  tion></item>..  
2db0: 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73    /// <item><des
2dc0: 63 72 69 70 74 69 6f 6e 3e 79 79 2d 4d 4d 2d 64  cription>yy-MM-d
2dd0: 64 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  d</description><
2de0: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
2df0: 3c 2f 6c 69 73 74 3e 0d 0a 20 20 20 20 2f 2f 2f  </list>..    ///
2e00: 20 49 66 20 74 68 65 20 73 74 72 69 6e 67 20 63   If the string c
2e10: 61 6e 6e 6f 74 20 62 65 20 6d 61 74 63 68 65 64  annot be matched
2e20: 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 61   to one of the a
2e30: 62 6f 76 65 20 66 6f 72 6d 61 74 73 2c 20 61 6e  bove formats, an
2e40: 20 65 78 63 65 70 74 69 6f 6e 20 77 69 6c 6c 20   exception will 
2e50: 62 65 20 74 68 72 6f 77 6e 2e 0d 0a 20 20 20 20  be thrown...    
2e60: 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a  /// </remarks>..
2e70: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2e80: 61 6d 65 3d 22 64 61 74 65 54 65 78 74 22 3e 54  ame="dateText">T
2e90: 68 65 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69  he string contai
2ea0: 6e 69 6e 67 20 65 69 74 68 65 72 20 61 20 6c 6f  ning either a lo
2eb0: 6e 67 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65  ng integer numbe
2ec0: 72 20 6f 66 20 31 30 30 2d 6e 61 6e 6f 73 65 63  r of 100-nanosec
2ed0: 6f 6e 64 20 75 6e 69 74 73 20 73 69 6e 63 65 0d  ond units since.
2ee0: 0a 20 20 20 20 2f 2f 2f 20 53 79 73 74 65 6d 2e  .    /// System.
2ef0: 44 61 74 65 54 69 6d 65 2e 4d 69 6e 56 61 6c 75  DateTime.MinValu
2f00: 65 2c 20 61 20 4a 75 6c 69 61 6e 20 64 61 79 20  e, a Julian day 
2f10: 64 6f 75 62 6c 65 2c 20 61 6e 20 69 6e 74 65 67  double, an integ
2f20: 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 63  er number of sec
2f30: 6f 6e 64 73 20 73 69 6e 63 65 20 74 68 65 20 55  onds since the U
2f40: 6e 69 78 20 65 70 6f 63 68 2c 20 61 0d 0a 20 20  nix epoch, a..  
2f50: 20 20 2f 2f 2f 20 63 75 6c 74 75 72 65 2d 69 6e    /// culture-in
2f60: 64 65 70 65 6e 64 65 6e 74 20 66 6f 72 6d 61 74  dependent format
2f70: 74 65 64 20 64 61 74 65 20 61 6e 64 20 74 69 6d  ted date and tim
2f80: 65 20 73 74 72 69 6e 67 2c 20 61 20 66 6f 72 6d  e string, a form
2f90: 61 74 74 65 64 20 64 61 74 65 20 61 6e 64 20 74  atted date and t
2fa0: 69 6d 65 20 73 74 72 69 6e 67 20 69 6e 20 74 68  ime string in th
2fb0: 65 20 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 2f  e current..    /
2fc0: 2f 2f 20 63 75 6c 74 75 72 65 2c 20 6f 72 20 61  // culture, or a
2fd0: 6e 20 49 53 4f 38 36 30 31 2d 66 6f 72 6d 61 74  n ISO8601-format
2fe0: 20 73 74 72 69 6e 67 2e 3c 2f 70 61 72 61 6d 3e   string.</param>
2ff0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
3000: 20 6e 61 6d 65 3d 22 66 6f 72 6d 61 74 22 3e 54   name="format">T
3010: 68 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72  he SQLiteDateFor
3020: 6d 61 74 73 20 74 6f 20 75 73 65 2e 3c 2f 70 61  mats to use.</pa
3030: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
3040: 61 72 61 6d 20 6e 61 6d 65 3d 22 6b 69 6e 64 22  aram name="kind"
3050: 3e 54 68 65 20 44 61 74 65 54 69 6d 65 4b 69 6e  >The DateTimeKin
3060: 64 20 74 6f 20 75 73 65 2e 3c 2f 70 61 72 61 6d  d to use.</param
3070: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
3080: 72 6e 73 3e 41 20 44 61 74 65 54 69 6d 65 20 76  rns>A DateTime v
3090: 61 6c 75 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  alue</returns>..
30a0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
30b0: 63 20 44 61 74 65 54 69 6d 65 20 54 6f 44 61 74  c DateTime ToDat
30c0: 65 54 69 6d 65 28 73 74 72 69 6e 67 20 64 61 74  eTime(string dat
30d0: 65 54 65 78 74 2c 20 53 51 4c 69 74 65 44 61 74  eText, SQLiteDat
30e0: 65 46 6f 72 6d 61 74 73 20 66 6f 72 6d 61 74 2c  eFormats format,
30f0: 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20 6b 69   DateTimeKind ki
3100: 6e 64 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  nd)..    {..    
3110: 20 20 20 20 73 77 69 74 63 68 20 28 66 6f 72 6d      switch (form
3120: 61 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  at)..        {..
3130: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
3140: 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61   SQLiteDateForma
3150: 74 73 2e 54 69 63 6b 73 3a 0d 0a 20 20 20 20 20  ts.Ticks:..     
3160: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
3170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3180: 20 20 72 65 74 75 72 6e 20 6e 65 77 20 44 61 74    return new Dat
3190: 65 54 69 6d 65 28 43 6f 6e 76 65 72 74 2e 54 6f  eTime(Convert.To
31a0: 49 6e 74 36 34 28 0d 0a 20 20 20 20 20 20 20 20  Int64(..        
31b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c0: 64 61 74 65 54 65 78 74 2c 20 43 75 6c 74 75 72  dateText, Cultur
31d0: 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43  eInfo.InvariantC
31e0: 75 6c 74 75 72 65 29 2c 20 6b 69 6e 64 29 3b 0d  ulture), kind);.
31f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3200: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
3210: 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46  case SQLiteDateF
3220: 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44 61 79  ormats.JulianDay
3230: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
3240: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3250: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
3260: 20 54 6f 44 61 74 65 54 69 6d 65 28 43 6f 6e 76   ToDateTime(Conv
3270: 65 72 74 2e 54 6f 44 6f 75 62 6c 65 28 0d 0a 20  ert.ToDouble(.. 
3280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3290: 20 20 20 20 20 20 20 64 61 74 65 54 65 78 74 2c         dateText,
32a0: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76   CultureInfo.Inv
32b0: 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29 2c 20  ariantCulture), 
32c0: 6b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20 20  kind);..        
32d0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
32e0: 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 69         case SQLi
32f0: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 55 6e  teDateFormats.Un
3300: 69 78 45 70 6f 63 68 3a 0d 0a 20 20 20 20 20 20  ixEpoch:..      
3310: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
3320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3330: 20 72 65 74 75 72 6e 20 44 61 74 65 54 69 6d 65   return DateTime
3340: 2e 53 70 65 63 69 66 79 4b 69 6e 64 28 0d 0a 20  .SpecifyKind(.. 
3350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3360: 20 20 20 20 20 20 20 55 6e 69 78 45 70 6f 63 68         UnixEpoch
3370: 2e 41 64 64 53 65 63 6f 6e 64 73 28 43 6f 6e 76  .AddSeconds(Conv
3380: 65 72 74 2e 54 6f 49 6e 74 33 32 28 0d 0a 20 20  ert.ToInt32(..  
3390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a0: 20 20 20 20 20 20 64 61 74 65 54 65 78 74 2c 20        dateText, 
33b0: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61  CultureInfo.Inva
33c0: 72 69 61 6e 74 43 75 6c 74 75 72 65 29 29 2c 20  riantCulture)), 
33d0: 6b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20 20  kind);..        
33e0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
33f0: 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 69         case SQLi
3400: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 49 6e  teDateFormats.In
3410: 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 3a 0d  variantCulture:.
3420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3430: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3440: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44          return D
3450: 61 74 65 54 69 6d 65 2e 53 70 65 63 69 66 79 4b  ateTime.SpecifyK
3460: 69 6e 64 28 44 61 74 65 54 69 6d 65 2e 50 61 72  ind(DateTime.Par
3470: 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se(..           
3480: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74               dat
3490: 65 54 65 78 74 2c 20 44 61 74 65 54 69 6d 65 46  eText, DateTimeF
34a0: 6f 72 6d 61 74 49 6e 66 6f 2e 49 6e 76 61 72 69  ormatInfo.Invari
34b0: 61 6e 74 49 6e 66 6f 2c 0d 0a 20 20 20 20 20 20  antInfo,..      
34c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d0: 20 20 6b 69 6e 64 20 3d 3d 20 44 61 74 65 54 69    kind == DateTi
34e0: 6d 65 4b 69 6e 64 2e 55 74 63 20 3f 0d 0a 20 20  meKind.Utc ?..  
34f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3500: 20 20 20 20 20 20 20 20 20 20 44 61 74 65 54 69            DateTi
3510: 6d 65 53 74 79 6c 65 73 2e 41 64 6a 75 73 74 54  meStyles.AdjustT
3520: 6f 55 6e 69 76 65 72 73 61 6c 20 3a 0d 0a 20 20  oUniversal :..  
3530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3540: 20 20 20 20 20 20 20 20 20 20 44 61 74 65 54 69            DateTi
3550: 6d 65 53 74 79 6c 65 73 2e 4e 6f 6e 65 29 2c 0d  meStyles.None),.
3560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3570: 20 20 20 20 20 20 20 20 20 6b 69 6e 64 29 3b 0d           kind);.
3580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3590: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
35a0: 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46  case SQLiteDateF
35b0: 6f 72 6d 61 74 73 2e 43 75 72 72 65 6e 74 43 75  ormats.CurrentCu
35c0: 6c 74 75 72 65 3a 0d 0a 20 20 20 20 20 20 20 20  lture:..        
35d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
35e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
35f0: 65 74 75 72 6e 20 44 61 74 65 54 69 6d 65 2e 53  eturn DateTime.S
3600: 70 65 63 69 66 79 4b 69 6e 64 28 44 61 74 65 54  pecifyKind(DateT
3610: 69 6d 65 2e 50 61 72 73 65 28 0d 0a 20 20 20 20  ime.Parse(..    
3620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3630: 20 20 20 20 64 61 74 65 54 65 78 74 2c 20 44 61      dateText, Da
3640: 74 65 54 69 6d 65 46 6f 72 6d 61 74 49 6e 66 6f  teTimeFormatInfo
3650: 2e 43 75 72 72 65 6e 74 49 6e 66 6f 2c 0d 0a 20  .CurrentInfo,.. 
3660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3670: 20 20 20 20 20 20 20 6b 69 6e 64 20 3d 3d 20 44         kind == D
3680: 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55 74 63 20  ateTimeKind.Utc 
3690: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
36a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
36b0: 61 74 65 54 69 6d 65 53 74 79 6c 65 73 2e 41 64  ateTimeStyles.Ad
36c0: 6a 75 73 74 54 6f 55 6e 69 76 65 72 73 61 6c 20  justToUniversal 
36d0: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
36e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
36f0: 61 74 65 54 69 6d 65 53 74 79 6c 65 73 2e 4e 6f  ateTimeStyles.No
3700: 6e 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ne),..          
3710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 69                ki
3720: 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nd);..          
3730: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
3740: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20       default:.. 
3750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
3760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3770: 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 61 74        return Dat
3780: 65 54 69 6d 65 2e 53 70 65 63 69 66 79 4b 69 6e  eTime.SpecifyKin
3790: 64 28 44 61 74 65 54 69 6d 65 2e 50 61 72 73 65  d(DateTime.Parse
37a0: 45 78 61 63 74 28 0d 0a 20 20 20 20 20 20 20 20  Exact(..        
37b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c0: 64 61 74 65 54 65 78 74 2c 20 5f 64 61 74 65 74  dateText, _datet
37d0: 69 6d 65 46 6f 72 6d 61 74 73 2c 0d 0a 20 20 20  imeFormats,..   
37e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f0: 20 20 20 20 20 44 61 74 65 54 69 6d 65 46 6f 72       DateTimeFor
3800: 6d 61 74 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e  matInfo.Invarian
3810: 74 49 6e 66 6f 2c 0d 0a 20 20 20 20 20 20 20 20  tInfo,..        
3820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3830: 6b 69 6e 64 20 3d 3d 20 44 61 74 65 54 69 6d 65  kind == DateTime
3840: 4b 69 6e 64 2e 55 74 63 20 3f 0d 0a 20 20 20 20  Kind.Utc ?..    
3850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3860: 20 20 20 20 20 20 20 20 44 61 74 65 54 69 6d 65          DateTime
3870: 53 74 79 6c 65 73 2e 41 64 6a 75 73 74 54 6f 55  Styles.AdjustToU
3880: 6e 69 76 65 72 73 61 6c 20 3a 0d 0a 20 20 20 20  niversal :..    
3890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38a0: 20 20 20 20 20 20 20 20 44 61 74 65 54 69 6d 65          DateTime
38b0: 53 74 79 6c 65 73 2e 4e 6f 6e 65 29 2c 0d 0a 20  Styles.None),.. 
38c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38d0: 20 20 20 20 20 20 20 6b 69 6e 64 29 3b 0d 0a 20         kind);.. 
38e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
38f0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
3900: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
3910: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
3920: 20 43 6f 6e 76 65 72 74 73 20 61 20 6a 75 6c 69   Converts a juli
3930: 61 6e 64 61 79 20 76 61 6c 75 65 20 69 6e 74 6f  anday value into
3940: 20 61 20 44 61 74 65 54 69 6d 65 0d 0a 20 20 20   a DateTime..   
3950: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
3960: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
3970: 6e 61 6d 65 3d 22 6a 75 6c 69 61 6e 44 61 79 22  name="julianDay"
3980: 3e 54 68 65 20 76 61 6c 75 65 20 74 6f 20 63 6f  >The value to co
3990: 6e 76 65 72 74 3c 2f 70 61 72 61 6d 3e 0d 0a 20  nvert</param>.. 
39a0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
39b0: 41 20 2e 4e 45 54 20 44 61 74 65 54 69 6d 65 3c  A .NET DateTime<
39c0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
39d0: 75 62 6c 69 63 20 44 61 74 65 54 69 6d 65 20 54  ublic DateTime T
39e0: 6f 44 61 74 65 54 69 6d 65 28 64 6f 75 62 6c 65  oDateTime(double
39f0: 20 6a 75 6c 69 61 6e 44 61 79 29 0d 0a 20 20 20   julianDay)..   
3a00: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
3a10: 20 54 6f 44 61 74 65 54 69 6d 65 28 6a 75 6c 69   ToDateTime(juli
3a20: 61 6e 44 61 79 2c 20 5f 64 61 74 65 74 69 6d 65  anDay, _datetime
3a30: 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Kind);..    }...
3a40: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
3a50: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76  y>..    /// Conv
3a60: 65 72 74 73 20 61 20 6a 75 6c 69 61 6e 64 61 79  erts a julianday
3a70: 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 44 61   value into a Da
3a80: 74 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20  teTime..    /// 
3a90: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
3aa0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
3ab0: 22 6a 75 6c 69 61 6e 44 61 79 22 3e 54 68 65 20  "julianDay">The 
3ac0: 76 61 6c 75 65 20 74 6f 20 63 6f 6e 76 65 72 74  value to convert
3ad0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
3ae0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6b  / <param name="k
3af0: 69 6e 64 22 3e 54 68 65 20 44 61 74 65 54 69 6d  ind">The DateTim
3b00: 65 4b 69 6e 64 20 74 6f 20 75 73 65 2e 3c 2f 70  eKind to use.</p
3b10: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
3b20: 72 65 74 75 72 6e 73 3e 41 20 2e 4e 45 54 20 44  returns>A .NET D
3b30: 61 74 65 54 69 6d 65 3c 2f 72 65 74 75 72 6e 73  ateTime</returns
3b40: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74  >..    public st
3b50: 61 74 69 63 20 44 61 74 65 54 69 6d 65 20 54 6f  atic DateTime To
3b60: 44 61 74 65 54 69 6d 65 28 64 6f 75 62 6c 65 20  DateTime(double 
3b70: 6a 75 6c 69 61 6e 44 61 79 2c 20 44 61 74 65 54  julianDay, DateT
3b80: 69 6d 65 4b 69 6e 64 20 6b 69 6e 64 29 0d 0a 20  imeKind kind).. 
3b90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
3ba0: 74 75 72 6e 20 44 61 74 65 54 69 6d 65 2e 53 70  turn DateTime.Sp
3bb0: 65 63 69 66 79 4b 69 6e 64 28 0d 0a 20 20 20 20  ecifyKind(..    
3bc0: 20 20 20 20 20 20 20 20 44 61 74 65 54 69 6d 65          DateTime
3bd0: 2e 46 72 6f 6d 4f 41 44 61 74 65 28 6a 75 6c 69  .FromOADate(juli
3be0: 61 6e 44 61 79 20 2d 20 4f 6c 65 41 75 74 6f 6d  anDay - OleAutom
3bf0: 61 74 69 6f 6e 45 70 6f 63 68 41 73 4a 75 6c 69  ationEpochAsJuli
3c00: 61 6e 44 61 79 29 2c 20 6b 69 6e 64 29 3b 0d 0a  anDay), kind);..
3c10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
3c20: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
3c30: 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 44  /// Converts a D
3c40: 61 74 65 54 69 6d 65 20 73 74 72 75 63 74 20 74  ateTime struct t
3c50: 6f 20 61 20 4a 75 6c 69 61 6e 44 61 79 20 64 6f  o a JulianDay do
3c60: 75 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  uble..    /// </
3c70: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
3c80: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76  / <param name="v
3c90: 61 6c 75 65 22 3e 54 68 65 20 44 61 74 65 54 69  alue">The DateTi
3ca0: 6d 65 20 74 6f 20 63 6f 6e 76 65 72 74 3c 2f 70  me to convert</p
3cb0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
3cc0: 72 65 74 75 72 6e 73 3e 54 68 65 20 4a 75 6c 69  returns>The Juli
3cd0: 61 6e 44 61 79 20 76 61 6c 75 65 20 74 68 65 20  anDay value the 
3ce0: 44 61 74 65 74 69 6d 65 20 72 65 70 72 65 73 65  Datetime represe
3cf0: 6e 74 73 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  nts</returns>.. 
3d00: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
3d10: 20 64 6f 75 62 6c 65 20 54 6f 4a 75 6c 69 61 6e   double ToJulian
3d20: 44 61 79 28 44 61 74 65 54 69 6d 65 20 76 61 6c  Day(DateTime val
3d30: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
3d40: 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 2e 54    return value.T
3d50: 6f 4f 41 44 61 74 65 28 29 20 2b 20 4f 6c 65 41  oOADate() + OleA
3d60: 75 74 6f 6d 61 74 69 6f 6e 45 70 6f 63 68 41 73  utomationEpochAs
3d70: 4a 75 6c 69 61 6e 44 61 79 3b 0d 0a 20 20 20 20  JulianDay;..    
3d80: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
3d90: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
3da0: 43 6f 6e 76 65 72 74 73 20 61 20 44 61 74 65 54  Converts a DateT
3db0: 69 6d 65 20 73 74 72 75 63 74 20 74 6f 20 74 68  ime struct to th
3dc0: 65 20 77 68 6f 6c 65 20 6e 75 6d 62 65 72 20 6f  e whole number o
3dd0: 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20  f seconds since 
3de0: 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 55 6e 69  the..    /// Uni
3df0: 78 20 65 70 6f 63 68 2e 0d 0a 20 20 20 20 2f 2f  x epoch...    //
3e00: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
3e10: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
3e20: 65 3d 22 76 61 6c 75 65 22 3e 54 68 65 20 44 61  e="value">The Da
3e30: 74 65 54 69 6d 65 20 74 6f 20 63 6f 6e 76 65 72  teTime to conver
3e40: 74 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  t</param>..    /
3e50: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20  // <returns>The 
3e60: 77 68 6f 6c 65 20 6e 75 6d 62 65 72 20 6f 66 20  whole number of 
3e70: 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 74 68  seconds since th
3e80: 65 20 55 6e 69 78 20 65 70 6f 63 68 3c 2f 72 65  e Unix epoch</re
3e90: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
3ea0: 69 63 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 54  ic static long T
3eb0: 6f 55 6e 69 78 45 70 6f 63 68 28 44 61 74 65 54  oUnixEpoch(DateT
3ec0: 69 6d 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ime value)..    
3ed0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
3ee0: 6e 20 28 76 61 6c 75 65 2e 53 75 62 74 72 61 63  n (value.Subtrac
3ef0: 74 28 55 6e 69 78 45 70 6f 63 68 29 2e 54 69 63  t(UnixEpoch).Tic
3f00: 6b 73 20 2f 20 54 69 6d 65 53 70 61 6e 2e 54 69  ks / TimeSpan.Ti
3f10: 63 6b 73 50 65 72 53 65 63 6f 6e 64 29 3b 0d 0a  cksPerSecond);..
3f20: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
3f30: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
3f40: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
3f50: 64 65 66 61 75 6c 74 20 44 61 74 65 54 69 6d 65  default DateTime
3f60: 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 74   format string t
3f70: 6f 20 75 73 65 20 66 6f 72 20 74 68 65 20 73 70  o use for the sp
3f80: 65 63 69 66 69 65 64 0d 0a 20 20 20 20 2f 2f 2f  ecified..    ///
3f90: 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 0d 0a   DateTimeKind...
3fa0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
3fb0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
3fc0: 61 6d 20 6e 61 6d 65 3d 22 6b 69 6e 64 22 3e 54  am name="kind">T
3fd0: 68 65 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20  he DateTimeKind 
3fe0: 74 6f 20 75 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d  to use.</param>.
3ff0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
4000: 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  s>..    /// The 
4010: 64 65 66 61 75 6c 74 20 44 61 74 65 54 69 6d 65  default DateTime
4020: 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 74   format string t
4030: 6f 20 75 73 65 20 66 6f 72 20 74 68 65 20 73 70  o use for the sp
4040: 65 63 69 66 69 65 64 20 44 61 74 65 54 69 6d 65  ecified DateTime
4050: 4b 69 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  Kind...    /// <
4060: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
4070: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
4080: 72 69 6e 67 20 47 65 74 44 61 74 65 54 69 6d 65  ring GetDateTime
4090: 4b 69 6e 64 46 6f 72 6d 61 74 28 44 61 74 65 54  KindFormat(DateT
40a0: 69 6d 65 4b 69 6e 64 20 6b 69 6e 64 29 0d 0a 20  imeKind kind).. 
40b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
40c0: 74 75 72 6e 20 28 6b 69 6e 64 20 3d 3d 20 44 61  turn (kind == Da
40d0: 74 65 54 69 6d 65 4b 69 6e 64 2e 55 74 63 29 20  teTimeKind.Utc) 
40e0: 3f 20 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61  ? _datetimeForma
40f0: 74 55 74 63 20 3a 20 5f 64 61 74 65 74 69 6d 65  tUtc : _datetime
4100: 46 6f 72 6d 61 74 4c 6f 63 61 6c 3b 0d 0a 20 20  FormatLocal;..  
4110: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
4120: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
4130: 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 44 61 74  / Converts a Dat
4140: 65 54 69 6d 65 20 74 6f 20 61 20 73 74 72 69 6e  eTime to a strin
4150: 67 20 76 61 6c 75 65 2c 20 75 73 69 6e 67 20 74  g value, using t
4160: 68 65 20 63 75 72 72 65 6e 74 20 44 61 74 65 54  he current DateT
4170: 69 6d 65 46 6f 72 6d 61 74 20 73 70 65 63 69 66  imeFormat specif
4180: 69 65 64 20 66 6f 72 20 74 68 65 20 63 6f 6e 6e  ied for the conn
4190: 65 63 74 69 6f 6e 20 77 68 65 6e 20 69 74 20 77  ection when it w
41a0: 61 73 20 6f 70 65 6e 65 64 2e 0d 0a 20 20 20 20  as opened...    
41b0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
41c0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
41d0: 61 6d 65 3d 22 64 61 74 65 56 61 6c 75 65 22 3e  ame="dateValue">
41e0: 54 68 65 20 44 61 74 65 54 69 6d 65 20 76 61 6c  The DateTime val
41f0: 75 65 20 74 6f 20 63 6f 6e 76 65 72 74 3c 2f 70  ue to convert</p
4200: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
4210: 72 65 74 75 72 6e 73 3e 45 69 74 68 65 72 20 61  returns>Either a
4220: 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69   string containi
4230: 6e 67 20 74 68 65 20 6c 6f 6e 67 20 69 6e 74 65  ng the long inte
4240: 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 31 30  ger number of 10
4250: 30 2d 6e 61 6e 6f 73 65 63 6f 6e 64 20 75 6e 69  0-nanosecond uni
4260: 74 73 20 73 69 6e 63 65 20 53 79 73 74 65 6d 2e  ts since System.
4270: 44 61 74 65 54 69 6d 65 2e 4d 69 6e 56 61 6c 75  DateTime.MinValu
4280: 65 2c 20 61 0d 0a 20 20 20 20 2f 2f 2f 20 4a 75  e, a..    /// Ju
4290: 6c 69 61 6e 20 64 61 79 20 64 6f 75 62 6c 65 2c  lian day double,
42a0: 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62   an integer numb
42b0: 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69  er of seconds si
42c0: 6e 63 65 20 74 68 65 20 55 6e 69 78 20 65 70 6f  nce the Unix epo
42d0: 63 68 2c 20 61 20 63 75 6c 74 75 72 65 2d 69 6e  ch, a culture-in
42e0: 64 65 70 65 6e 64 65 6e 74 20 66 6f 72 6d 61 74  dependent format
42f0: 74 65 64 20 64 61 74 65 20 61 6e 64 20 74 69 6d  ted date and tim
4300: 65 0d 0a 20 20 20 20 2f 2f 2f 20 73 74 72 69 6e  e..    /// strin
4310: 67 2c 20 61 20 66 6f 72 6d 61 74 74 65 64 20 64  g, a formatted d
4320: 61 74 65 20 61 6e 64 20 74 69 6d 65 20 73 74 72  ate and time str
4330: 69 6e 67 20 69 6e 20 74 68 65 20 63 75 72 72 65  ing in the curre
4340: 6e 74 20 63 75 6c 74 75 72 65 2c 20 6f 72 20 61  nt culture, or a
4350: 6e 20 49 53 4f 38 36 30 31 2d 66 6f 72 6d 61 74  n ISO8601-format
4360: 20 64 61 74 65 2f 74 69 6d 65 20 73 74 72 69 6e   date/time strin
4370: 67 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  g.</returns>..  
4380: 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
4390: 54 6f 53 74 72 69 6e 67 28 44 61 74 65 54 69 6d  ToString(DateTim
43a0: 65 20 64 61 74 65 56 61 6c 75 65 29 0d 0a 20 20  e dateValue)..  
43b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 77 69    {..        swi
43c0: 74 63 68 20 28 5f 64 61 74 65 74 69 6d 65 46 6f  tch (_datetimeFo
43d0: 72 6d 61 74 29 0d 0a 20 20 20 20 20 20 20 20 7b  rmat)..        {
43e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
43f0: 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72  se SQLiteDateFor
4400: 6d 61 74 73 2e 54 69 63 6b 73 3a 0d 0a 20 20 20  mats.Ticks:..   
4410: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
4420: 75 72 6e 20 64 61 74 65 56 61 6c 75 65 2e 54 69  urn dateValue.Ti
4430: 63 6b 73 2e 54 6f 53 74 72 69 6e 67 28 43 75 6c  cks.ToString(Cul
4440: 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
4450: 6e 74 43 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20  ntCulture);..   
4460: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51           case SQ
4470: 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e  LiteDateFormats.
4480: 4a 75 6c 69 61 6e 44 61 79 3a 0d 0a 20 20 20 20  JulianDay:..    
4490: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
44a0: 72 6e 20 54 6f 4a 75 6c 69 61 6e 44 61 79 28 64  rn ToJulianDay(d
44b0: 61 74 65 56 61 6c 75 65 29 2e 54 6f 53 74 72 69  ateValue).ToStri
44c0: 6e 67 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49  ng(CultureInfo.I
44d0: 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29  nvariantCulture)
44e0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  ;..            c
44f0: 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f  ase SQLiteDateFo
4500: 72 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63 68 3a  rmats.UnixEpoch:
4510: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4520: 20 20 72 65 74 75 72 6e 20 28 28 6c 6f 6e 67 29    return ((long)
4530: 28 64 61 74 65 56 61 6c 75 65 2e 53 75 62 74 72  (dateValue.Subtr
4540: 61 63 74 28 55 6e 69 78 45 70 6f 63 68 29 2e 54  act(UnixEpoch).T
4550: 69 63 6b 73 20 2f 20 54 69 6d 65 53 70 61 6e 2e  icks / TimeSpan.
4560: 54 69 63 6b 73 50 65 72 53 65 63 6f 6e 64 29 29  TicksPerSecond))
4570: 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20  .ToString();..  
4580: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53            case S
4590: 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73  QLiteDateFormats
45a0: 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72  .InvariantCultur
45b0: 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e:..            
45c0: 20 20 20 20 72 65 74 75 72 6e 20 64 61 74 65 56      return dateV
45d0: 61 6c 75 65 2e 54 6f 53 74 72 69 6e 67 28 46 75  alue.ToString(Fu
45e0: 6c 6c 46 6f 72 6d 61 74 2c 20 43 75 6c 74 75 72  llFormat, Cultur
45f0: 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43  eInfo.InvariantC
4600: 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20 20 20  ulture);..      
4610: 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74        case SQLit
4620: 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 43 75 72  eDateFormats.Cur
4630: 72 65 6e 74 43 75 6c 74 75 72 65 3a 0d 0a 20 20  rentCulture:..  
4640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
4650: 74 75 72 6e 20 64 61 74 65 56 61 6c 75 65 2e 54  turn dateValue.T
4660: 6f 53 74 72 69 6e 67 28 46 75 6c 6c 46 6f 72 6d  oString(FullForm
4670: 61 74 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e  at, CultureInfo.
4680: 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 29 3b  CurrentCulture);
4690: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 65  ..            de
46a0: 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20  fault:..        
46b0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
46c0: 64 61 74 65 56 61 6c 75 65 2e 4b 69 6e 64 20 3d  dateValue.Kind =
46d0: 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55  = DateTimeKind.U
46e0: 6e 73 70 65 63 69 66 69 65 64 29 20 3f 0d 0a 20  nspecified) ?.. 
46f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4700: 20 20 20 44 61 74 65 54 69 6d 65 2e 53 70 65 63     DateTime.Spec
4710: 69 66 79 4b 69 6e 64 28 64 61 74 65 56 61 6c 75  ifyKind(dateValu
4720: 65 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64  e, _datetimeKind
4730: 29 2e 54 6f 53 74 72 69 6e 67 28 0d 0a 20 20 20  ).ToString(..   
4740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4750: 20 20 20 20 20 47 65 74 44 61 74 65 54 69 6d 65       GetDateTime
4760: 4b 69 6e 64 46 6f 72 6d 61 74 28 5f 64 61 74 65  KindFormat(_date
4770: 74 69 6d 65 4b 69 6e 64 29 2c 20 43 75 6c 74 75  timeKind), Cultu
4780: 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74  reInfo.Invariant
4790: 43 75 6c 74 75 72 65 29 20 3a 0d 0a 20 20 20 20  Culture) :..    
47a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47b0: 64 61 74 65 56 61 6c 75 65 2e 54 6f 53 74 72 69  dateValue.ToStri
47c0: 6e 67 28 47 65 74 44 61 74 65 54 69 6d 65 4b 69  ng(GetDateTimeKi
47d0: 6e 64 46 6f 72 6d 61 74 28 64 61 74 65 56 61 6c  ndFormat(dateVal
47e0: 75 65 2e 4b 69 6e 64 29 2c 20 43 75 6c 74 75 72  ue.Kind), Cultur
47f0: 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43  eInfo.InvariantC
4800: 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20 20 20  ulture);..      
4810: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
4820: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
4830: 0a 20 20 20 20 2f 2f 2f 20 49 6e 74 65 72 6e 61  .    /// Interna
4840: 6c 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 63 6f  l function to co
4850: 6e 76 65 72 74 20 61 20 55 54 46 2d 38 20 65 6e  nvert a UTF-8 en
4860: 63 6f 64 65 64 20 49 6e 74 50 74 72 20 6f 66 20  coded IntPtr of 
4870: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6c 65  the specified le
4880: 6e 67 74 68 20 74 6f 20 61 20 44 61 74 65 54 69  ngth to a DateTi
4890: 6d 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  me...    /// </s
48a0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
48b0: 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20   <remarks>..    
48c0: 2f 2f 2f 20 54 68 69 73 20 69 73 20 61 20 63 6f  /// This is a co
48d0: 6e 76 65 6e 69 65 6e 63 65 20 66 75 6e 63 74 69  nvenience functi
48e0: 6f 6e 2c 20 77 68 69 63 68 20 66 69 72 73 74 20  on, which first 
48f0: 63 61 6c 6c 73 20 54 6f 53 74 72 69 6e 67 28 29  calls ToString()
4900: 20 6f 6e 20 74 68 65 20 49 6e 74 50 74 72 20 74   on the IntPtr t
4910: 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  o convert it to 
4920: 61 20 73 74 72 69 6e 67 2c 20 74 68 65 6e 20 63  a string, then c
4930: 61 6c 6c 73 0d 0a 20 20 20 20 2f 2f 2f 20 54 6f  alls..    /// To
4940: 44 61 74 65 54 69 6d 65 28 29 20 6f 6e 20 74 68  DateTime() on th
4950: 65 20 73 74 72 69 6e 67 20 74 6f 20 72 65 74 75  e string to retu
4960: 72 6e 20 61 20 44 61 74 65 54 69 6d 65 2e 0d 0a  rn a DateTime...
4970: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b      /// </remark
4980: 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  s>..    /// <par
4990: 61 6d 20 6e 61 6d 65 3d 22 70 74 72 22 3e 41 20  am name="ptr">A 
49a0: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 55  pointer to the U
49b0: 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 73 74 72  TF-8 encoded str
49c0: 69 6e 67 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ing</param>..   
49d0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
49e0: 3d 22 6c 65 6e 22 3e 54 68 65 20 6c 65 6e 67 74  ="len">The lengt
49f0: 68 20 69 6e 20 62 79 74 65 73 20 6f 66 20 74 68  h in bytes of th
4a00: 65 20 73 74 72 69 6e 67 3c 2f 70 61 72 61 6d 3e  e string</param>
4a10: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
4a20: 6e 73 3e 54 68 65 20 70 61 72 73 65 64 20 44 61  ns>The parsed Da
4a30: 74 65 54 69 6d 65 20 76 61 6c 75 65 3c 2f 72 65  teTime value</re
4a40: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
4a50: 72 6e 61 6c 20 44 61 74 65 54 69 6d 65 20 54 6f  rnal DateTime To
4a60: 44 61 74 65 54 69 6d 65 28 49 6e 74 50 74 72 20  DateTime(IntPtr 
4a70: 70 74 72 2c 20 69 6e 74 20 6c 65 6e 29 0d 0a 20  ptr, int len).. 
4a80: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
4a90: 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 54 6f  rn ToDateTime(To
4aa0: 53 74 72 69 6e 67 28 70 74 72 2c 20 6c 65 6e 29  String(ptr, len)
4ab0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
4ac0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
4ad0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
4ae0: 0d 0a 20 20 20 20 2f 2f 2f 20 53 6d 61 72 74 20  ..    /// Smart 
4af0: 6d 65 74 68 6f 64 20 6f 66 20 73 70 6c 69 74 74  method of splitt
4b00: 69 6e 67 20 61 20 73 74 72 69 6e 67 2e 20 20 53  ing a string.  S
4b10: 6b 69 70 73 20 71 75 6f 74 65 64 20 65 6c 65 6d  kips quoted elem
4b20: 65 6e 74 73 2c 20 72 65 6d 6f 76 65 73 20 74 68  ents, removes th
4b30: 65 20 71 75 6f 74 65 73 2e 0d 0a 20 20 20 20 2f  e quotes...    /
4b40: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
4b50: 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e     /// <remarks>
4b60: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 73  ..    /// This s
4b70: 70 6c 69 74 20 66 75 6e 63 74 69 6f 6e 20 77 6f  plit function wo
4b80: 72 6b 73 20 73 6f 6d 65 77 68 61 74 20 6c 69 6b  rks somewhat lik
4b90: 65 20 74 68 65 20 53 74 72 69 6e 67 2e 53 70 6c  e the String.Spl
4ba0: 69 74 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 6e  it() function in
4bb0: 20 74 68 61 74 20 69 74 20 62 72 65 61 6b 73 20   that it breaks 
4bc0: 61 70 61 72 74 20 61 20 73 74 72 69 6e 67 20 69  apart a string i
4bd0: 6e 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20 70 69 65  nto..    /// pie
4be0: 63 65 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20  ces and returns 
4bf0: 74 68 65 20 70 69 65 63 65 73 20 61 73 20 61 6e  the pieces as an
4c00: 20 61 72 72 61 79 2e 20 20 54 68 65 20 70 72 69   array.  The pri
4c10: 6d 61 72 79 20 64 69 66 66 65 72 65 6e 63 65 73  mary differences
4c20: 20 61 72 65 3a 0d 0a 20 20 20 20 2f 2f 2f 20 3c   are:..    /// <
4c30: 6c 69 73 74 20 74 79 70 65 3d 22 62 75 6c 6c 65  list type="bulle
4c40: 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74  t">..    /// <it
4c50: 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e  em><description>
4c60: 4f 6e 6c 79 20 6f 6e 65 20 63 68 61 72 61 63 74  Only one charact
4c70: 65 72 20 63 61 6e 20 62 65 20 70 72 6f 76 69 64  er can be provid
4c80: 65 64 20 61 73 20 61 20 73 65 70 61 72 61 74 6f  ed as a separato
4c90: 72 20 63 68 61 72 61 63 74 65 72 3c 2f 64 65 73  r character</des
4ca0: 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e  cription></item>
4cb0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e  ..    /// <item>
4cc0: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 51 75 6f  <description>Quo
4cd0: 74 65 64 20 74 65 78 74 20 69 6e 73 69 64 65 20  ted text inside 
4ce0: 74 68 65 20 73 74 72 69 6e 67 20 69 73 20 73 6b  the string is sk
4cf0: 69 70 70 65 64 20 6f 76 65 72 20 77 68 65 6e 20  ipped over when 
4d00: 73 65 61 72 63 68 69 6e 67 20 66 6f 72 20 74 68  searching for th
4d10: 65 20 73 65 70 61 72 61 74 6f 72 2c 20 61 6e 64  e separator, and
4d20: 20 74 68 65 20 71 75 6f 74 65 73 20 61 72 65 20   the quotes are 
4d30: 72 65 6d 6f 76 65 64 2e 3c 2f 64 65 73 63 72 69  removed.</descri
4d40: 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20  ption></item>.. 
4d50: 20 20 20 2f 2f 2f 20 3c 2f 6c 69 73 74 3e 0d 0a     /// </list>..
4d60: 20 20 20 20 2f 2f 2f 20 54 68 75 73 2c 20 69 66      /// Thus, if
4d70: 20 73 70 6c 69 74 74 69 6e 67 20 74 68 65 20 66   splitting the f
4d80: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 69 6e 67 20  ollowing string 
4d90: 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 63 6f  looking for a co
4da0: 6d 6d 61 3a 3c 62 72 2f 3e 0d 0a 20 20 20 20 2f  mma:<br/>..    /
4db0: 2f 2f 20 4f 6e 65 2c 54 77 6f 2c 20 22 54 68 72  // One,Two, "Thr
4dc0: 65 65 2c 20 46 6f 75 72 22 2c 20 46 69 76 65 3c  ee, Four", Five<
4dd0: 62 72 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 62  br/>..    /// <b
4de0: 72 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  r/>..    /// The
4df0: 20 72 65 73 75 6c 74 69 6e 67 20 61 72 72 61 79   resulting array
4e00: 20 77 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 3c 62   would contain<b
4e10: 72 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 5b 30 5d  r/>..    /// [0]
4e20: 20 4f 6e 65 3c 62 72 2f 3e 0d 0a 20 20 20 20 2f   One<br/>..    /
4e30: 2f 2f 20 5b 31 5d 20 54 77 6f 3c 62 72 2f 3e 0d  // [1] Two<br/>.
4e40: 0a 20 20 20 20 2f 2f 2f 20 5b 32 5d 20 54 68 72  .    /// [2] Thr
4e50: 65 65 2c 20 46 6f 75 72 3c 62 72 2f 3e 0d 0a 20  ee, Four<br/>.. 
4e60: 20 20 20 2f 2f 2f 20 5b 33 5d 20 46 69 76 65 3c     /// [3] Five<
4e70: 62 72 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 62  br/>..    /// <b
4e80: 72 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 74  r/>..    /// Not
4e90: 65 20 74 68 61 74 20 74 68 65 20 6c 65 61 64 69  e that the leadi
4ea0: 6e 67 20 61 6e 64 20 74 72 61 69 6c 69 6e 67 20  ng and trailing 
4eb0: 73 70 61 63 65 73 20 77 65 72 65 20 72 65 6d 6f  spaces were remo
4ec0: 76 65 64 20 66 72 6f 6d 20 65 61 63 68 20 69 74  ved from each it
4ed0: 65 6d 20 64 75 72 69 6e 67 20 74 68 65 20 73 70  em during the sp
4ee0: 6c 69 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  lit...    /// </
4ef0: 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f  remarks>..    //
4f00: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
4f10: 6f 75 72 63 65 22 3e 53 6f 75 72 63 65 20 73 74  ource">Source st
4f20: 72 69 6e 67 20 74 6f 20 73 70 6c 69 74 20 61 70  ring to split ap
4f30: 61 72 74 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  art</param>..   
4f40: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
4f50: 3d 22 73 65 70 61 72 61 74 6f 72 22 3e 53 65 70  ="separator">Sep
4f60: 61 72 61 74 6f 72 20 63 68 61 72 61 63 74 65 72  arator character
4f70: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
4f80: 2f 20 3c 72 65 74 75 72 6e 73 3e 41 20 73 74 72  / <returns>A str
4f90: 69 6e 67 20 61 72 72 61 79 20 6f 66 20 74 68 65  ing array of the
4fa0: 20 73 70 6c 69 74 20 75 70 20 65 6c 65 6d 65 6e   split up elemen
4fb0: 74 73 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  ts</returns>..  
4fc0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
4fd0: 73 74 72 69 6e 67 5b 5d 20 53 70 6c 69 74 28 73  string[] Split(s
4fe0: 74 72 69 6e 67 20 73 6f 75 72 63 65 2c 20 63 68  tring source, ch
4ff0: 61 72 20 73 65 70 61 72 61 74 6f 72 29 0d 0a 20  ar separator).. 
5000: 20 20 20 7b 0d 0a 20 20 20 20 20 20 63 68 61 72     {..      char
5010: 5b 5d 20 74 6f 6b 73 20 3d 20 6e 65 77 20 63 68  [] toks = new ch
5020: 61 72 5b 32 5d 20 7b 20 27 5c 22 27 2c 20 73 65  ar[2] { '\"', se
5030: 70 61 72 61 74 6f 72 20 7d 3b 0d 0a 20 20 20 20  parator };..    
5040: 20 20 63 68 61 72 5b 5d 20 71 75 6f 74 20 3d 20    char[] quot = 
5050: 6e 65 77 20 63 68 61 72 5b 31 5d 20 7b 20 27 5c  new char[1] { '\
5060: 22 27 20 7d 3b 0d 0a 20 20 20 20 20 20 69 6e 74  "' };..      int
5070: 20 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 4c   n = 0;..      L
5080: 69 73 74 3c 73 74 72 69 6e 67 3e 20 6c 73 20 3d  ist<string> ls =
5090: 20 6e 65 77 20 4c 69 73 74 3c 73 74 72 69 6e 67   new List<string
50a0: 3e 28 29 3b 0d 0a 20 20 20 20 20 20 73 74 72 69  >();..      stri
50b0: 6e 67 20 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 77  ng s;....      w
50c0: 68 69 6c 65 20 28 73 6f 75 72 63 65 2e 4c 65 6e  hile (source.Len
50d0: 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  gth > 0)..      
50e0: 7b 0d 0a 20 20 20 20 20 20 20 20 6e 20 3d 20 73  {..        n = s
50f0: 6f 75 72 63 65 2e 49 6e 64 65 78 4f 66 41 6e 79  ource.IndexOfAny
5100: 28 74 6f 6b 73 2c 20 6e 29 3b 0d 0a 20 20 20 20  (toks, n);..    
5110: 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 2d 31 29      if (n == -1)
5120: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
5130: 20 69 66 20 28 73 6f 75 72 63 65 5b 6e 5d 20 3d   if (source[n] =
5140: 3d 20 74 6f 6b 73 5b 30 5d 29 0d 0a 20 20 20 20  = toks[0])..    
5150: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5160: 20 2f 2f 73 6f 75 72 63 65 20 3d 20 73 6f 75 72   //source = sour
5170: 63 65 2e 52 65 6d 6f 76 65 28 6e 2c 20 31 29 3b  ce.Remove(n, 1);
5180: 0d 0a 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20  ..          n = 
5190: 73 6f 75 72 63 65 2e 49 6e 64 65 78 4f 66 41 6e  source.IndexOfAn
51a0: 79 28 71 75 6f 74 2c 20 6e 20 2b 20 31 29 3b 0d  y(quot, n + 1);.
51b0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e  .          if (n
51c0: 20 3d 3d 20 2d 31 29 0d 0a 20 20 20 20 20 20 20   == -1)..       
51d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
51e0: 20 20 2f 2f 73 6f 75 72 63 65 20 3d 20 22 5c 22    //source = "\"
51f0: 22 20 2b 20 73 6f 75 72 63 65 3b 0d 0a 20 20 20  " + source;..   
5200: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
5210: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
5220: 20 20 20 20 20 20 20 20 6e 2b 2b 3b 0d 0a 20 20          n++;..  
5230: 20 20 20 20 20 20 20 20 2f 2f 73 6f 75 72 63 65          //source
5240: 20 3d 20 73 6f 75 72 63 65 2e 52 65 6d 6f 76 65   = source.Remove
5250: 28 6e 2c 20 31 29 3b 0d 0a 20 20 20 20 20 20 20  (n, 1);..       
5260: 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65   }..        else
5270: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
5280: 20 20 20 20 20 20 20 73 20 3d 20 73 6f 75 72 63         s = sourc
5290: 65 2e 53 75 62 73 74 72 69 6e 67 28 30 2c 20 6e  e.Substring(0, n
52a0: 29 2e 54 72 69 6d 28 29 3b 0d 0a 20 20 20 20 20  ).Trim();..     
52b0: 20 20 20 20 20 69 66 20 28 73 2e 4c 65 6e 67 74       if (s.Lengt
52c0: 68 20 3e 20 31 20 26 26 20 73 5b 30 5d 20 3d 3d  h > 1 && s[0] ==
52d0: 20 71 75 6f 74 5b 30 5d 20 26 26 20 73 5b 73 2e   quot[0] && s[s.
52e0: 4c 65 6e 67 74 68 20 2d 20 31 5d 20 3d 3d 20 73  Length - 1] == s
52f0: 5b 30 5d 29 0d 0a 20 20 20 20 20 20 20 20 20 20  [0])..          
5300: 20 20 73 20 3d 20 73 2e 53 75 62 73 74 72 69 6e    s = s.Substrin
5310: 67 28 31 2c 20 73 2e 4c 65 6e 67 74 68 20 2d 20  g(1, s.Length - 
5320: 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  2);....         
5330: 20 73 6f 75 72 63 65 20 3d 20 73 6f 75 72 63 65   source = source
5340: 2e 53 75 62 73 74 72 69 6e 67 28 6e 20 2b 20 31  .Substring(n + 1
5350: 29 2e 54 72 69 6d 28 29 3b 0d 0a 20 20 20 20 20  ).Trim();..     
5360: 20 20 20 20 20 69 66 20 28 73 2e 4c 65 6e 67 74       if (s.Lengt
5370: 68 20 3e 20 30 29 20 6c 73 2e 41 64 64 28 73 29  h > 0) ls.Add(s)
5380: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 6e 20 3d  ;..          n =
5390: 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a   0;..        }..
53a0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 69        }..      i
53b0: 66 20 28 73 6f 75 72 63 65 2e 4c 65 6e 67 74 68  f (source.Length
53c0: 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a   > 0)..      {..
53d0: 20 20 20 20 20 20 20 20 73 20 3d 20 73 6f 75 72          s = sour
53e0: 63 65 2e 54 72 69 6d 28 29 3b 0d 0a 20 20 20 20  ce.Trim();..    
53f0: 20 20 20 20 69 66 20 28 73 2e 4c 65 6e 67 74 68      if (s.Length
5400: 20 3e 20 31 20 26 26 20 73 5b 30 5d 20 3d 3d 20   > 1 && s[0] == 
5410: 71 75 6f 74 5b 30 5d 20 26 26 20 73 5b 73 2e 4c  quot[0] && s[s.L
5420: 65 6e 67 74 68 20 2d 20 31 5d 20 3d 3d 20 73 5b  ength - 1] == s[
5430: 30 5d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 73  0])..          s
5440: 20 3d 20 73 2e 53 75 62 73 74 72 69 6e 67 28 31   = s.Substring(1
5450: 2c 20 73 2e 4c 65 6e 67 74 68 20 2d 20 32 29 3b  , s.Length - 2);
5460: 0d 0a 20 20 20 20 20 20 20 20 6c 73 2e 41 64 64  ..        ls.Add
5470: 28 73 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  (s);..      }...
5480: 0a 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20  .      string[] 
5490: 61 72 20 3d 20 6e 65 77 20 73 74 72 69 6e 67 5b  ar = new string[
54a0: 6c 73 2e 43 6f 75 6e 74 5d 3b 0d 0a 20 20 20 20  ls.Count];..    
54b0: 20 20 6c 73 2e 43 6f 70 79 54 6f 28 61 72 2c 20    ls.CopyTo(ar, 
54c0: 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74  0);....      ret
54d0: 75 72 6e 20 61 72 3b 0d 0a 20 20 20 20 7d 0d 0a  urn ar;..    }..
54e0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
54f0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e  ry>..    /// Con
5500: 76 65 72 74 20 61 20 76 61 6c 75 65 20 74 6f 20  vert a value to 
5510: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2e 0d 0a  true or false...
5520: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
5530: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
5540: 61 6d 20 6e 61 6d 65 3d 22 73 6f 75 72 63 65 22  am name="source"
5550: 3e 41 20 73 74 72 69 6e 67 20 6f 72 20 6e 75 6d  >A string or num
5560: 62 65 72 20 72 65 70 72 65 73 65 6e 74 69 6e 67  ber representing
5570: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 3c 2f   true or false</
5580: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
5590: 3c 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72  <returns></retur
55a0: 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
55b0: 73 74 61 74 69 63 20 62 6f 6f 6c 20 54 6f 42 6f  static bool ToBo
55c0: 6f 6c 65 61 6e 28 6f 62 6a 65 63 74 20 73 6f 75  olean(object sou
55d0: 72 63 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  rce)..    {..   
55e0: 20 20 20 69 66 20 28 73 6f 75 72 63 65 20 69 73     if (source is
55f0: 20 62 6f 6f 6c 29 20 72 65 74 75 72 6e 20 28 62   bool) return (b
5600: 6f 6f 6c 29 73 6f 75 72 63 65 3b 0d 0a 0d 0a 20  ool)source;.... 
5610: 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 42 6f       return ToBo
5620: 6f 6c 65 61 6e 28 73 6f 75 72 63 65 2e 54 6f 53  olean(source.ToS
5630: 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 7d  tring());..    }
5640: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
5650: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43  mary>..    /// C
5660: 6f 6e 76 65 72 74 20 61 20 73 74 72 69 6e 67 20  onvert a string 
5670: 74 6f 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65  to true or false
5680: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
5690: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
56a0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 6f 75 72  param name="sour
56b0: 63 65 22 3e 41 20 73 74 72 69 6e 67 20 72 65 70  ce">A string rep
56c0: 72 65 73 65 6e 74 69 6e 67 20 74 72 75 65 20 6f  resenting true o
56d0: 72 20 66 61 6c 73 65 3c 2f 70 61 72 61 6d 3e 0d  r false</param>.
56e0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
56f0: 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  s></returns>..  
5700: 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d    /// <remarks>.
5710: 0a 20 20 20 20 2f 2f 2f 20 22 79 65 73 22 2c 20  .    /// "yes", 
5720: 22 6e 6f 22 2c 20 22 79 22 2c 20 22 6e 22 2c 20  "no", "y", "n", 
5730: 22 30 22 2c 20 22 31 22 2c 20 22 6f 6e 22 2c 20  "0", "1", "on", 
5740: 22 6f 66 66 22 20 61 73 20 77 65 6c 6c 20 61 73  "off" as well as
5750: 20 42 6f 6f 6c 65 61 6e 2e 46 61 6c 73 65 53 74   Boolean.FalseSt
5760: 72 69 6e 67 20 61 6e 64 20 42 6f 6f 6c 65 61 6e  ring and Boolean
5770: 2e 54 72 75 65 53 74 72 69 6e 67 20 77 69 6c 6c  .TrueString will
5780: 20 61 6c 6c 20 62 65 0d 0a 20 20 20 20 2f 2f 2f   all be..    ///
5790: 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 20   converted to a 
57a0: 70 72 6f 70 65 72 20 62 6f 6f 6c 65 61 6e 20 76  proper boolean v
57b0: 61 6c 75 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  alue...    /// <
57c0: 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 70  /remarks>..    p
57d0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f  ublic static boo
57e0: 6c 20 54 6f 42 6f 6f 6c 65 61 6e 28 73 74 72 69  l ToBoolean(stri
57f0: 6e 67 20 73 6f 75 72 63 65 29 0d 0a 20 20 20 20  ng source)..    
5800: 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 53 74 72  {..      if (Str
5810: 69 6e 67 2e 43 6f 6d 70 61 72 65 28 73 6f 75 72  ing.Compare(sour
5820: 63 65 2c 20 62 6f 6f 6c 2e 54 72 75 65 53 74 72  ce, bool.TrueStr
5830: 69 6e 67 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  ing, StringCompa
5840: 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e  rison.OrdinalIgn
5850: 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 20 72  oreCase) == 0) r
5860: 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
5870: 20 20 20 65 6c 73 65 20 69 66 20 28 53 74 72 69     else if (Stri
5880: 6e 67 2e 43 6f 6d 70 61 72 65 28 73 6f 75 72 63  ng.Compare(sourc
5890: 65 2c 20 62 6f 6f 6c 2e 46 61 6c 73 65 53 74 72  e, bool.FalseStr
58a0: 69 6e 67 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  ing, StringCompa
58b0: 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e  rison.OrdinalIgn
58c0: 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 20 72  oreCase) == 0) r
58d0: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
58e0: 20 20 20 20 20 20 73 77 69 74 63 68 28 73 6f 75        switch(sou
58f0: 72 63 65 2e 54 6f 4c 6f 77 65 72 28 43 75 6c 74  rce.ToLower(Cult
5900: 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e  ureInfo.Invarian
5910: 74 43 75 6c 74 75 72 65 29 29 0d 0a 20 20 20 20  tCulture))..    
5920: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73    {..        cas
5930: 65 20 22 79 65 73 22 3a 0d 0a 20 20 20 20 20 20  e "yes":..      
5940: 20 20 63 61 73 65 20 22 79 22 3a 0d 0a 20 20 20    case "y":..   
5950: 20 20 20 20 20 63 61 73 65 20 22 31 22 3a 0d 0a       case "1":..
5960: 20 20 20 20 20 20 20 20 63 61 73 65 20 22 6f 6e          case "on
5970: 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  ":..          re
5980: 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
5990: 20 20 20 20 63 61 73 65 20 22 6e 6f 22 3a 0d 0a      case "no":..
59a0: 20 20 20 20 20 20 20 20 63 61 73 65 20 22 6e 22          case "n"
59b0: 3a 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  :..        case 
59c0: 22 30 22 3a 0d 0a 20 20 20 20 20 20 20 20 63 61  "0":..        ca
59d0: 73 65 20 22 6f 66 66 22 3a 0d 0a 20 20 20 20 20  se "off":..     
59e0: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
59f0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 64 65 66 61  e;..        defa
5a00: 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ult:..          
5a10: 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
5a20: 6e 74 45 78 63 65 70 74 69 6f 6e 28 22 73 6f 75  ntException("sou
5a30: 72 63 65 22 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  rce");..      }.
5a40: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 23 72  .    }....    #r
5a50: 65 67 69 6f 6e 20 54 79 70 65 20 43 6f 6e 76 65  egion Type Conve
5a60: 72 73 69 6f 6e 73 0d 0a 20 20 20 20 2f 2f 2f 20  rsions..    /// 
5a70: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
5a80: 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 74 68  // Determines th
5a90: 65 20 64 61 74 61 20 74 79 70 65 20 6f 66 20 61  e data type of a
5aa0: 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 73 74 61   column in a sta
5ab0: 74 65 6d 65 6e 74 0d 0a 20 20 20 20 2f 2f 2f 20  tement..    /// 
5ac0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
5ad0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
5ae0: 22 73 74 6d 74 22 3e 54 68 65 20 73 74 61 74 65  "stmt">The state
5af0: 6d 65 6e 74 20 74 6f 20 72 65 74 72 69 65 76 65  ment to retrieve
5b00: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72   information for
5b10: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
5b20: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
5b30: 22 3e 54 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20  ">The column to 
5b40: 72 65 74 72 69 65 76 65 20 74 79 70 65 20 69 6e  retrieve type in
5b50: 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 3c 2f 70 61  formation on</pa
5b60: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
5b70: 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e  aram name="typ">
5b80: 54 68 65 20 53 51 4c 69 74 65 54 79 70 65 20 74  The SQLiteType t
5b90: 6f 20 72 65 63 65 69 76 65 20 74 68 65 20 61 66  o receive the af
5ba0: 66 69 6e 69 74 79 20 66 6f 72 20 74 68 65 20 67  finity for the g
5bb0: 69 76 65 6e 20 63 6f 6c 75 6d 6e 3c 2f 70 61 72  iven column</par
5bc0: 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  am>..    interna
5bd0: 6c 20 73 74 61 74 69 63 20 76 6f 69 64 20 43 6f  l static void Co
5be0: 6c 75 6d 6e 54 6f 54 79 70 65 28 53 51 4c 69 74  lumnToType(SQLit
5bf0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
5c00: 20 69 6e 74 20 69 2c 20 53 51 4c 69 74 65 54 79   int i, SQLiteTy
5c10: 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a  pe typ)..    {..
5c20: 20 20 20 20 20 20 74 79 70 2e 54 79 70 65 20 3d        typ.Type =
5c30: 20 54 79 70 65 4e 61 6d 65 54 6f 44 62 54 79 70   TypeNameToDbTyp
5c40: 65 28 73 74 6d 74 2e 5f 73 71 6c 2e 43 6f 6c 75  e(stmt._sql.Colu
5c50: 6d 6e 54 79 70 65 28 73 74 6d 74 2c 20 69 2c 20  mnType(stmt, i, 
5c60: 6f 75 74 20 74 79 70 2e 41 66 66 69 6e 69 74 79  out typ.Affinity
5c70: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
5c80: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
5c90: 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74  .    /// Convert
5ca0: 73 20 61 20 53 51 4c 69 74 65 54 79 70 65 20 74  s a SQLiteType t
5cb0: 6f 20 61 20 2e 4e 45 54 20 54 79 70 65 20 6f 62  o a .NET Type ob
5cc0: 6a 65 63 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ject..    /// </
5cd0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
5ce0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74  / <param name="t
5cf0: 22 3e 54 68 65 20 53 51 4c 69 74 65 54 79 70 65  ">The SQLiteType
5d00: 20 74 6f 20 63 6f 6e 76 65 72 74 3c 2f 70 61 72   to convert</par
5d10: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
5d20: 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20  turns>Returns a 
5d30: 2e 4e 45 54 20 54 79 70 65 20 6f 62 6a 65 63 74  .NET Type object
5d40: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
5d50: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
5d60: 54 79 70 65 20 53 51 4c 69 74 65 54 79 70 65 54  Type SQLiteTypeT
5d70: 6f 54 79 70 65 28 53 51 4c 69 74 65 54 79 70 65  oType(SQLiteType
5d80: 20 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20   t)..    {..    
5d90: 20 20 69 66 20 28 74 2e 54 79 70 65 20 3d 3d 20    if (t.Type == 
5da0: 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 29 0d 0a  DbType.Object)..
5db0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
5dc0: 61 66 66 69 6e 69 74 79 74 6f 74 79 70 65 5b 28  affinitytotype[(
5dd0: 69 6e 74 29 74 2e 41 66 66 69 6e 69 74 79 5d 3b  int)t.Affinity];
5de0: 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20  ..      else..  
5df0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
5e00: 69 74 65 43 6f 6e 76 65 72 74 2e 44 62 54 79 70  iteConvert.DbTyp
5e10: 65 54 6f 54 79 70 65 28 74 2e 54 79 70 65 29 3b  eToType(t.Type);
5e20: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70  ..    }....    p
5e30: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 54 79  rivate static Ty
5e40: 70 65 5b 5d 20 5f 61 66 66 69 6e 69 74 79 74 6f  pe[] _affinityto
5e50: 74 79 70 65 20 3d 20 7b 0d 0a 20 20 20 20 20 20  type = {..      
5e60: 74 79 70 65 6f 66 28 6f 62 6a 65 63 74 29 2c 0d  typeof(object),.
5e70: 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 49 6e  .      typeof(In
5e80: 74 36 34 29 2c 0d 0a 20 20 20 20 20 20 74 79 70  t64),..      typ
5e90: 65 6f 66 28 44 6f 75 62 6c 65 29 2c 0d 0a 20 20  eof(Double),..  
5ea0: 20 20 20 20 74 79 70 65 6f 66 28 73 74 72 69 6e      typeof(strin
5eb0: 67 29 2c 0d 0a 20 20 20 20 20 20 74 79 70 65 6f  g),..      typeo
5ec0: 66 28 62 79 74 65 5b 5d 29 2c 0d 0a 20 20 20 20  f(byte[]),..    
5ed0: 20 20 74 79 70 65 6f 66 28 6f 62 6a 65 63 74 29    typeof(object)
5ee0: 2c 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28  ,..      typeof(
5ef0: 44 61 74 65 54 69 6d 65 29 2c 0d 0a 20 20 20 20  DateTime),..    
5f00: 20 20 74 79 70 65 6f 66 28 6f 62 6a 65 63 74 29    typeof(object)
5f10: 0d 0a 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20  ..    };....    
5f20: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
5f30: 20 20 20 2f 2f 2f 20 46 6f 72 20 61 20 67 69 76     /// For a giv
5f40: 65 6e 20 69 6e 74 72 69 6e 73 69 63 20 74 79 70  en intrinsic typ
5f50: 65 2c 20 72 65 74 75 72 6e 20 61 20 44 62 54 79  e, return a DbTy
5f60: 70 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  pe..    /// </su
5f70: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
5f80: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70  <param name="typ
5f90: 22 3e 54 68 65 20 6e 61 74 69 76 65 20 74 79 70  ">The native typ
5fa0: 65 20 74 6f 20 63 6f 6e 76 65 72 74 3c 2f 70 61  e to convert</pa
5fb0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
5fc0: 65 74 75 72 6e 73 3e 54 68 65 20 63 6f 72 72 65  eturns>The corre
5fd0: 73 70 6f 6e 64 69 6e 67 20 28 63 6c 6f 73 65 73  sponding (closes
5fe0: 74 20 6d 61 74 63 68 29 20 44 62 54 79 70 65 3c  t match) DbType<
5ff0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
6000: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 44  nternal static D
6010: 62 54 79 70 65 20 54 79 70 65 54 6f 44 62 54 79  bType TypeToDbTy
6020: 70 65 28 54 79 70 65 20 74 79 70 29 0d 0a 20 20  pe(Type typ)..  
6030: 20 20 7b 0d 0a 20 20 20 20 20 20 54 79 70 65 43    {..      TypeC
6040: 6f 64 65 20 74 63 20 3d 20 54 79 70 65 2e 47 65  ode tc = Type.Ge
6050: 74 54 79 70 65 43 6f 64 65 28 74 79 70 29 3b 0d  tTypeCode(typ);.
6060: 0a 20 20 20 20 20 20 69 66 20 28 74 63 20 3d 3d  .      if (tc ==
6070: 20 54 79 70 65 43 6f 64 65 2e 4f 62 6a 65 63 74   TypeCode.Object
6080: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
6090: 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 74      if (typ == t
60a0: 79 70 65 6f 66 28 62 79 74 65 5b 5d 29 29 20 72  ypeof(byte[])) r
60b0: 65 74 75 72 6e 20 44 62 54 79 70 65 2e 42 69 6e  eturn DbType.Bin
60c0: 61 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  ary;..        if
60d0: 20 28 74 79 70 20 3d 3d 20 74 79 70 65 6f 66 28   (typ == typeof(
60e0: 47 75 69 64 29 29 20 72 65 74 75 72 6e 20 44 62  Guid)) return Db
60f0: 54 79 70 65 2e 47 75 69 64 3b 0d 0a 20 20 20 20  Type.Guid;..    
6100: 20 20 20 20 72 65 74 75 72 6e 20 44 62 54 79 70      return DbTyp
6110: 65 2e 53 74 72 69 6e 67 3b 0d 0a 20 20 20 20 20  e.String;..     
6120: 20 7d 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   }..      return
6130: 20 5f 74 79 70 65 74 6f 64 62 74 79 70 65 5b 28   _typetodbtype[(
6140: 69 6e 74 29 74 63 5d 3b 0d 0a 20 20 20 20 7d 0d  int)tc];..    }.
6150: 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  ...    private s
6160: 74 61 74 69 63 20 44 62 54 79 70 65 5b 5d 20 5f  tatic DbType[] _
6170: 74 79 70 65 74 6f 64 62 74 79 70 65 20 3d 20 7b  typetodbtype = {
6180: 0d 0a 20 20 20 20 20 20 44 62 54 79 70 65 2e 4f  ..      DbType.O
6190: 62 6a 65 63 74 2c 0d 0a 20 20 20 20 20 20 44 62  bject,..      Db
61a0: 54 79 70 65 2e 42 69 6e 61 72 79 2c 0d 0a 20 20  Type.Binary,..  
61b0: 20 20 20 20 44 62 54 79 70 65 2e 4f 62 6a 65 63      DbType.Objec
61c0: 74 2c 0d 0a 20 20 20 20 20 20 44 62 54 79 70 65  t,..      DbType
61d0: 2e 42 6f 6f 6c 65 61 6e 2c 0d 0a 20 20 20 20 20  .Boolean,..     
61e0: 20 44 62 54 79 70 65 2e 53 42 79 74 65 2c 0d 0a   DbType.SByte,..
61f0: 20 20 20 20 20 20 44 62 54 79 70 65 2e 53 42 79        DbType.SBy
6200: 74 65 2c 0d 0a 20 20 20 20 20 20 44 62 54 79 70  te,..      DbTyp
6210: 65 2e 42 79 74 65 2c 0d 0a 20 20 20 20 20 20 44  e.Byte,..      D
6220: 62 54 79 70 65 2e 49 6e 74 31 36 2c 20 2f 2f 20  bType.Int16, // 
6230: 37 0d 0a 20 20 20 20 20 20 44 62 54 79 70 65 2e  7..      DbType.
6240: 55 49 6e 74 31 36 2c 0d 0a 20 20 20 20 20 20 44  UInt16,..      D
6250: 62 54 79 70 65 2e 49 6e 74 33 32 2c 0d 0a 20 20  bType.Int32,..  
6260: 20 20 20 20 44 62 54 79 70 65 2e 55 49 6e 74 33      DbType.UInt3
6270: 32 2c 0d 0a 20 20 20 20 20 20 44 62 54 79 70 65  2,..      DbType
6280: 2e 49 6e 74 36 34 2c 20 2f 2f 20 31 31 0d 0a 20  .Int64, // 11.. 
6290: 20 20 20 20 20 44 62 54 79 70 65 2e 55 49 6e 74       DbType.UInt
62a0: 36 34 2c 0d 0a 20 20 20 20 20 20 44 62 54 79 70  64,..      DbTyp
62b0: 65 2e 53 69 6e 67 6c 65 2c 0d 0a 20 20 20 20 20  e.Single,..     
62c0: 20 44 62 54 79 70 65 2e 44 6f 75 62 6c 65 2c 0d   DbType.Double,.
62d0: 0a 20 20 20 20 20 20 44 62 54 79 70 65 2e 44 65  .      DbType.De
62e0: 63 69 6d 61 6c 2c 0d 0a 20 20 20 20 20 20 44 62  cimal,..      Db
62f0: 54 79 70 65 2e 44 61 74 65 54 69 6d 65 2c 0d 0a  Type.DateTime,..
6300: 20 20 20 20 20 20 44 62 54 79 70 65 2e 4f 62 6a        DbType.Obj
6310: 65 63 74 2c 0d 0a 20 20 20 20 20 20 44 62 54 79  ect,..      DbTy
6320: 70 65 2e 53 74 72 69 6e 67 2c 0d 0a 20 20 20 20  pe.String,..    
6330: 7d 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  };....    /// <s
6340: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
6350: 20 52 65 74 75 72 6e 73 20 74 68 65 20 43 6f 6c   Returns the Col
6360: 75 6d 6e 53 69 7a 65 20 66 6f 72 20 74 68 65 20  umnSize for the 
6370: 67 69 76 65 6e 20 44 62 54 79 70 65 0d 0a 20 20  given DbType..  
6380: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
6390: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
63a0: 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68 65 20   name="typ">The 
63b0: 44 62 54 79 70 65 20 74 6f 20 67 65 74 20 74 68  DbType to get th
63c0: 65 20 73 69 7a 65 20 6f 66 3c 2f 70 61 72 61 6d  e size of</param
63d0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
63e0: 72 6e 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  rns></returns>..
63f0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
6400: 74 69 63 20 69 6e 74 20 44 62 54 79 70 65 54 6f  tic int DbTypeTo
6410: 43 6f 6c 75 6d 6e 53 69 7a 65 28 44 62 54 79 70  ColumnSize(DbTyp
6420: 65 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a 20  e typ)..    {.. 
6430: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 64 62 74       return _dbt
6440: 79 70 65 74 6f 63 6f 6c 75 6d 6e 73 69 7a 65 5b  ypetocolumnsize[
6450: 28 69 6e 74 29 74 79 70 5d 3b 0d 0a 20 20 20 20  (int)typ];..    
6460: 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65  }....    private
6470: 20 73 74 61 74 69 63 20 69 6e 74 5b 5d 20 5f 64   static int[] _d
6480: 62 74 79 70 65 74 6f 63 6f 6c 75 6d 6e 73 69 7a  btypetocolumnsiz
6490: 65 20 3d 20 7b 0d 0a 20 20 20 20 20 20 32 31 34  e = {..      214
64a0: 37 34 38 33 36 34 37 2c 20 20 20 2f 2f 20 30 0d  7483647,   // 0.
64b0: 0a 20 20 20 20 20 20 32 31 34 37 34 38 33 36 34  .      214748364
64c0: 37 2c 20 20 20 2f 2f 20 31 0d 0a 20 20 20 20 20  7,   // 1..     
64d0: 20 31 2c 20 20 20 20 20 2f 2f 20 32 0d 0a 20 20   1,     // 2..  
64e0: 20 20 20 20 31 2c 20 20 20 20 20 2f 2f 20 33 0d      1,     // 3.
64f0: 0a 20 20 20 20 20 20 38 2c 20 20 2f 2f 20 34 0d  .      8,  // 4.
6500: 0a 20 20 20 20 20 20 38 2c 20 2f 2f 20 35 0d 0a  .      8, // 5..
6510: 20 20 20 20 20 20 38 2c 20 2f 2f 20 36 0d 0a 20        8, // 6.. 
6520: 20 20 20 20 20 38 2c 20 20 2f 2f 20 37 0d 0a 20       8,  // 7.. 
6530: 20 20 20 20 20 38 2c 20 20 20 2f 2f 20 38 0d 0a       8,   // 8..
6540: 20 20 20 20 20 20 31 36 2c 20 20 20 20 20 2f 2f        16,     //
6550: 20 39 0d 0a 20 20 20 20 20 20 32 2c 0d 0a 20 20   9..      2,..  
6560: 20 20 20 20 34 2c 0d 0a 20 20 20 20 20 20 38 2c      4,..      8,
6570: 0d 0a 20 20 20 20 20 20 32 31 34 37 34 38 33 36  ..      21474836
6580: 34 37 2c 0d 0a 20 20 20 20 20 20 31 2c 0d 0a 20  47,..      1,.. 
6590: 20 20 20 20 20 34 2c 0d 0a 20 20 20 20 20 20 32       4,..      2
65a0: 31 34 37 34 38 33 36 34 37 2c 0d 0a 20 20 20 20  147483647,..    
65b0: 20 20 38 2c 0d 0a 20 20 20 20 20 20 32 2c 0d 0a    8,..      2,..
65c0: 20 20 20 20 20 20 34 2c 0d 0a 20 20 20 20 20 20        4,..      
65d0: 38 2c 0d 0a 20 20 20 20 20 20 38 2c 0d 0a 20 20  8,..      8,..  
65e0: 20 20 20 20 32 31 34 37 34 38 33 36 34 37 2c 0d      2147483647,.
65f0: 0a 20 20 20 20 20 20 32 31 34 37 34 38 33 36 34  .      214748364
6600: 37 2c 0d 0a 20 20 20 20 20 20 32 31 34 37 34 38  7,..      214748
6610: 33 36 34 37 2c 0d 0a 20 20 20 20 20 20 32 31 34  3647,..      214
6620: 37 34 38 33 36 34 37 2c 20 20 20 2f 2f 20 32 35  7483647,   // 25
6630: 20 28 58 6d 6c 29 0d 0a 20 20 20 20 7d 3b 0d 0a   (Xml)..    };..
6640: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
6650: 74 61 74 69 63 20 6f 62 6a 65 63 74 20 44 62 54  tatic object DbT
6660: 79 70 65 54 6f 4e 75 6d 65 72 69 63 50 72 65 63  ypeToNumericPrec
6670: 69 73 69 6f 6e 28 44 62 54 79 70 65 20 74 79 70  ision(DbType typ
6680: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
6690: 72 65 74 75 72 6e 20 5f 64 62 74 79 70 65 74 6f  return _dbtypeto
66a0: 6e 75 6d 65 72 69 63 70 72 65 63 69 73 69 6f 6e  numericprecision
66b0: 5b 28 69 6e 74 29 74 79 70 5d 3b 0d 0a 20 20 20  [(int)typ];..   
66c0: 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74   }....    privat
66d0: 65 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 5b  e static object[
66e0: 5d 20 5f 64 62 74 79 70 65 74 6f 6e 75 6d 65 72  ] _dbtypetonumer
66f0: 69 63 70 72 65 63 69 73 69 6f 6e 20 3d 20 7b 0d  icprecision = {.
6700: 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61  .      DBNull.Va
6710: 6c 75 65 2c 20 2f 2f 20 30 0d 0a 20 20 20 20 20  lue, // 0..     
6720: 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f   DBNull.Value, /
6730: 2f 20 31 0d 0a 20 20 20 20 20 20 33 2c 0d 0a 20  / 1..      3,.. 
6740: 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75       DBNull.Valu
6750: 65 2c 0d 0a 20 20 20 20 20 20 31 39 2c 0d 0a 20  e,..      19,.. 
6760: 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75       DBNull.Valu
6770: 65 2c 20 2f 2f 20 35 0d 0a 20 20 20 20 20 20 44  e, // 5..      D
6780: 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20  BNull.Value, // 
6790: 36 0d 0a 20 20 20 20 20 20 35 33 2c 0d 0a 20 20  6..      53,..  
67a0: 20 20 20 20 35 33 2c 0d 0a 20 20 20 20 20 20 44      53,..      D
67b0: 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 0d 0a 20 20  BNull.Value,..  
67c0: 20 20 20 20 35 2c 0d 0a 20 20 20 20 20 20 31 30      5,..      10
67d0: 2c 0d 0a 20 20 20 20 20 20 31 39 2c 0d 0a 20 20  ,..      19,..  
67e0: 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65      DBNull.Value
67f0: 2c 0d 0a 20 20 20 20 20 20 33 2c 0d 0a 20 20 20  ,..      3,..   
6800: 20 20 20 32 34 2c 0d 0a 20 20 20 20 20 20 44 42     24,..      DB
6810: 4e 75 6c 6c 2e 56 61 6c 75 65 2c 0d 0a 20 20 20  Null.Value,..   
6820: 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c     DBNull.Value,
6830: 0d 0a 20 20 20 20 20 20 35 2c 0d 0a 20 20 20 20  ..      5,..    
6840: 20 20 31 30 2c 0d 0a 20 20 20 20 20 20 31 39 2c    10,..      19,
6850: 0d 0a 20 20 20 20 20 20 35 33 2c 0d 0a 20 20 20  ..      53,..   
6860: 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c     DBNull.Value,
6870: 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56  ..      DBNull.V
6880: 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 44 42 4e  alue,..      DBN
6890: 75 6c 6c 2e 56 61 6c 75 65 0d 0a 20 20 20 20 7d  ull.Value..    }
68a0: 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ;....    interna
68b0: 6c 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20  l static object 
68c0: 44 62 54 79 70 65 54 6f 4e 75 6d 65 72 69 63 53  DbTypeToNumericS
68d0: 63 61 6c 65 28 44 62 54 79 70 65 20 74 79 70 29  cale(DbType typ)
68e0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
68f0: 65 74 75 72 6e 20 5f 64 62 74 79 70 65 74 6f 6e  eturn _dbtypeton
6900: 75 6d 65 72 69 63 73 63 61 6c 65 5b 28 69 6e 74  umericscale[(int
6910: 29 74 79 70 5d 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  )typ];..    }...
6920: 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61  .    private sta
6930: 74 69 63 20 6f 62 6a 65 63 74 5b 5d 20 5f 64 62  tic object[] _db
6940: 74 79 70 65 74 6f 6e 75 6d 65 72 69 63 73 63 61  typetonumericsca
6950: 6c 65 20 3d 20 7b 0d 0a 20 20 20 20 20 20 44 42  le = {..      DB
6960: 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20 30  Null.Value, // 0
6970: 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56  ..      DBNull.V
6980: 61 6c 75 65 2c 20 2f 2f 20 31 0d 0a 20 20 20 20  alue, // 1..    
6990: 20 20 30 2c 0d 0a 20 20 20 20 20 20 44 42 4e 75    0,..      DBNu
69a0: 6c 6c 2e 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20  ll.Value,..     
69b0: 20 34 2c 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c   4,..      DBNul
69c0: 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20 35 0d 0a 20  l.Value, // 5.. 
69d0: 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75       DBNull.Valu
69e0: 65 2c 20 2f 2f 20 36 0d 0a 20 20 20 20 20 20 44  e, // 6..      D
69f0: 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 0d 0a 20 20  BNull.Value,..  
6a00: 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65      DBNull.Value
6a10: 2c 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e  ,..      DBNull.
6a20: 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 30 2c  Value,..      0,
6a30: 0d 0a 20 20 20 20 20 20 30 2c 0d 0a 20 20 20 20  ..      0,..    
6a40: 20 20 30 2c 0d 0a 20 20 20 20 20 20 44 42 4e 75    0,..      DBNu
6a50: 6c 6c 2e 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20  ll.Value,..     
6a60: 20 30 2c 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c   0,..      DBNul
6a70: 6c 2e 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20  l.Value,..      
6a80: 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 0d 0a 20  DBNull.Value,.. 
6a90: 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75       DBNull.Valu
6aa0: 65 2c 0d 0a 20 20 20 20 20 20 30 2c 0d 0a 20 20  e,..      0,..  
6ab0: 20 20 20 20 30 2c 0d 0a 20 20 20 20 20 20 30 2c      0,..      0,
6ac0: 0d 0a 20 20 20 20 20 20 30 2c 0d 0a 20 20 20 20  ..      0,..    
6ad0: 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 0d    DBNull.Value,.
6ae0: 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61  .      DBNull.Va
6af0: 6c 75 65 2c 0d 0a 20 20 20 20 20 20 44 42 4e 75  lue,..      DBNu
6b00: 6c 6c 2e 56 61 6c 75 65 0d 0a 20 20 20 20 7d 3b  ll.Value..    };
6b10: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
6b20: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44   static string D
6b30: 62 54 79 70 65 54 6f 54 79 70 65 4e 61 6d 65 28  bTypeToTypeName(
6b40: 44 62 54 79 70 65 20 74 79 70 29 0d 0a 20 20 20  DbType typ)..   
6b50: 20 7b 0d 0a 20 20 20 20 20 20 66 6f 72 20 28 69   {..      for (i
6b60: 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 5f 64  nt n = 0; n < _d
6b70: 62 74 79 70 65 4e 61 6d 65 73 2e 4c 65 6e 67 74  btypeNames.Lengt
6b80: 68 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20 7b  h; n++)..      {
6b90: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 64  ..        if (_d
6ba0: 62 74 79 70 65 4e 61 6d 65 73 5b 6e 5d 2e 64 61  btypeNames[n].da
6bb0: 74 61 54 79 70 65 20 3d 3d 20 74 79 70 29 0d 0a  taType == typ)..
6bc0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
6bd0: 20 5f 64 62 74 79 70 65 4e 61 6d 65 73 5b 6e 5d   _dbtypeNames[n]
6be0: 2e 74 79 70 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  .typeName;..    
6bf0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 74 72    }....      str
6c00: 69 6e 67 20 64 65 66 61 75 6c 74 54 79 70 65 4e  ing defaultTypeN
6c10: 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e 45 6d 70  ame = String.Emp
6c20: 74 79 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f  ty;....#if !NET_
6c30: 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52  COMPACT_20 && TR
6c40: 41 43 45 5f 57 41 52 4e 49 4e 47 0d 0a 20 20 20  ACE_WARNING..   
6c50: 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
6c60: 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ne(String.Format
6c70: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 22 57 41  (..          "WA
6c80: 52 4e 49 4e 47 3a 20 54 79 70 65 20 6d 61 70 70  RNING: Type mapp
6c90: 69 6e 67 20 66 61 69 6c 65 64 2c 20 72 65 74 75  ing failed, retu
6ca0: 72 6e 69 6e 67 20 64 65 66 61 75 6c 74 20 6e 61  rning default na
6cb0: 6d 65 20 5c 22 7b 30 7d 5c 22 20 66 6f 72 20 74  me \"{0}\" for t
6cc0: 79 70 65 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20  ype {1}.",..    
6cd0: 20 20 20 20 20 20 64 65 66 61 75 6c 74 54 79 70        defaultTyp
6ce0: 65 4e 61 6d 65 2c 20 74 79 70 29 29 3b 0d 0a 23  eName, typ));..#
6cf0: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 72  endif....      r
6d00: 65 74 75 72 6e 20 64 65 66 61 75 6c 74 54 79 70  eturn defaultTyp
6d10: 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  eName;..    }...
6d20: 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61  .    private sta
6d30: 74 69 63 20 53 51 4c 69 74 65 54 79 70 65 4e 61  tic SQLiteTypeNa
6d40: 6d 65 73 5b 5d 20 5f 64 62 74 79 70 65 4e 61 6d  mes[] _dbtypeNam
6d50: 65 73 20 3d 20 7b 0d 0a 20 20 20 20 20 20 6e 65  es = {..      ne
6d60: 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  w SQLiteTypeName
6d70: 73 28 22 49 4e 54 45 47 45 52 22 2c 20 44 62 54  s("INTEGER", DbT
6d80: 79 70 65 2e 49 6e 74 36 34 29 2c 0d 0a 20 20 20  ype.Int64),..   
6d90: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
6da0: 65 4e 61 6d 65 73 28 22 54 49 4e 59 49 4e 54 22  eNames("TINYINT"
6db0: 2c 20 44 62 54 79 70 65 2e 42 79 74 65 29 2c 0d  , DbType.Byte),.
6dc0: 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74  .      new SQLit
6dd0: 65 54 79 70 65 4e 61 6d 65 73 28 22 49 4e 54 22  eTypeNames("INT"
6de0: 2c 20 44 62 54 79 70 65 2e 49 6e 74 33 32 29 2c  , DbType.Int32),
6df0: 0d 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69  ..      new SQLi
6e00: 74 65 54 79 70 65 4e 61 6d 65 73 28 22 56 41 52  teTypeNames("VAR
6e10: 43 48 41 52 22 2c 20 44 62 54 79 70 65 2e 41 6e  CHAR", DbType.An
6e20: 73 69 53 74 72 69 6e 67 29 2c 0d 0a 20 20 20 20  siString),..    
6e30: 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65    new SQLiteType
6e40: 4e 61 6d 65 73 28 22 4e 56 41 52 43 48 41 52 22  Names("NVARCHAR"
6e50: 2c 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67 29  , DbType.String)
6e60: 2c 0d 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c  ,..      new SQL
6e70: 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 43 48  iteTypeNames("CH
6e80: 41 52 22 2c 20 44 62 54 79 70 65 2e 41 6e 73 69  AR", DbType.Ansi
6e90: 53 74 72 69 6e 67 46 69 78 65 64 4c 65 6e 67 74  StringFixedLengt
6ea0: 68 29 2c 0d 0a 20 20 20 20 20 20 6e 65 77 20 53  h),..      new S
6eb0: 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22  QLiteTypeNames("
6ec0: 4e 43 48 41 52 22 2c 20 44 62 54 79 70 65 2e 53  NCHAR", DbType.S
6ed0: 74 72 69 6e 67 46 69 78 65 64 4c 65 6e 67 74 68  tringFixedLength
6ee0: 29 2c 0d 0a 20 20 20 20 20 20 6e 65 77 20 53 51  ),..      new SQ
6ef0: 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 46  LiteTypeNames("F
6f00: 4c 4f 41 54 22 2c 20 44 62 54 79 70 65 2e 44 6f  LOAT", DbType.Do
6f10: 75 62 6c 65 29 2c 0d 0a 20 20 20 20 20 20 6e 65  uble),..      ne
6f20: 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  w SQLiteTypeName
6f30: 73 28 22 52 45 41 4c 22 2c 20 44 62 54 79 70 65  s("REAL", DbType
6f40: 2e 44 6f 75 62 6c 65 29 2c 0d 0a 20 20 20 20 20  .Double),..     
6f50: 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e   new SQLiteTypeN
6f60: 61 6d 65 73 28 22 42 49 54 22 2c 20 44 62 54 79  ames("BIT", DbTy
6f70: 70 65 2e 42 6f 6f 6c 65 61 6e 29 2c 0d 0a 20 20  pe.Boolean),..  
6f80: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
6f90: 70 65 4e 61 6d 65 73 28 22 44 45 43 49 4d 41 4c  peNames("DECIMAL
6fa0: 22 2c 20 44 62 54 79 70 65 2e 44 65 63 69 6d 61  ", DbType.Decima
6fb0: 6c 29 2c 0d 0a 20 20 20 20 20 20 6e 65 77 20 53  l),..      new S
6fc0: 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22  QLiteTypeNames("
6fd0: 44 41 54 45 54 49 4d 45 22 2c 20 44 62 54 79 70  DATETIME", DbTyp
6fe0: 65 2e 44 61 74 65 54 69 6d 65 29 2c 0d 0a 20 20  e.DateTime),..  
6ff0: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
7000: 70 65 4e 61 6d 65 73 28 22 42 4c 4f 42 22 2c 20  peNames("BLOB", 
7010: 44 62 54 79 70 65 2e 42 69 6e 61 72 79 29 2c 0d  DbType.Binary),.
7020: 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74  .      new SQLit
7030: 65 54 79 70 65 4e 61 6d 65 73 28 22 55 4e 49 51  eTypeNames("UNIQ
7040: 55 45 49 44 45 4e 54 49 46 49 45 52 22 2c 20 44  UEIDENTIFIER", D
7050: 62 54 79 70 65 2e 47 75 69 64 29 2c 0d 0a 20 20  bType.Guid),..  
7060: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
7070: 70 65 4e 61 6d 65 73 28 22 53 4d 41 4c 4c 49 4e  peNames("SMALLIN
7080: 54 22 2c 20 44 62 54 79 70 65 2e 49 6e 74 31 36  T", DbType.Int16
7090: 29 2c 0d 0a 20 20 20 20 7d 3b 0d 0a 20 20 20 20  ),..    };..    
70a0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
70b0: 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 20 61     /// Convert a
70c0: 20 44 62 54 79 70 65 20 74 6f 20 61 20 54 79 70   DbType to a Typ
70d0: 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  e..    /// </sum
70e0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
70f0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22  param name="typ"
7100: 3e 54 68 65 20 44 62 54 79 70 65 20 74 6f 20 63  >The DbType to c
7110: 6f 6e 76 65 72 74 20 66 72 6f 6d 3c 2f 70 61 72  onvert from</par
7120: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
7130: 74 75 72 6e 73 3e 54 68 65 20 63 6c 6f 73 65 73  turns>The closes
7140: 74 2d 6d 61 74 63 68 20 2e 4e 45 54 20 74 79 70  t-match .NET typ
7150: 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  e</returns>..   
7160: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
7170: 20 54 79 70 65 20 44 62 54 79 70 65 54 6f 54 79   Type DbTypeToTy
7180: 70 65 28 44 62 54 79 70 65 20 74 79 70 29 0d 0a  pe(DbType typ)..
7190: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
71a0: 75 72 6e 20 5f 64 62 74 79 70 65 54 6f 54 79 70  urn _dbtypeToTyp
71b0: 65 5b 28 69 6e 74 29 74 79 70 5d 3b 0d 0a 20 20  e[(int)typ];..  
71c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61    }....    priva
71d0: 74 65 20 73 74 61 74 69 63 20 54 79 70 65 5b 5d  te static Type[]
71e0: 20 5f 64 62 74 79 70 65 54 6f 54 79 70 65 20 3d   _dbtypeToType =
71f0: 20 7b 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66   {..      typeof
7200: 28 73 74 72 69 6e 67 29 2c 20 20 20 2f 2f 20 30  (string),   // 0
7210: 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 62  ..      typeof(b
7220: 79 74 65 5b 5d 29 2c 20 20 20 2f 2f 20 31 0d 0a  yte[]),   // 1..
7230: 20 20 20 20 20 20 74 79 70 65 6f 66 28 62 79 74        typeof(byt
7240: 65 29 2c 20 20 20 20 20 2f 2f 20 32 0d 0a 20 20  e),     // 2..  
7250: 20 20 20 20 74 79 70 65 6f 66 28 62 6f 6f 6c 29      typeof(bool)
7260: 2c 20 20 20 20 20 2f 2f 20 33 0d 0a 20 20 20 20  ,     // 3..    
7270: 20 20 74 79 70 65 6f 66 28 64 65 63 69 6d 61 6c    typeof(decimal
7280: 29 2c 20 20 2f 2f 20 34 0d 0a 20 20 20 20 20 20  ),  // 4..      
7290: 74 79 70 65 6f 66 28 44 61 74 65 54 69 6d 65 29  typeof(DateTime)
72a0: 2c 20 2f 2f 20 35 0d 0a 20 20 20 20 20 20 74 79  , // 5..      ty
72b0: 70 65 6f 66 28 44 61 74 65 54 69 6d 65 29 2c 20  peof(DateTime), 
72c0: 2f 2f 20 36 0d 0a 20 20 20 20 20 20 74 79 70 65  // 6..      type
72d0: 6f 66 28 64 65 63 69 6d 61 6c 29 2c 20 20 2f 2f  of(decimal),  //
72e0: 20 37 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66   7..      typeof
72f0: 28 64 6f 75 62 6c 65 29 2c 20 20 20 2f 2f 20 38  (double),   // 8
7300: 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 47  ..      typeof(G
7310: 75 69 64 29 2c 20 20 20 20 20 2f 2f 20 39 0d 0a  uid),     // 9..
7320: 20 20 20 20 20 20 74 79 70 65 6f 66 28 49 6e 74        typeof(Int
7330: 31 36 29 2c 0d 0a 20 20 20 20 20 20 74 79 70 65  16),..      type
7340: 6f 66 28 49 6e 74 33 32 29 2c 0d 0a 20 20 20 20  of(Int32),..    
7350: 20 20 74 79 70 65 6f 66 28 49 6e 74 36 34 29 2c    typeof(Int64),
7360: 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 6f  ..      typeof(o
7370: 62 6a 65 63 74 29 2c 0d 0a 20 20 20 20 20 20 74  bject),..      t
7380: 79 70 65 6f 66 28 73 62 79 74 65 29 2c 0d 0a 20  ypeof(sbyte),.. 
7390: 20 20 20 20 20 74 79 70 65 6f 66 28 66 6c 6f 61       typeof(floa
73a0: 74 29 2c 0d 0a 20 20 20 20 20 20 74 79 70 65 6f  t),..      typeo
73b0: 66 28 73 74 72 69 6e 67 29 2c 0d 0a 20 20 20 20  f(string),..    
73c0: 20 20 74 79 70 65 6f 66 28 44 61 74 65 54 69 6d    typeof(DateTim
73d0: 65 29 2c 0d 0a 20 20 20 20 20 20 74 79 70 65 6f  e),..      typeo
73e0: 66 28 55 49 6e 74 31 36 29 2c 0d 0a 20 20 20 20  f(UInt16),..    
73f0: 20 20 74 79 70 65 6f 66 28 55 49 6e 74 33 32 29    typeof(UInt32)
7400: 2c 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28  ,..      typeof(
7410: 55 49 6e 74 36 34 29 2c 0d 0a 20 20 20 20 20 20  UInt64),..      
7420: 74 79 70 65 6f 66 28 64 6f 75 62 6c 65 29 2c 0d  typeof(double),.
7430: 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 73 74  .      typeof(st
7440: 72 69 6e 67 29 2c 0d 0a 20 20 20 20 20 20 74 79  ring),..      ty
7450: 70 65 6f 66 28 73 74 72 69 6e 67 29 2c 0d 0a 20  peof(string),.. 
7460: 20 20 20 20 20 74 79 70 65 6f 66 28 73 74 72 69       typeof(stri
7470: 6e 67 29 2c 0d 0a 20 20 20 20 20 20 74 79 70 65  ng),..      type
7480: 6f 66 28 73 74 72 69 6e 67 29 2c 20 20 20 2f 2f  of(string),   //
7490: 20 32 35 20 28 58 6d 6c 29 0d 0a 20 20 20 20 7d   25 (Xml)..    }
74a0: 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ;....    /// <su
74b0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
74c0: 46 6f 72 20 61 20 67 69 76 65 6e 20 74 79 70 65  For a given type
74d0: 2c 20 72 65 74 75 72 6e 20 74 68 65 20 63 6c 6f  , return the clo
74e0: 73 65 73 74 2d 6d 61 74 63 68 20 53 51 4c 69 74  sest-match SQLit
74f0: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2c 20  e TypeAffinity, 
7500: 77 68 69 63 68 20 6f 6e 6c 79 20 75 6e 64 65 72  which only under
7510: 73 74 61 6e 64 73 20 61 20 76 65 72 79 20 6c 69  stands a very li
7520: 6d 69 74 65 64 20 73 75 62 73 65 74 20 6f 66 20  mited subset of 
7530: 74 79 70 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  types...    /// 
7540: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
7550: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
7560: 22 74 79 70 22 3e 54 68 65 20 74 79 70 65 20 74  "typ">The type t
7570: 6f 20 65 76 61 6c 75 61 74 65 3c 2f 70 61 72 61  o evaluate</para
7580: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
7590: 75 72 6e 73 3e 54 68 65 20 53 51 4c 69 74 65 20  urns>The SQLite 
75a0: 74 79 70 65 20 61 66 66 69 6e 69 74 79 20 66 6f  type affinity fo
75b0: 72 20 74 68 61 74 20 74 79 70 65 2e 3c 2f 72 65  r that type.</re
75c0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
75d0: 72 6e 61 6c 20 73 74 61 74 69 63 20 54 79 70 65  rnal static Type
75e0: 41 66 66 69 6e 69 74 79 20 54 79 70 65 54 6f 41  Affinity TypeToA
75f0: 66 66 69 6e 69 74 79 28 54 79 70 65 20 74 79 70  ffinity(Type typ
7600: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
7610: 54 79 70 65 43 6f 64 65 20 74 63 20 3d 20 54 79  TypeCode tc = Ty
7620: 70 65 2e 47 65 74 54 79 70 65 43 6f 64 65 28 74  pe.GetTypeCode(t
7630: 79 70 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  yp);..      if (
7640: 74 63 20 3d 3d 20 54 79 70 65 43 6f 64 65 2e 4f  tc == TypeCode.O
7650: 62 6a 65 63 74 29 0d 0a 20 20 20 20 20 20 7b 0d  bject)..      {.
7660: 0a 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70  .        if (typ
7670: 20 3d 3d 20 74 79 70 65 6f 66 28 62 79 74 65 5b   == typeof(byte[
7680: 5d 29 20 7c 7c 20 74 79 70 20 3d 3d 20 74 79 70  ]) || typ == typ
7690: 65 6f 66 28 47 75 69 64 29 29 0d 0a 20 20 20 20  eof(Guid))..    
76a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 79 70        return Typ
76b0: 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3b 0d  eAffinity.Blob;.
76c0: 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20  .        else.. 
76d0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
76e0: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54 65 78  TypeAffinity.Tex
76f0: 74 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  t;..      }..   
7700: 20 20 20 72 65 74 75 72 6e 20 5f 74 79 70 65 63     return _typec
7710: 6f 64 65 41 66 66 69 6e 69 74 69 65 73 5b 28 69  odeAffinities[(i
7720: 6e 74 29 74 63 5d 3b 0d 0a 20 20 20 20 7d 0d 0a  nt)tc];..    }..
7730: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74  ..    private st
7740: 61 74 69 63 20 54 79 70 65 41 66 66 69 6e 69 74  atic TypeAffinit
7750: 79 5b 5d 20 5f 74 79 70 65 63 6f 64 65 41 66 66  y[] _typecodeAff
7760: 69 6e 69 74 69 65 73 20 3d 20 7b 0d 0a 20 20 20  inities = {..   
7770: 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e     TypeAffinity.
7780: 4e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 54 79 70  Null,..      Typ
7790: 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 2c 0d  eAffinity.Blob,.
77a0: 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e  .      TypeAffin
77b0: 69 74 79 2e 4e 75 6c 6c 2c 0d 0a 20 20 20 20 20  ity.Null,..     
77c0: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e   TypeAffinity.In
77d0: 74 36 34 2c 0d 0a 20 20 20 20 20 20 54 79 70 65  t64,..      Type
77e0: 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 2c 0d  Affinity.Int64,.
77f0: 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e  .      TypeAffin
7800: 69 74 79 2e 49 6e 74 36 34 2c 0d 0a 20 20 20 20  ity.Int64,..    
7810: 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49    TypeAffinity.I
7820: 6e 74 36 34 2c 0d 0a 20 20 20 20 20 20 54 79 70  nt64,..      Typ
7830: 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 2c  eAffinity.Int64,
7840: 20 2f 2f 20 37 0d 0a 20 20 20 20 20 20 54 79 70   // 7..      Typ
7850: 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 2c  eAffinity.Int64,
7860: 0d 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69  ..      TypeAffi
7870: 6e 69 74 79 2e 49 6e 74 36 34 2c 0d 0a 20 20 20  nity.Int64,..   
7880: 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e     TypeAffinity.
7890: 49 6e 74 36 34 2c 0d 0a 20 20 20 20 20 20 54 79  Int64,..      Ty
78a0: 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34  peAffinity.Int64
78b0: 2c 20 2f 2f 20 31 31 0d 0a 20 20 20 20 20 20 54  , // 11..      T
78c0: 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36  ypeAffinity.Int6
78d0: 34 2c 0d 0a 20 20 20 20 20 20 54 79 70 65 41 66  4,..      TypeAf
78e0: 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 2c 0d 0a  finity.Double,..
78f0: 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69        TypeAffini
7900: 74 79 2e 44 6f 75 62 6c 65 2c 0d 0a 20 20 20 20  ty.Double,..    
7910: 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44    TypeAffinity.D
7920: 6f 75 62 6c 65 2c 0d 0a 20 20 20 20 20 20 54 79  ouble,..      Ty
7930: 70 65 41 66 66 69 6e 69 74 79 2e 44 61 74 65 54  peAffinity.DateT
7940: 69 6d 65 2c 0d 0a 20 20 20 20 20 20 54 79 70 65  ime,..      Type
7950: 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 2c 0d 0a  Affinity.Null,..
7960: 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69        TypeAffini
7970: 74 79 2e 54 65 78 74 2c 0d 0a 20 20 20 20 7d 3b  ty.Text,..    };
7980: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
7990: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 46  mary>..    /// F
79a0: 6f 72 20 61 20 67 69 76 65 6e 20 74 79 70 65 20  or a given type 
79b0: 6e 61 6d 65 2c 20 72 65 74 75 72 6e 20 61 20 63  name, return a c
79c0: 6c 6f 73 65 73 74 2d 6d 61 74 63 68 20 2e 4e 45  losest-match .NE
79d0: 54 20 74 79 70 65 0d 0a 20 20 20 20 2f 2f 2f 20  T type..    /// 
79e0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
79f0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
7a00: 22 4e 61 6d 65 22 3e 54 68 65 20 6e 61 6d 65 20  "Name">The name 
7a10: 6f 66 20 74 68 65 20 74 79 70 65 20 74 6f 20 6d  of the type to m
7a20: 61 74 63 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  atch</param>..  
7a30: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
7a40: 68 65 20 2e 4e 45 54 20 44 42 54 79 70 65 20 74  he .NET DBType t
7a50: 68 65 20 74 65 78 74 20 65 76 61 6c 75 61 74 65  he text evaluate
7a60: 73 20 74 6f 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  s to.</returns>.
7a70: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
7a80: 61 74 69 63 20 44 62 54 79 70 65 20 54 79 70 65  atic DbType Type
7a90: 4e 61 6d 65 54 6f 44 62 54 79 70 65 28 73 74 72  NameToDbType(str
7aa0: 69 6e 67 20 4e 61 6d 65 29 0d 0a 20 20 20 20 7b  ing Name)..    {
7ab0: 0d 0a 20 20 20 20 20 20 6c 6f 63 6b 20 28 5f 73  ..      lock (_s
7ac0: 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20  yncRoot)..      
7ad0: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f  {..        if (_
7ae0: 74 79 70 65 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c  typeNames == nul
7af0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  l)..        {.. 
7b00: 20 20 20 20 20 20 20 20 20 5f 74 79 70 65 4e 61           _typeNa
7b10: 6d 65 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f  mes = new Dictio
7b20: 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c  nary<string, SQL
7b30: 69 74 65 54 79 70 65 4e 61 6d 65 73 3e 28 0d 0a  iteTypeNames>(..
7b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
7b50: 77 20 54 79 70 65 4e 61 6d 65 53 74 72 69 6e 67  w TypeNameString
7b60: 43 6f 6d 70 61 72 65 72 28 29 29 3b 0d 0a 0d 0a  Comparer());....
7b70: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
7b80: 68 20 28 53 51 4c 69 74 65 54 79 70 65 4e 61 6d  h (SQLiteTypeNam
7b90: 65 73 20 74 79 70 65 4e 61 6d 65 20 69 6e 20 6e  es typeName in n
7ba0: 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d  ew SQLiteTypeNam
7bb0: 65 73 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  es[] {..        
7bc0: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
7bd0: 54 79 70 65 4e 61 6d 65 73 28 22 43 4f 55 4e 54  TypeNames("COUNT
7be0: 45 52 22 2c 20 44 62 54 79 70 65 2e 49 6e 74 36  ER", DbType.Int6
7bf0: 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  4),..           
7c00: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
7c10: 65 4e 61 6d 65 73 28 22 41 55 54 4f 49 4e 43 52  eNames("AUTOINCR
7c20: 45 4d 45 4e 54 22 2c 20 44 62 54 79 70 65 2e 49  EMENT", DbType.I
7c30: 6e 74 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20  nt64),..        
7c40: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
7c50: 54 79 70 65 4e 61 6d 65 73 28 22 49 44 45 4e 54  TypeNames("IDENT
7c60: 49 54 59 22 2c 20 44 62 54 79 70 65 2e 49 6e 74  ITY", DbType.Int
7c70: 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  64),..          
7c80: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
7c90: 70 65 4e 61 6d 65 73 28 22 4c 4f 4e 47 54 45 58  peNames("LONGTEX
7ca0: 54 22 2c 20 44 62 54 79 70 65 2e 53 74 72 69 6e  T", DbType.Strin
7cb0: 67 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g),..           
7cc0: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
7cd0: 65 4e 61 6d 65 73 28 22 4c 4f 4e 47 43 48 41 52  eNames("LONGCHAR
7ce0: 22 2c 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67  ", DbType.String
7cf0: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
7d00: 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65    new SQLiteType
7d10: 4e 61 6d 65 73 28 22 4c 4f 4e 47 56 41 52 43 48  Names("LONGVARCH
7d20: 41 52 22 2c 20 44 62 54 79 70 65 2e 53 74 72 69  AR", DbType.Stri
7d30: 6e 67 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ng),..          
7d40: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
7d50: 70 65 4e 61 6d 65 73 28 22 4c 4f 4e 47 22 2c 20  peNames("LONG", 
7d60: 44 62 54 79 70 65 2e 49 6e 74 36 34 29 2c 0d 0a  DbType.Int64),..
7d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
7d80: 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  w SQLiteTypeName
7d90: 73 28 22 54 49 4e 59 49 4e 54 22 2c 20 44 62 54  s("TINYINT", DbT
7da0: 79 70 65 2e 42 79 74 65 29 2c 0d 0a 20 20 20 20  ype.Byte),..    
7db0: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51            new SQ
7dc0: 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 49  LiteTypeNames("I
7dd0: 4e 54 45 47 45 52 22 2c 20 44 62 54 79 70 65 2e  NTEGER", DbType.
7de0: 49 6e 74 36 34 29 2c 0d 0a 20 20 20 20 20 20 20  Int64),..       
7df0: 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74         new SQLit
7e00: 65 54 79 70 65 4e 61 6d 65 73 28 22 49 4e 54 22  eTypeNames("INT"
7e10: 2c 20 44 62 54 79 70 65 2e 49 6e 74 33 32 29 2c  , DbType.Int32),
7e20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7e30: 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61  new SQLiteTypeNa
7e40: 6d 65 73 28 22 56 41 52 43 48 41 52 22 2c 20 44  mes("VARCHAR", D
7e50: 62 54 79 70 65 2e 53 74 72 69 6e 67 29 2c 0d 0a  bType.String),..
7e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
7e70: 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  w SQLiteTypeName
7e80: 73 28 22 4e 56 41 52 43 48 41 52 22 2c 20 44 62  s("NVARCHAR", Db
7e90: 54 79 70 65 2e 53 74 72 69 6e 67 29 2c 0d 0a 20  Type.String),.. 
7ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
7eb0: 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73   SQLiteTypeNames
7ec0: 28 22 43 48 41 52 22 2c 20 44 62 54 79 70 65 2e  ("CHAR", DbType.
7ed0: 53 74 72 69 6e 67 29 2c 0d 0a 20 20 20 20 20 20  String),..      
7ee0: 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69          new SQLi
7ef0: 74 65 54 79 70 65 4e 61 6d 65 73 28 22 4e 43 48  teTypeNames("NCH
7f00: 41 52 22 2c 20 44 62 54 79 70 65 2e 53 74 72 69  AR", DbType.Stri
7f10: 6e 67 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ng),..          
7f20: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
7f30: 70 65 4e 61 6d 65 73 28 22 54 45 58 54 22 2c 20  peNames("TEXT", 
7f40: 44 62 54 79 70 65 2e 53 74 72 69 6e 67 29 2c 0d  DbType.String),.
7f50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e  .              n
7f60: 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d  ew SQLiteTypeNam
7f70: 65 73 28 22 4e 54 45 58 54 22 2c 20 44 62 54 79  es("NTEXT", DbTy
7f80: 70 65 2e 53 74 72 69 6e 67 29 2c 0d 0a 20 20 20  pe.String),..   
7f90: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53             new S
7fa0: 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22  QLiteTypeNames("
7fb0: 53 54 52 49 4e 47 22 2c 20 44 62 54 79 70 65 2e  STRING", DbType.
7fc0: 53 74 72 69 6e 67 29 2c 0d 0a 20 20 20 20 20 20  String),..      
7fd0: 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69          new SQLi
7fe0: 74 65 54 79 70 65 4e 61 6d 65 73 28 22 44 4f 55  teTypeNames("DOU
7ff0: 42 4c 45 22 2c 20 44 62 54 79 70 65 2e 44 6f 75  BLE", DbType.Dou
8000: 62 6c 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ble),..         
8010: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54       new SQLiteT
8020: 79 70 65 4e 61 6d 65 73 28 22 46 4c 4f 41 54 22  ypeNames("FLOAT"
8030: 2c 20 44 62 54 79 70 65 2e 44 6f 75 62 6c 65 29  , DbType.Double)
8040: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
8050: 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e   new SQLiteTypeN
8060: 61 6d 65 73 28 22 52 45 41 4c 22 2c 20 44 62 54  ames("REAL", DbT
8070: 79 70 65 2e 44 6f 75 62 6c 65 29 2c 0d 0a 20 20  ype.Double),..  
8080: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
8090: 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28  SQLiteTypeNames(
80a0: 22 42 49 54 22 2c 20 44 62 54 79 70 65 2e 42 6f  "BIT", DbType.Bo
80b0: 6f 6c 65 61 6e 29 2c 0d 0a 20 20 20 20 20 20 20  olean),..       
80c0: 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74         new SQLit
80d0: 65 54 79 70 65 4e 61 6d 65 73 28 22 59 45 53 4e  eTypeNames("YESN
80e0: 4f 22 2c 20 44 62 54 79 70 65 2e 42 6f 6f 6c 65  O", DbType.Boole
80f0: 61 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  an),..          
8100: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
8110: 70 65 4e 61 6d 65 73 28 22 4c 4f 47 49 43 41 4c  peNames("LOGICAL
8120: 22 2c 20 44 62 54 79 70 65 2e 42 6f 6f 6c 65 61  ", DbType.Boolea
8130: 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n),..           
8140: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
8150: 65 4e 61 6d 65 73 28 22 42 4f 4f 4c 22 2c 20 44  eNames("BOOL", D
8160: 62 54 79 70 65 2e 42 6f 6f 6c 65 61 6e 29 2c 0d  bType.Boolean),.
8170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e  .              n
8180: 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d  ew SQLiteTypeNam
8190: 65 73 28 22 42 4f 4f 4c 45 41 4e 22 2c 20 44 62  es("BOOLEAN", Db
81a0: 54 79 70 65 2e 42 6f 6f 6c 65 61 6e 29 2c 0d 0a  Type.Boolean),..
81b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
81c0: 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  w SQLiteTypeName
81d0: 73 28 22 4e 55 4d 45 52 49 43 22 2c 20 44 62 54  s("NUMERIC", DbT
81e0: 79 70 65 2e 44 65 63 69 6d 61 6c 29 2c 0d 0a 20  ype.Decimal),.. 
81f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
8200: 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73   SQLiteTypeNames
8210: 28 22 44 45 43 49 4d 41 4c 22 2c 20 44 62 54 79  ("DECIMAL", DbTy
8220: 70 65 2e 44 65 63 69 6d 61 6c 29 2c 0d 0a 20 20  pe.Decimal),..  
8230: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
8240: 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28  SQLiteTypeNames(
8250: 22 4d 4f 4e 45 59 22 2c 20 44 62 54 79 70 65 2e  "MONEY", DbType.
8260: 44 65 63 69 6d 61 6c 29 2c 0d 0a 20 20 20 20 20  Decimal),..     
8270: 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c           new SQL
8280: 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 43 55  iteTypeNames("CU
8290: 52 52 45 4e 43 59 22 2c 20 44 62 54 79 70 65 2e  RRENCY", DbType.
82a0: 44 65 63 69 6d 61 6c 29 2c 0d 0a 20 20 20 20 20  Decimal),..     
82b0: 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c           new SQL
82c0: 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 54 49  iteTypeNames("TI
82d0: 4d 45 22 2c 20 44 62 54 79 70 65 2e 44 61 74 65  ME", DbType.Date
82e0: 54 69 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  Time),..        
82f0: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
8300: 54 79 70 65 4e 61 6d 65 73 28 22 44 41 54 45 22  TypeNames("DATE"
8310: 2c 20 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d  , DbType.DateTim
8320: 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
8330: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
8340: 65 4e 61 6d 65 73 28 22 44 41 54 45 54 49 4d 45  eNames("DATETIME
8350: 22 2c 20 44 62 54 79 70 65 2e 44 61 74 65 54 69  ", DbType.DateTi
8360: 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  me),..          
8370: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
8380: 70 65 4e 61 6d 65 73 28 22 53 4d 41 4c 4c 44 41  peNames("SMALLDA
8390: 54 45 22 2c 20 44 62 54 79 70 65 2e 44 61 74 65  TE", DbType.Date
83a0: 54 69 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  Time),..        
83b0: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
83c0: 54 79 70 65 4e 61 6d 65 73 28 22 54 49 4d 45 53  TypeNames("TIMES
83d0: 54 41 4d 50 22 2c 20 44 62 54 79 70 65 2e 44 61  TAMP", DbType.Da
83e0: 74 65 54 69 6d 65 29 2c 0d 0a 20 20 20 20 20 20  teTime),..      
83f0: 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69          new SQLi
8400: 74 65 54 79 70 65 4e 61 6d 65 73 28 22 42 4c 4f  teTypeNames("BLO
8410: 42 22 2c 20 44 62 54 79 70 65 2e 42 69 6e 61 72  B", DbType.Binar
8420: 79 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y),..           
8430: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
8440: 65 4e 61 6d 65 73 28 22 42 49 4e 41 52 59 22 2c  eNames("BINARY",
8450: 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79 29 2c   DbType.Binary),
8460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8470: 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61  new SQLiteTypeNa
8480: 6d 65 73 28 22 56 41 52 42 49 4e 41 52 59 22 2c  mes("VARBINARY",
8490: 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79 29 2c   DbType.Binary),
84a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
84b0: 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61  new SQLiteTypeNa
84c0: 6d 65 73 28 22 49 4d 41 47 45 22 2c 20 44 62 54  mes("IMAGE", DbT
84d0: 79 70 65 2e 42 69 6e 61 72 79 29 2c 0d 0a 20 20  ype.Binary),..  
84e0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
84f0: 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28  SQLiteTypeNames(
8500: 22 47 45 4e 45 52 41 4c 22 2c 20 44 62 54 79 70  "GENERAL", DbTyp
8510: 65 2e 42 69 6e 61 72 79 29 2c 0d 0a 20 20 20 20  e.Binary),..    
8520: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51            new SQ
8530: 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 4f  LiteTypeNames("O
8540: 4c 45 4f 42 4a 45 43 54 22 2c 20 44 62 54 79 70  LEOBJECT", DbTyp
8550: 65 2e 42 69 6e 61 72 79 29 2c 0d 0a 20 20 20 20  e.Binary),..    
8560: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51            new SQ
8570: 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 47  LiteTypeNames("G
8580: 55 49 44 22 2c 20 44 62 54 79 70 65 2e 47 75 69  UID", DbType.Gui
8590: 64 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d),..           
85a0: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
85b0: 65 4e 61 6d 65 73 28 22 55 4e 49 51 55 45 49 44  eNames("UNIQUEID
85c0: 45 4e 54 49 46 49 45 52 22 2c 20 44 62 54 79 70  ENTIFIER", DbTyp
85d0: 65 2e 47 75 69 64 29 2c 0d 0a 20 20 20 20 20 20  e.Guid),..      
85e0: 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69          new SQLi
85f0: 74 65 54 79 70 65 4e 61 6d 65 73 28 22 4d 45 4d  teTypeNames("MEM
8600: 4f 22 2c 20 44 62 54 79 70 65 2e 53 74 72 69 6e  O", DbType.Strin
8610: 67 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g),..           
8620: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
8630: 65 4e 61 6d 65 73 28 22 4e 4f 54 45 22 2c 20 44  eNames("NOTE", D
8640: 62 54 79 70 65 2e 53 74 72 69 6e 67 29 2c 0d 0a  bType.String),..
8650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
8660: 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  w SQLiteTypeName
8670: 73 28 22 53 4d 41 4c 4c 49 4e 54 22 2c 20 44 62  s("SMALLINT", Db
8680: 54 79 70 65 2e 49 6e 74 31 36 29 2c 0d 0a 20 20  Type.Int16),..  
8690: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
86a0: 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28  SQLiteTypeNames(
86b0: 22 42 49 47 49 4e 54 22 2c 20 44 62 54 79 70 65  "BIGINT", DbType
86c0: 2e 49 6e 74 36 34 29 0d 0a 20 20 20 20 20 20 20  .Int64)..       
86d0: 20 20 20 20 20 7d 29 0d 0a 20 20 20 20 20 20 20       })..       
86e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
86f0: 20 20 5f 74 79 70 65 4e 61 6d 65 73 2e 41 64 64    _typeNames.Add
8700: 28 74 79 70 65 4e 61 6d 65 2e 74 79 70 65 4e 61  (typeName.typeNa
8710: 6d 65 2c 20 74 79 70 65 4e 61 6d 65 29 3b 0d 0a  me, typeName);..
8720: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
8730: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
8740: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 53 74 72  ...      if (Str
8750: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
8760: 79 28 4e 61 6d 65 29 29 20 72 65 74 75 72 6e 20  y(Name)) return 
8770: 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 3b 0d 0a  DbType.Object;..
8780: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 54 79  ..      SQLiteTy
8790: 70 65 4e 61 6d 65 73 20 76 61 6c 75 65 3b 0d 0a  peNames value;..
87a0: 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 74 79 70  ..      if (_typ
87b0: 65 4e 61 6d 65 73 2e 54 72 79 47 65 74 56 61 6c  eNames.TryGetVal
87c0: 75 65 28 4e 61 6d 65 2c 20 6f 75 74 20 76 61 6c  ue(Name, out val
87d0: 75 65 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  ue))..      {.. 
87e0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61         return va
87f0: 6c 75 65 2e 64 61 74 61 54 79 70 65 3b 0d 0a 20  lue.dataType;.. 
8800: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c       }..      el
8810: 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  se..      {..   
8820: 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78 20 3d       int index =
8830: 20 4e 61 6d 65 2e 49 6e 64 65 78 4f 66 28 27 28   Name.IndexOf('(
8840: 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ');....        i
8850: 66 20 28 28 69 6e 64 65 78 20 3e 20 30 29 20 26  f ((index > 0) &
8860: 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  &..            _
8870: 74 79 70 65 4e 61 6d 65 73 2e 54 72 79 47 65 74  typeNames.TryGet
8880: 56 61 6c 75 65 28 4e 61 6d 65 2e 53 75 62 73 74  Value(Name.Subst
8890: 72 69 6e 67 28 30 2c 20 69 6e 64 65 78 29 2e 54  ring(0, index).T
88a0: 72 69 6d 45 6e 64 28 29 2c 20 6f 75 74 20 76 61  rimEnd(), out va
88b0: 6c 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 7b  lue))..        {
88c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
88d0: 72 6e 20 76 61 6c 75 65 2e 64 61 74 61 54 79 70  rn value.dataTyp
88e0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
88f0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
8900: 44 62 54 79 70 65 20 64 65 66 61 75 6c 74 44 62  DbType defaultDb
8910: 54 79 70 65 20 3d 20 44 62 54 79 70 65 2e 4f 62  Type = DbType.Ob
8920: 6a 65 63 74 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45  ject;....#if !NE
8930: 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20  T_COMPACT_20 && 
8940: 54 52 41 43 45 5f 57 41 52 4e 49 4e 47 0d 0a 20  TRACE_WARNING.. 
8950: 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65       Trace.Write
8960: 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  Line(String.Form
8970: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 22  at(..          "
8980: 57 41 52 4e 49 4e 47 3a 20 54 79 70 65 20 6d 61  WARNING: Type ma
8990: 70 70 69 6e 67 20 66 61 69 6c 65 64 2c 20 72 65  pping failed, re
89a0: 74 75 72 6e 69 6e 67 20 64 65 66 61 75 6c 74 20  turning default 
89b0: 74 79 70 65 20 7b 30 7d 20 66 6f 72 20 6e 61 6d  type {0} for nam
89c0: 65 20 5c 22 7b 31 7d 5c 22 2e 22 2c 0d 0a 20 20  e \"{1}\".",..  
89d0: 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 44          defaultD
89e0: 62 54 79 70 65 2c 20 4e 61 6d 65 29 29 3b 0d 0a  bType, Name));..
89f0: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
8a00: 72 65 74 75 72 6e 20 64 65 66 61 75 6c 74 44 62  return defaultDb
8a10: 54 79 70 65 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20  Type;..    }..  
8a20: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
8a30: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
8a40: 69 63 20 6f 62 6a 65 63 74 20 5f 73 79 6e 63 52  ic object _syncR
8a50: 6f 6f 74 20 3d 20 6e 65 77 20 6f 62 6a 65 63 74  oot = new object
8a60: 28 29 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ();..    private
8a70: 20 73 74 61 74 69 63 20 44 69 63 74 69 6f 6e 61   static Dictiona
8a80: 72 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c 69 74  ry<string, SQLit
8a90: 65 54 79 70 65 4e 61 6d 65 73 3e 20 5f 74 79 70  eTypeNames> _typ
8aa0: 65 4e 61 6d 65 73 20 3d 20 6e 75 6c 6c 3b 0d 0a  eNames = null;..
8ab0: 20 20 7d 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75    }....  /// <su
8ac0: 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 53 51  mmary>..  /// SQ
8ad0: 4c 69 74 65 20 68 61 73 20 76 65 72 79 20 6c 69  Lite has very li
8ae0: 6d 69 74 65 64 20 74 79 70 65 73 2c 20 61 6e 64  mited types, and
8af0: 20 69 73 20 69 6e 68 65 72 65 6e 74 6c 79 20 74   is inherently t
8b00: 65 78 74 2d 62 61 73 65 64 2e 20 20 54 68 65 20  ext-based.  The 
8b10: 66 69 72 73 74 20 35 20 74 79 70 65 73 20 62 65  first 5 types be
8b20: 6c 6f 77 20 72 65 70 72 65 73 65 6e 74 20 74 68  low represent th
8b30: 65 20 73 75 6d 20 6f 66 20 61 6c 6c 20 74 79 70  e sum of all typ
8b40: 65 73 20 53 51 4c 69 74 65 0d 0a 20 20 2f 2f 2f  es SQLite..  ///
8b50: 20 75 6e 64 65 72 73 74 61 6e 64 73 2e 20 20 54   understands.  T
8b60: 68 65 20 44 61 74 65 54 69 6d 65 20 65 78 74 65  he DateTime exte
8b70: 6e 73 69 6f 6e 20 74 6f 20 74 68 65 20 73 70 65  nsion to the spe
8b80: 63 20 69 73 20 66 6f 72 20 69 6e 74 65 72 6e 61  c is for interna
8b90: 6c 20 75 73 65 20 6f 6e 6c 79 2e 0d 0a 20 20 2f  l use only...  /
8ba0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
8bb0: 20 70 75 62 6c 69 63 20 65 6e 75 6d 20 54 79 70   public enum Typ
8bc0: 65 41 66 66 69 6e 69 74 79 0d 0a 20 20 7b 0d 0a  eAffinity..  {..
8bd0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
8be0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 74 20 75  >..    /// Not u
8bf0: 73 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  sed..    /// </s
8c00: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 55 6e 69  ummary>..    Uni
8c10: 6e 69 74 69 61 6c 69 7a 65 64 20 3d 20 30 2c 0d  nitialized = 0,.
8c20: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
8c30: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6c 6c 20  y>..    /// All 
8c40: 69 6e 74 65 67 65 72 73 20 69 6e 20 53 51 4c 69  integers in SQLi
8c50: 74 65 20 64 65 66 61 75 6c 74 20 74 6f 20 49 6e  te default to In
8c60: 74 36 34 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  t64..    /// </s
8c70: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 49 6e 74  ummary>..    Int
8c80: 36 34 20 3d 20 31 2c 0d 0a 20 20 20 20 2f 2f 2f  64 = 1,..    ///
8c90: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
8ca0: 2f 2f 2f 20 41 6c 6c 20 66 6c 6f 61 74 69 6e 67  /// All floating
8cb0: 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 73 20 69   point numbers i
8cc0: 6e 20 53 51 4c 69 74 65 20 64 65 66 61 75 6c 74  n SQLite default
8cd0: 20 74 6f 20 64 6f 75 62 6c 65 0d 0a 20 20 20 20   to double..    
8ce0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
8cf0: 20 20 20 20 44 6f 75 62 6c 65 20 3d 20 32 2c 0d      Double = 2,.
8d00: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
8d10: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  y>..    /// The 
8d20: 64 65 66 61 75 6c 74 20 64 61 74 61 20 74 79 70  default data typ
8d30: 65 20 6f 66 20 53 51 4c 69 74 65 20 69 73 20 74  e of SQLite is t
8d40: 65 78 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ext..    /// </s
8d50: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 54 65 78  ummary>..    Tex
8d60: 74 20 3d 20 33 2c 0d 0a 20 20 20 20 2f 2f 2f 20  t = 3,..    /// 
8d70: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
8d80: 2f 2f 20 54 79 70 69 63 61 6c 6c 79 20 62 6c 6f  // Typically blo
8d90: 62 20 74 79 70 65 73 20 61 72 65 20 6f 6e 6c 79  b types are only
8da0: 20 73 65 65 6e 20 77 68 65 6e 20 72 65 74 75 72   seen when retur
8db0: 6e 65 64 20 66 72 6f 6d 20 61 20 66 75 6e 63 74  ned from a funct
8dc0: 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ion..    /// </s
8dd0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 42 6c 6f  ummary>..    Blo
8de0: 62 20 3d 20 34 2c 0d 0a 20 20 20 20 2f 2f 2f 20  b = 4,..    /// 
8df0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
8e00: 2f 2f 20 4e 75 6c 6c 20 74 79 70 65 73 20 63 61  // Null types ca
8e10: 6e 20 62 65 20 72 65 74 75 72 6e 65 64 20 66 72  n be returned fr
8e20: 6f 6d 20 66 75 6e 63 74 69 6f 6e 73 0d 0a 20 20  om functions..  
8e30: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
8e40: 0d 0a 20 20 20 20 4e 75 6c 6c 20 3d 20 35 2c 0d  ..    Null = 5,.
8e50: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
8e60: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55 73 65 64  y>..    /// Used
8e70: 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 74   internally by t
8e80: 68 69 73 20 70 72 6f 76 69 64 65 72 0d 0a 20 20  his provider..  
8e90: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
8ea0: 0d 0a 20 20 20 20 44 61 74 65 54 69 6d 65 20 3d  ..    DateTime =
8eb0: 20 31 30 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   10,..    /// <s
8ec0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
8ed0: 20 55 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79   Used internally
8ee0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
8ef0: 61 72 79 3e 0d 0a 20 20 20 20 4e 6f 6e 65 20 3d  ary>..    None =
8f00: 20 31 31 2c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f   11,..  }....  /
8f10: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
8f20: 2f 2f 2f 20 54 68 65 73 65 20 61 72 65 20 74 68  /// These are th
8f30: 65 20 65 76 65 6e 74 20 74 79 70 65 73 20 61 73  e event types as
8f40: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
8f50: 65 0d 0a 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72  e..  /// <see cr
8f60: 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ef="SQLiteConnec
8f70: 74 69 6f 6e 45 76 65 6e 74 48 61 6e 64 6c 65 72  tionEventHandler
8f80: 22 20 2f 3e 0d 0a 20 20 2f 2f 2f 20 64 65 6c 65  " />..  /// dele
8f90: 67 61 74 65 20 28 61 6e 64 20 69 74 73 20 63 6f  gate (and its co
8fa0: 72 72 65 73 70 6f 6e 64 69 6e 67 20 65 76 65 6e  rresponding even
8fb0: 74 29 20 61 6e 64 20 74 68 65 0d 0a 20 20 2f 2f  t) and the..  //
8fc0: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 43 6f 6e  / <see cref="Con
8fd0: 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73  nectionEventArgs
8fe0: 22 20 2f 3e 20 63 6c 61 73 73 2e 0d 0a 20 20 2f  " /> class...  /
8ff0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
9000: 20 70 75 62 6c 69 63 20 65 6e 75 6d 20 53 51 4c   public enum SQL
9010: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65  iteConnectionEve
9020: 6e 74 54 79 70 65 0d 0a 20 20 7b 0d 0a 20 20 20  ntType..  {..   
9030: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
9040: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 74 20  ..      /// Not 
9050: 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  used...      ///
9060: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
9070: 20 20 20 49 6e 76 61 6c 69 64 20 3d 20 2d 31 2c     Invalid = -1,
9080: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ....      /// <s
9090: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
90a0: 2f 2f 20 4e 6f 74 20 75 73 65 64 2e 0d 0a 20 20  // Not used...  
90b0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
90c0: 79 3e 0d 0a 20 20 20 20 20 20 55 6e 6b 6e 6f 77  y>..      Unknow
90d0: 6e 20 3d 20 30 2c 0d 0a 0d 0a 20 20 20 20 20 20  n = 0,....      
90e0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
90f0: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6e       /// The con
9100: 6e 65 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67  nection is being
9110: 20 6f 70 65 6e 65 64 2e 0d 0a 20 20 20 20 20 20   opened...      
9120: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
9130: 20 20 20 20 20 20 4f 70 65 6e 69 6e 67 20 3d 20        Opening = 
9140: 31 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  1,....      /// 
9150: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
9160: 20 2f 2f 2f 20 54 68 65 20 63 6f 6e 6e 65 63 74   /// The connect
9170: 69 6f 6e 20 73 74 72 69 6e 67 20 68 61 73 20 62  ion string has b
9180: 65 65 6e 20 70 61 72 73 65 64 2e 0d 0a 20 20 20  een parsed...   
9190: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
91a0: 3e 0d 0a 20 20 20 20 20 20 43 6f 6e 6e 65 63 74  >..      Connect
91b0: 69 6f 6e 53 74 72 69 6e 67 20 3d 20 32 2c 0d 0a  ionString = 2,..
91c0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ..      /// <sum
91d0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
91e0: 20 54 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   The connection 
91f0: 77 61 73 20 6f 70 65 6e 65 64 2e 0d 0a 20 20 20  was opened...   
9200: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
9210: 3e 0d 0a 20 20 20 20 20 20 4f 70 65 6e 65 64 20  >..      Opened 
9220: 3d 20 33 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  = 3,....      //
9230: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
9240: 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
9250: 63 72 65 66 3d 22 43 68 61 6e 67 65 44 61 74 61  cref="ChangeData
9260: 62 61 73 65 22 20 2f 3e 20 6d 65 74 68 6f 64 20  base" /> method 
9270: 77 61 73 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68  was called on th
9280: 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e  e..      /// con
9290: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  nection...      
92a0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
92b0: 20 20 20 20 20 20 43 68 61 6e 67 65 44 61 74 61        ChangeData
92c0: 62 61 73 65 20 3d 20 34 2c 0d 0a 0d 0a 20 20 20  base = 4,....   
92d0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
92e0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 41 20 74 72  ..      /// A tr
92f0: 61 6e 73 61 63 74 69 6f 6e 20 77 61 73 20 63 72  ansaction was cr
9300: 65 61 74 65 64 20 75 73 69 6e 67 20 74 68 65 20  eated using the 
9310: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20  connection...   
9320: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
9330: 3e 0d 0a 20 20 20 20 20 20 4e 65 77 54 72 61 6e  >..      NewTran
9340: 73 61 63 74 69 6f 6e 20 3d 20 35 2c 0d 0a 0d 0a  saction = 5,....
9350: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
9360: 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54  ry>..      /// T
9370: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61  he connection wa
9380: 73 20 65 6e 6c 69 73 74 65 64 20 69 6e 74 6f 20  s enlisted into 
9390: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0d 0a  a transaction...
93a0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
93b0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 45 6e 6c 69  ary>..      Enli
93c0: 73 74 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20  stTransaction = 
93d0: 36 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  6,....      /// 
93e0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
93f0: 20 2f 2f 2f 20 41 20 63 6f 6d 6d 61 6e 64 20 77   /// A command w
9400: 61 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  as created using
9410: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e   the connection.
9420: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ..      /// </su
9430: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 4e 65  mmary>..      Ne
9440: 77 43 6f 6d 6d 61 6e 64 20 3d 20 37 2c 0d 0a 0d  wCommand = 7,...
9450: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
9460: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
9470: 54 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  The connection i
9480: 73 20 62 65 69 6e 67 20 63 6c 6f 73 65 64 2e 0d  s being closed..
9490: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  .      /// </sum
94a0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 43 6c 6f  mary>..      Clo
94b0: 73 69 6e 67 20 3d 20 38 2c 0d 0a 0d 0a 20 20 20  sing = 8,....   
94c0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
94d0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20  ..      /// The 
94e0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 63  connection was c
94f0: 6c 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 2f 2f  losed...      //
9500: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
9510: 20 20 20 20 43 6c 6f 73 65 64 20 3d 20 39 0d 0a      Closed = 9..
9520: 20 20 7d 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75    }....  /// <su
9530: 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68  mmary>..  /// Th
9540: 69 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  is implementatio
9550: 6e 20 6f 66 20 53 51 4c 69 74 65 20 66 6f 72 20  n of SQLite for 
9560: 41 44 4f 2e 4e 45 54 20 63 61 6e 20 70 72 6f 63  ADO.NET can proc
9570: 65 73 73 20 64 61 74 65 2f 74 69 6d 65 20 66 69  ess date/time fi
9580: 65 6c 64 73 20 69 6e 20 64 61 74 61 62 61 73 65  elds in database
9590: 73 20 69 6e 20 6f 6e 6c 79 20 6f 6e 65 20 6f 66  s in only one of
95a0: 20 74 68 72 65 65 20 66 6f 72 6d 61 74 73 2e 20   three formats. 
95b0: 20 54 69 63 6b 73 2c 20 49 53 4f 38 36 30 31 0d   Ticks, ISO8601.
95c0: 0a 20 20 2f 2f 2f 20 61 6e 64 20 4a 75 6c 69 61  .  /// and Julia
95d0: 6e 44 61 79 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73  nDay...  /// </s
95e0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 3c  ummary>..  /// <
95f0: 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 2f 2f 2f 20  remarks>..  /// 
9600: 49 53 4f 38 36 30 31 20 69 73 20 6d 6f 72 65 20  ISO8601 is more 
9610: 63 6f 6d 70 61 74 69 62 6c 65 2c 20 72 65 61 64  compatible, read
9620: 61 62 6c 65 2c 20 66 75 6c 6c 79 2d 70 72 6f 63  able, fully-proc
9630: 65 73 73 61 62 6c 65 2c 20 62 75 74 20 6c 65 73  essable, but les
9640: 73 20 61 63 63 75 72 61 74 65 20 61 73 20 69 74  s accurate as it
9650: 20 64 6f 65 73 6e 27 74 20 70 72 6f 76 69 64 65   doesn't provide
9660: 20 74 69 6d 65 20 64 6f 77 6e 20 74 6f 20 66 72   time down to fr
9670: 61 63 74 69 6f 6e 73 20 6f 66 20 61 20 73 65 63  actions of a sec
9680: 6f 6e 64 2e 0d 0a 20 20 2f 2f 2f 20 4a 75 6c 69  ond...  /// Juli
9690: 61 6e 44 61 79 20 69 73 20 74 68 65 20 6e 75 6d  anDay is the num
96a0: 65 72 69 63 20 66 6f 72 6d 61 74 20 74 68 65 20  eric format the 
96b0: 53 51 4c 69 74 65 20 75 73 65 73 20 69 6e 74 65  SQLite uses inte
96c0: 72 6e 61 6c 6c 79 20 61 6e 64 20 69 73 20 61 72  rnally and is ar
96d0: 67 75 61 62 6c 79 20 74 68 65 20 6d 6f 73 74 20  guably the most 
96e0: 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20  compatible with 
96f0: 33 72 64 20 70 61 72 74 79 20 74 6f 6f 6c 73 2e  3rd party tools.
9700: 20 20 49 74 20 69 73 0d 0a 20 20 2f 2f 2f 20 6e    It is..  /// n
9710: 6f 74 20 72 65 61 64 61 62 6c 65 20 61 73 20 74  ot readable as t
9720: 65 78 74 20 77 69 74 68 6f 75 74 20 70 6f 73 74  ext without post
9730: 2d 70 72 6f 63 65 73 73 69 6e 67 2e 0d 0a 20 20  -processing...  
9740: 2f 2f 2f 20 54 69 63 6b 73 20 6c 65 73 73 20 63  /// Ticks less c
9750: 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20 33  ompatible with 3
9760: 72 64 20 70 61 72 74 79 20 74 6f 6f 6c 73 20 74  rd party tools t
9770: 68 61 74 20 71 75 65 72 79 20 74 68 65 20 64 61  hat query the da
9780: 74 61 62 61 73 65 2c 20 61 6e 64 20 72 65 6e 64  tabase, and rend
9790: 65 72 73 20 74 68 65 20 44 61 74 65 54 69 6d 65  ers the DateTime
97a0: 20 66 69 65 6c 64 20 75 6e 72 65 61 64 61 62 6c   field unreadabl
97b0: 65 20 61 73 20 74 65 78 74 20 77 69 74 68 6f 75  e as text withou
97c0: 74 20 70 6f 73 74 2d 70 72 6f 63 65 73 73 69 6e  t post-processin
97d0: 67 2e 0d 0a 20 20 2f 2f 2f 20 0d 0a 20 20 2f 2f  g...  /// ..  //
97e0: 2f 20 54 68 65 20 70 72 65 66 65 72 72 65 64 20  / The preferred 
97f0: 6f 72 64 65 72 20 6f 66 20 63 68 6f 6f 73 69 6e  order of choosin
9800: 67 20 61 20 64 61 74 65 74 69 6d 65 20 66 6f 72  g a datetime for
9810: 6d 61 74 20 69 73 20 4a 75 6c 69 61 6e 44 61 79  mat is JulianDay
9820: 2c 20 49 53 4f 38 36 30 31 2c 20 61 6e 64 20 74  , ISO8601, and t
9830: 68 65 6e 20 54 69 63 6b 73 2e 20 20 54 69 63 6b  hen Ticks.  Tick
9840: 73 20 69 73 20 6d 61 69 6e 6c 79 20 70 72 65 73  s is mainly pres
9850: 65 6e 74 20 66 6f 72 20 6c 65 67 61 63 79 20 0d  ent for legacy .
9860: 0a 20 20 2f 2f 2f 20 63 6f 64 65 20 73 75 70 70  .  /// code supp
9870: 6f 72 74 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 72 65  ort...  /// </re
9880: 6d 61 72 6b 73 3e 0d 0a 20 20 70 75 62 6c 69 63  marks>..  public
9890: 20 65 6e 75 6d 20 53 51 4c 69 74 65 44 61 74 65   enum SQLiteDate
98a0: 46 6f 72 6d 61 74 73 0d 0a 20 20 7b 0d 0a 20 20  Formats..  {..  
98b0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
98c0: 0a 20 20 20 20 2f 2f 2f 20 55 73 65 20 74 68 65  .    /// Use the
98d0: 20 76 61 6c 75 65 20 6f 66 20 44 61 74 65 54 69   value of DateTi
98e0: 6d 65 2e 54 69 63 6b 73 2e 20 20 54 68 69 73 20  me.Ticks.  This 
98f0: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 72 65 63  value is not rec
9900: 6f 6d 6d 65 6e 64 65 64 20 61 6e 64 20 69 73 20  ommended and is 
9910: 6e 6f 74 20 77 65 6c 6c 20 73 75 70 70 6f 72 74  not well support
9920: 65 64 20 77 69 74 68 20 4c 49 4e 51 2e 0d 0a 20  ed with LINQ... 
9930: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
9940: 3e 0d 0a 20 20 20 20 54 69 63 6b 73 20 3d 20 30  >..    Ticks = 0
9950: 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ,..    /// <summ
9960: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55 73  ary>..    /// Us
9970: 65 20 74 68 65 20 49 53 4f 2d 38 36 30 31 20 66  e the ISO-8601 f
9980: 6f 72 6d 61 74 2e 20 20 55 73 65 73 20 74 68 65  ormat.  Uses the
9990: 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a   "yyyy-MM-dd HH:
99a0: 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b 22 20  mm:ss.FFFFFFFK" 
99b0: 66 6f 72 6d 61 74 20 66 6f 72 20 55 54 43 20 44  format for UTC D
99c0: 61 74 65 54 69 6d 65 20 76 61 6c 75 65 73 20 61  ateTime values a
99d0: 6e 64 0d 0a 20 20 20 20 2f 2f 2f 20 22 79 79 79  nd..    /// "yyy
99e0: 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73  y-MM-dd HH:mm:ss
99f0: 2e 46 46 46 46 46 46 46 22 20 66 6f 72 6d 61 74  .FFFFFFF" format
9a00: 20 66 6f 72 20 6c 6f 63 61 6c 20 44 61 74 65 54   for local DateT
9a10: 69 6d 65 20 76 61 6c 75 65 73 29 2e 0d 0a 20 20  ime values)...  
9a20: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
9a30: 0d 0a 20 20 20 20 49 53 4f 38 36 30 31 20 3d 20  ..    ISO8601 = 
9a40: 31 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  1,..    /// <sum
9a50: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
9a60: 68 65 20 69 6e 74 65 72 76 61 6c 20 6f 66 20 74  he interval of t
9a70: 69 6d 65 20 69 6e 20 64 61 79 73 20 61 6e 64 20  ime in days and 
9a80: 66 72 61 63 74 69 6f 6e 73 20 6f 66 20 61 20 64  fractions of a d
9a90: 61 79 20 73 69 6e 63 65 20 4a 61 6e 75 61 72 79  ay since January
9aa0: 20 31 2c 20 34 37 31 33 20 42 43 2e 0d 0a 20 20   1, 4713 BC...  
9ab0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
9ac0: 0d 0a 20 20 20 20 4a 75 6c 69 61 6e 44 61 79 20  ..    JulianDay 
9ad0: 3d 20 32 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  = 2,..    /// <s
9ae0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
9af0: 20 54 68 65 20 77 68 6f 6c 65 20 6e 75 6d 62 65   The whole numbe
9b00: 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e  r of seconds sin
9b10: 63 65 20 74 68 65 20 55 6e 69 78 20 65 70 6f 63  ce the Unix epoc
9b20: 68 20 28 4a 61 6e 75 61 72 79 20 31 2c 20 31 39  h (January 1, 19
9b30: 37 30 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  70)...    /// </
9b40: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 55 6e  summary>..    Un
9b50: 69 78 45 70 6f 63 68 20 3d 20 33 2c 0d 0a 20 20  ixEpoch = 3,..  
9b60: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
9b70: 0a 20 20 20 20 2f 2f 2f 20 41 6e 79 20 63 75 6c  .    /// Any cul
9b80: 74 75 72 65 2d 69 6e 64 65 70 65 6e 64 65 6e 74  ture-independent
9b90: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 74 68   string value th
9ba0: 61 74 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d  at the .NET Fram
9bb0: 65 77 6f 72 6b 20 63 61 6e 20 69 6e 74 65 72 70  ework can interp
9bc0: 72 65 74 20 61 73 20 61 20 76 61 6c 69 64 20 44  ret as a valid D
9bd0: 61 74 65 54 69 6d 65 2e 0d 0a 20 20 20 20 2f 2f  ateTime...    //
9be0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
9bf0: 20 20 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75    InvariantCultu
9c00: 72 65 20 3d 20 34 2c 0d 0a 20 20 20 20 2f 2f 2f  re = 4,..    ///
9c10: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
9c20: 2f 2f 2f 20 41 6e 79 20 73 74 72 69 6e 67 20 76  /// Any string v
9c30: 61 6c 75 65 20 74 68 61 74 20 74 68 65 20 2e 4e  alue that the .N
9c40: 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 63 61 6e  ET Framework can
9c50: 20 69 6e 74 65 72 70 72 65 74 20 61 73 20 61 20   interpret as a 
9c60: 76 61 6c 69 64 20 44 61 74 65 54 69 6d 65 20 75  valid DateTime u
9c70: 73 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74  sing the current
9c80: 20 63 75 6c 74 75 72 65 2e 0d 0a 20 20 20 20 2f   culture...    /
9c90: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
9ca0: 20 20 20 43 75 72 72 65 6e 74 43 75 6c 74 75 72     CurrentCultur
9cb0: 65 20 3d 20 35 2c 0d 0a 20 20 20 20 2f 2f 2f 20  e = 5,..    /// 
9cc0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
9cd0: 2f 2f 20 54 68 65 20 64 65 66 61 75 6c 74 20 66  // The default f
9ce0: 6f 72 6d 61 74 20 66 6f 72 20 74 68 69 73 20 70  ormat for this p
9cf0: 72 6f 76 69 64 65 72 2e 0d 0a 20 20 20 20 2f 2f  rovider...    //
9d00: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
9d10: 20 20 44 65 66 61 75 6c 74 20 3d 20 49 53 4f 38    Default = ISO8
9d20: 36 30 31 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f 2f  601..  }....  //
9d30: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f  / <summary>..  /
9d40: 2f 2f 20 54 68 69 73 20 65 6e 75 6d 20 64 65 74  // This enum det
9d50: 65 72 6d 69 6e 65 73 20 68 6f 77 20 53 51 4c 69  ermines how SQLi
9d60: 74 65 20 74 72 65 61 74 73 20 69 74 73 20 6a 6f  te treats its jo
9d70: 75 72 6e 61 6c 20 66 69 6c 65 2e 0d 0a 20 20 2f  urnal file...  /
9d80: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
9d90: 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a   /// <remarks>..
9da0: 20 20 2f 2f 2f 20 42 79 20 64 65 66 61 75 6c 74    /// By default
9db0: 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 63 72 65   SQLite will cre
9dc0: 61 74 65 20 61 6e 64 20 64 65 6c 65 74 65 20 74  ate and delete t
9dd0: 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20  he journal file 
9de0: 77 68 65 6e 20 6e 65 65 64 65 64 20 64 75 72 69  when needed duri
9df0: 6e 67 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ng a transaction
9e00: 2e 0d 0a 20 20 2f 2f 2f 20 48 6f 77 65 76 65 72  ...  /// However
9e10: 2c 20 66 6f 72 20 73 6f 6d 65 20 63 6f 6d 70 75  , for some compu
9e20: 74 65 72 73 20 72 75 6e 6e 69 6e 67 20 63 65 72  ters running cer
9e30: 74 61 69 6e 20 66 69 6c 65 73 79 73 74 65 6d 20  tain filesystem 
9e40: 6d 6f 6e 69 74 6f 72 69 6e 67 20 74 6f 6f 6c 73  monitoring tools
9e50: 2c 20 74 68 65 20 72 61 70 69 64 0d 0a 20 20 2f  , the rapid..  /
9e60: 2f 2f 20 63 72 65 61 74 69 6f 6e 20 61 6e 64 20  // creation and 
9e70: 64 65 6c 65 74 69 6f 6e 20 6f 66 20 74 68 65 20  deletion of the 
9e80: 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 63 61 6e  journal file can
9e90: 20 63 61 75 73 65 20 74 68 6f 73 65 20 70 72 6f   cause those pro
9ea0: 67 72 61 6d 73 20 74 6f 20 66 61 69 6c 2c 20 6f  grams to fail, o
9eb0: 72 20 74 6f 20 69 6e 74 65 72 66 65 72 65 20 77  r to interfere w
9ec0: 69 74 68 20 53 51 4c 69 74 65 2e 0d 0a 20 20 2f  ith SQLite...  /
9ed0: 2f 2f 20 0d 0a 20 20 2f 2f 2f 20 49 66 20 61 20  // ..  /// If a 
9ee0: 70 72 6f 67 72 61 6d 20 6f 72 20 76 69 72 75 73  program or virus
9ef0: 20 73 63 61 6e 6e 65 72 20 69 73 20 69 6e 74 65   scanner is inte
9f00: 72 66 65 72 69 6e 67 20 77 69 74 68 20 53 51 4c  rfering with SQL
9f10: 69 74 65 27 73 20 6a 6f 75 72 6e 61 6c 20 66 69  ite's journal fi
9f20: 6c 65 2c 20 79 6f 75 20 6d 61 79 20 72 65 63 65  le, you may rece
9f30: 69 76 65 20 65 72 72 6f 72 73 20 6c 69 6b 65 20  ive errors like 
9f40: 22 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20  "unable to open 
9f50: 64 61 74 61 62 61 73 65 20 66 69 6c 65 22 0d 0a  database file"..
9f60: 20 20 2f 2f 2f 20 77 68 65 6e 20 73 74 61 72 74    /// when start
9f70: 69 6e 67 20 61 20 74 72 61 6e 73 61 63 74 69 6f  ing a transactio
9f80: 6e 2e 20 20 49 66 20 74 68 69 73 20 69 73 20 68  n.  If this is h
9f90: 61 70 70 65 6e 69 6e 67 2c 20 79 6f 75 20 6d 61  appening, you ma
9fa0: 79 20 77 61 6e 74 20 74 6f 20 63 68 61 6e 67 65  y want to change
9fb0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 6a 6f 75   the default jou
9fc0: 72 6e 61 6c 20 6d 6f 64 65 20 74 6f 20 50 65 72  rnal mode to Per
9fd0: 73 69 73 74 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 72  sist...  /// </r
9fe0: 65 6d 61 72 6b 73 3e 0d 0a 20 20 70 75 62 6c 69  emarks>..  publi
9ff0: 63 20 65 6e 75 6d 20 53 51 4c 69 74 65 4a 6f 75  c enum SQLiteJou
a000: 72 6e 61 6c 4d 6f 64 65 45 6e 75 6d 0d 0a 20 20  rnalModeEnum..  
a010: 7b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  {..    /// <summ
a020: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
a030: 65 20 64 65 66 61 75 6c 74 20 6d 6f 64 65 2c 20  e default mode, 
a040: 74 68 69 73 20 63 61 75 73 65 73 20 53 51 4c 69  this causes SQLi
a050: 74 65 20 74 6f 20 75 73 65 20 74 68 65 20 65 78  te to use the ex
a060: 69 73 74 69 6e 67 20 6a 6f 75 72 6e 61 6c 69 6e  isting journalin
a070: 67 20 6d 6f 64 65 20 66 6f 72 20 74 68 65 20 64  g mode for the d
a080: 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 2f 2f  atabase...    //
a090: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
a0a0: 20 20 44 65 66 61 75 6c 74 20 3d 20 2d 31 2c 0d    Default = -1,.
a0b0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
a0c0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 51 4c 69  y>..    /// SQLi
a0d0: 74 65 20 77 69 6c 6c 20 63 72 65 61 74 65 20 61  te will create a
a0e0: 6e 64 20 64 65 73 74 72 6f 79 20 74 68 65 20 6a  nd destroy the j
a0f0: 6f 75 72 6e 61 6c 20 66 69 6c 65 20 61 73 2d 6e  ournal file as-n
a100: 65 65 64 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  eeded...    /// 
a110: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
a120: 44 65 6c 65 74 65 20 3d 20 30 2c 0d 0a 20 20 20  Delete = 0,..   
a130: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
a140: 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20 74 68 69      /// When thi
a150: 73 20 69 73 20 73 65 74 2c 20 53 51 4c 69 74 65  s is set, SQLite
a160: 20 77 69 6c 6c 20 6b 65 65 70 20 74 68 65 20 6a   will keep the j
a170: 6f 75 72 6e 61 6c 20 66 69 6c 65 20 65 76 65 6e  ournal file even
a180: 20 61 66 74 65 72 20 61 20 74 72 61 6e 73 61 63   after a transac
a190: 74 69 6f 6e 20 68 61 73 20 63 6f 6d 70 6c 65 74  tion has complet
a1a0: 65 64 2e 20 20 49 74 27 73 20 63 6f 6e 74 65 6e  ed.  It's conten
a1b0: 74 73 20 77 69 6c 6c 20 62 65 20 65 72 61 73 65  ts will be erase
a1c0: 64 2c 0d 0a 20 20 20 20 2f 2f 2f 20 61 6e 64 20  d,..    /// and 
a1d0: 74 68 65 20 6a 6f 75 72 6e 61 6c 20 72 65 2d 75  the journal re-u
a1e0: 73 65 64 20 61 73 20 6f 66 74 65 6e 20 61 73 20  sed as often as 
a1f0: 6e 65 65 64 65 64 2e 20 20 49 66 20 69 74 20 69  needed.  If it i
a200: 73 20 64 65 6c 65 74 65 64 2c 20 69 74 20 77 69  s deleted, it wi
a210: 6c 6c 20 62 65 20 72 65 63 72 65 61 74 65 64 20  ll be recreated 
a220: 74 68 65 20 6e 65 78 74 20 74 69 6d 65 20 69 74  the next time it
a230: 20 69 73 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20   is needed...   
a240: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
a250: 0a 20 20 20 20 50 65 72 73 69 73 74 20 3d 20 31  .    Persist = 1
a260: 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ,..    /// <summ
a270: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
a280: 69 73 20 6f 70 74 69 6f 6e 20 64 69 73 61 62 6c  is option disabl
a290: 65 73 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20  es the rollback 
a2a0: 6a 6f 75 72 6e 61 6c 20 65 6e 74 69 72 65 6c 79  journal entirely
a2b0: 2e 20 20 49 6e 74 65 72 72 75 70 74 65 64 20 74  .  Interrupted t
a2c0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 6f 72 20 61  ransactions or a
a2d0: 20 70 72 6f 67 72 61 6d 20 63 72 61 73 68 20 63   program crash c
a2e0: 61 6e 20 63 61 75 73 65 20 64 61 74 61 62 61 73  an cause databas
a2f0: 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 72 72 75  e..    /// corru
a300: 70 74 69 6f 6e 20 69 6e 20 74 68 69 73 20 6d 6f  ption in this mo
a310: 64 65 21 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  de!..    /// </s
a320: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 4f 66 66  ummary>..    Off
a330: 20 3d 20 32 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c   = 2,..    /// <
a340: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
a350: 2f 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 74 72  / SQLite will tr
a360: 75 6e 63 61 74 65 20 74 68 65 20 6a 6f 75 72 6e  uncate the journ
a370: 61 6c 20 66 69 6c 65 20 74 6f 20 7a 65 72 6f 2d  al file to zero-
a380: 6c 65 6e 67 74 68 20 69 6e 73 74 65 61 64 20 6f  length instead o
a390: 66 20 64 65 6c 65 74 69 6e 67 20 69 74 2e 0d 0a  f deleting it...
a3a0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
a3b0: 79 3e 0d 0a 20 20 20 20 54 72 75 6e 63 61 74 65  y>..    Truncate
a3c0: 20 3d 20 33 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c   = 3,..    /// <
a3d0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
a3e0: 2f 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 73 74  / SQLite will st
a3f0: 6f 72 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20  ore the journal 
a400: 69 6e 20 76 6f 6c 61 74 69 6c 65 20 52 41 4d 2e  in volatile RAM.
a410: 20 20 54 68 69 73 20 73 61 76 65 73 20 64 69 73    This saves dis
a420: 6b 20 49 2f 4f 20 62 75 74 20 61 74 20 74 68 65  k I/O but at the
a430: 20 65 78 70 65 6e 73 65 20 6f 66 20 64 61 74 61   expense of data
a440: 62 61 73 65 20 73 61 66 65 74 79 20 61 6e 64 20  base safety and 
a450: 69 6e 74 65 67 72 69 74 79 2e 0d 0a 20 20 20 20  integrity...    
a460: 2f 2f 2f 20 49 66 20 74 68 65 20 61 70 70 6c 69  /// If the appli
a470: 63 61 74 69 6f 6e 20 75 73 69 6e 67 20 53 51 4c  cation using SQL
a480: 69 74 65 20 63 72 61 73 68 65 73 20 69 6e 20 74  ite crashes in t
a490: 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 61 20 74  he middle of a t
a4a0: 72 61 6e 73 61 63 74 69 6f 6e 20 77 68 65 6e 20  ransaction when 
a4b0: 74 68 65 20 4d 45 4d 4f 52 59 20 6a 6f 75 72 6e  the MEMORY journ
a4c0: 61 6c 69 6e 67 20 6d 6f 64 65 20 69 73 20 73 65  aling mode is se
a4d0: 74 2c 20 74 68 65 6e 20 74 68 65 0d 0a 20 20 20  t, then the..   
a4e0: 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 66 69   /// database fi
a4f0: 6c 65 20 77 69 6c 6c 20 76 65 72 79 20 6c 69 6b  le will very lik
a500: 65 6c 79 20 67 6f 20 63 6f 72 72 75 70 74 2e 0d  ely go corrupt..
a510: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
a520: 72 79 3e 0d 0a 20 20 20 20 4d 65 6d 6f 72 79 20  ry>..    Memory 
a530: 3d 20 34 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  = 4,..    /// <s
a540: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
a550: 20 53 51 4c 69 74 65 20 75 73 65 73 20 61 20 77   SQLite uses a w
a560: 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20 69  rite-ahead log i
a570: 6e 73 74 65 61 64 20 6f 66 20 61 20 72 6f 6c 6c  nstead of a roll
a580: 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 74 6f 20  back journal to 
a590: 69 6d 70 6c 65 6d 65 6e 74 20 74 72 61 6e 73 61  implement transa
a5a0: 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 57 41 4c  ctions.  The WAL
a5b0: 20 6a 6f 75 72 6e 61 6c 69 6e 67 20 6d 6f 64 65   journaling mode
a5c0: 20 69 73 20 70 65 72 73 69 73 74 65 6e 74 3b 0d   is persistent;.
a5d0: 0a 20 20 20 20 2f 2f 2f 20 61 66 74 65 72 20 62  .    /// after b
a5e0: 65 69 6e 67 20 73 65 74 20 69 74 20 73 74 61 79  eing set it stay
a5f0: 73 20 69 6e 20 65 66 66 65 63 74 20 61 63 72 6f  s in effect acro
a600: 73 73 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61  ss multiple data
a610: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
a620: 20 61 6e 64 20 61 66 74 65 72 20 63 6c 6f 73 69   and after closi
a630: 6e 67 20 61 6e 64 20 72 65 6f 70 65 6e 69 6e 67  ng and reopening
a640: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 41   the database. A
a650: 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f   database..    /
a660: 2f 2f 20 69 6e 20 57 41 4c 20 6a 6f 75 72 6e 61  // in WAL journa
a670: 6c 69 6e 67 20 6d 6f 64 65 20 63 61 6e 20 6f 6e  ling mode can on
a680: 6c 79 20 62 65 20 61 63 63 65 73 73 65 64 20 62  ly be accessed b
a690: 79 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  y SQLite version
a6a0: 20 33 2e 37 2e 30 20 6f 72 20 6c 61 74 65 72 2e   3.7.0 or later.
a6b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
a6c0: 61 72 79 3e 0d 0a 20 20 20 20 57 61 6c 20 3d 20  ary>..    Wal = 
a6d0: 35 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f 2f 2f 20  5..  }....  /// 
a6e0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f  <summary>..  ///
a6f0: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
a700: 20 66 6f 72 20 74 68 65 20 22 73 79 6e 63 68 72   for the "synchr
a710: 6f 6e 6f 75 73 22 20 64 61 74 61 62 61 73 65 20  onous" database 
a720: 73 65 74 74 69 6e 67 2e 20 20 54 68 69 73 20 73  setting.  This s
a730: 65 74 74 69 6e 67 20 64 65 74 65 72 6d 69 6e 65  etting determine
a740: 73 0d 0a 20 20 2f 2f 2f 20 68 6f 77 20 6f 66 74  s..  /// how oft
a750: 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  en the database 
a760: 65 6e 67 69 6e 65 20 63 61 6c 6c 73 20 74 68 65  engine calls the
a770: 20 78 53 79 6e 63 20 6d 65 74 68 6f 64 20 6f 66   xSync method of
a780: 20 74 68 65 20 56 46 53 2e 0d 0a 20 20 2f 2f 2f   the VFS...  ///
a790: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 69   </summary>..  i
a7a0: 6e 74 65 72 6e 61 6c 20 65 6e 75 6d 20 53 51 4c  nternal enum SQL
a7b0: 69 74 65 53 79 6e 63 68 72 6f 6e 6f 75 73 45 6e  iteSynchronousEn
a7c0: 75 6d 0d 0a 20 20 7b 0d 0a 20 20 20 20 20 20 2f  um..  {..      /
a7d0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
a7e0: 20 20 20 20 2f 2f 2f 20 55 73 65 20 74 68 65 20      /// Use the 
a7f0: 64 65 66 61 75 6c 74 20 22 73 79 6e 63 68 72 6f  default "synchro
a800: 6e 6f 75 73 22 20 64 61 74 61 62 61 73 65 20 73  nous" database s
a810: 65 74 74 69 6e 67 2e 20 20 43 75 72 72 65 6e 74  etting.  Current
a820: 6c 79 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20  ly, this should 
a830: 62 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 74 68  be..      /// th
a840: 65 20 73 61 6d 65 20 61 73 20 75 73 69 6e 67 20  e same as using 
a850: 74 68 65 20 46 55 4c 4c 20 6d 6f 64 65 2e 0d 0a  the FULL mode...
a860: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
a870: 61 72 79 3e 0d 0a 20 20 20 20 20 20 44 65 66 61  ary>..      Defa
a880: 75 6c 74 20 3d 20 2d 31 2c 0d 0a 0d 0a 20 20 20  ult = -1,....   
a890: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
a8a0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20  ..      /// The 
a8b0: 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 20  database engine 
a8c0: 63 6f 6e 74 69 6e 75 65 73 20 77 69 74 68 6f 75  continues withou
a8d0: 74 20 73 79 6e 63 69 6e 67 20 61 73 20 73 6f 6f  t syncing as soo
a8e0: 6e 20 61 73 20 69 74 20 68 61 73 20 68 61 6e 64  n as it has hand
a8f0: 65 64 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 64 61  ed..      /// da
a900: 74 61 20 6f 66 66 20 74 6f 20 74 68 65 20 6f 70  ta off to the op
a910: 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 2e 20  erating system. 
a920: 20 49 66 20 74 68 65 20 61 70 70 6c 69 63 61 74   If the applicat
a930: 69 6f 6e 20 72 75 6e 6e 69 6e 67 20 53 51 4c 69  ion running SQLi
a940: 74 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 63 72  te..      /// cr
a950: 61 73 68 65 73 2c 20 74 68 65 20 64 61 74 61 20  ashes, the data 
a960: 77 69 6c 6c 20 62 65 20 73 61 66 65 2c 20 62 75  will be safe, bu
a970: 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6d  t the database m
a980: 69 67 68 74 20 62 65 63 6f 6d 65 20 63 6f 72 72  ight become corr
a990: 75 70 74 65 64 0d 0a 20 20 20 20 20 20 2f 2f 2f  upted..      ///
a9a0: 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 69 6e   if the operatin
a9b0: 67 20 73 79 73 74 65 6d 20 63 72 61 73 68 65 73  g system crashes
a9c0: 20 6f 72 20 74 68 65 20 63 6f 6d 70 75 74 65 72   or the computer
a9d0: 20 6c 6f 73 65 73 20 70 6f 77 65 72 20 62 65 66   loses power bef
a9e0: 6f 72 65 20 74 68 61 74 0d 0a 20 20 20 20 20 20  ore that..      
a9f0: 2f 2f 2f 20 64 61 74 61 20 68 61 73 20 62 65 65  /// data has bee
aa00: 6e 20 77 72 69 74 74 65 6e 20 74 6f 20 74 68 65  n written to the
aa10: 20 64 69 73 6b 20 73 75 72 66 61 63 65 2e 0d 0a   disk surface...
aa20: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
aa30: 61 72 79 3e 0d 0a 20 20 20 20 20 20 4f 66 66 20  ary>..      Off 
aa40: 3d 20 30 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  = 0,....      //
aa50: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
aa60: 20 20 20 2f 2f 2f 20 54 68 65 20 64 61 74 61 62     /// The datab
aa70: 61 73 65 20 65 6e 67 69 6e 65 20 77 69 6c 6c 20  ase engine will 
aa80: 73 74 69 6c 6c 20 73 79 6e 63 20 61 74 20 74 68  still sync at th
aa90: 65 20 6d 6f 73 74 20 63 72 69 74 69 63 61 6c 20  e most critical 
aaa0: 6d 6f 6d 65 6e 74 73 2c 20 62 75 74 0d 0a 20 20  moments, but..  
aab0: 20 20 20 20 2f 2f 2f 20 6c 65 73 73 20 6f 66 74      /// less oft
aac0: 65 6e 20 74 68 61 6e 20 69 6e 20 46 55 4c 4c 20  en than in FULL 
aad0: 6d 6f 64 65 2e 20 20 54 68 65 72 65 20 69 73 20  mode.  There is 
aae0: 61 20 76 65 72 79 20 73 6d 61 6c 6c 20 28 74 68  a very small (th
aaf0: 6f 75 67 68 20 6e 6f 6e 2d 7a 65 72 6f 29 0d 0a  ough non-zero)..
ab00: 20 20 20 20 20 20 2f 2f 2f 20 63 68 61 6e 63 65        /// chance
ab10: 20 74 68 61 74 20 61 20 70 6f 77 65 72 20 66 61   that a power fa
ab20: 69 6c 75 72 65 20 61 74 20 6a 75 73 74 20 74 68  ilure at just th
ab30: 65 20 77 72 6f 6e 67 20 74 69 6d 65 20 63 6f 75  e wrong time cou
ab40: 6c 64 20 63 6f 72 72 75 70 74 20 74 68 65 0d 0a  ld corrupt the..
ab50: 20 20 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61        /// databa
ab60: 73 65 20 69 6e 20 4e 4f 52 4d 41 4c 20 6d 6f 64  se in NORMAL mod
ab70: 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  e...      /// </
ab80: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
ab90: 4e 6f 72 6d 61 6c 20 3d 20 31 2c 0d 0a 0d 0a 20  Normal = 1,.... 
aba0: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
abb0: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68  y>..      /// Th
abc0: 65 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  e database engin
abd0: 65 20 77 69 6c 6c 20 75 73 65 20 74 68 65 20 78  e will use the x
abe0: 53 79 6e 63 20 6d 65 74 68 6f 64 20 6f 66 20 74  Sync method of t
abf0: 68 65 20 56 46 53 20 74 6f 20 65 6e 73 75 72 65  he VFS to ensure
ac00: 20 74 68 61 74 0d 0a 20 20 20 20 20 20 2f 2f 2f   that..      ///
ac10: 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 69 73 20   all content is 
ac20: 73 61 66 65 6c 79 20 77 72 69 74 74 65 6e 20 74  safely written t
ac30: 6f 20 74 68 65 20 64 69 73 6b 20 73 75 72 66 61  o the disk surfa
ac40: 63 65 20 70 72 69 6f 72 20 74 6f 20 63 6f 6e 74  ce prior to cont
ac50: 69 6e 75 69 6e 67 2e 0d 0a 20 20 20 20 20 20 2f  inuing...      /
ac60: 2f 2f 20 54 68 69 73 20 65 6e 73 75 72 65 73 20  // This ensures 
ac70: 74 68 61 74 20 61 6e 20 6f 70 65 72 61 74 69 6e  that an operatin
ac80: 67 20 73 79 73 74 65 6d 20 63 72 61 73 68 20 6f  g system crash o
ac90: 72 20 70 6f 77 65 72 20 66 61 69 6c 75 72 65 20  r power failure 
aca0: 77 69 6c 6c 20 6e 6f 74 0d 0a 20 20 20 20 20 20  will not..      
acb0: 2f 2f 2f 20 63 6f 72 72 75 70 74 20 74 68 65 20  /// corrupt the 
acc0: 64 61 74 61 62 61 73 65 2e 20 20 46 55 4c 4c 20  database.  FULL 
acd0: 73 79 6e 63 68 72 6f 6e 6f 75 73 20 69 73 20 76  synchronous is v
ace0: 65 72 79 20 73 61 66 65 2c 20 62 75 74 20 69 74  ery safe, but it
acf0: 20 69 73 20 61 6c 73 6f 0d 0a 20 20 20 20 20 20   is also..      
ad00: 2f 2f 2f 20 73 6c 6f 77 65 72 2e 0d 0a 20 20 20  /// slower...   
ad10: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
ad20: 3e 0d 0a 20 20 20 20 20 20 46 75 6c 6c 20 3d 20  >..      Full = 
ad30: 32 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f 2f 2f 20  2..  }....  /// 
ad40: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f  <summary>..  ///
ad50: 20 54 68 65 20 72 65 71 75 65 73 74 65 64 20 63   The requested c
ad60: 6f 6d 6d 61 6e 64 20 65 78 65 63 75 74 69 6f 6e  ommand execution
ad70: 20 74 79 70 65 2e 20 20 54 68 69 73 20 63 6f 6e   type.  This con
ad80: 74 72 6f 6c 73 20 77 68 69 63 68 20 6d 65 74 68  trols which meth
ad90: 6f 64 20 6f 66 20 74 68 65 0d 0a 20 20 2f 2f 2f  od of the..  ///
ada0: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
adb0: 74 65 43 6f 6d 6d 61 6e 64 22 20 2f 3e 20 6f 62  teCommand" /> ob
adc0: 6a 65 63 74 20 77 69 6c 6c 20 62 65 20 63 61 6c  ject will be cal
add0: 6c 65 64 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75  led...  /// </su
ade0: 6d 6d 61 72 79 3e 0d 0a 20 20 70 75 62 6c 69 63  mmary>..  public
adf0: 20 65 6e 75 6d 20 53 51 4c 69 74 65 45 78 65 63   enum SQLiteExec
ae00: 75 74 65 54 79 70 65 0d 0a 20 20 7b 0d 0a 20 20  uteType..  {..  
ae10: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
ae20: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 44 6f 20  >..      /// Do 
ae30: 6e 6f 74 68 69 6e 67 2e 20 20 4e 6f 20 6d 65 74  nothing.  No met
ae40: 68 6f 64 20 77 69 6c 6c 20 62 65 20 63 61 6c 6c  hod will be call
ae50: 65 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ed...      /// <
ae60: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
ae70: 20 4e 6f 6e 65 20 3d 20 30 2c 0d 0a 0d 0a 20 20   None = 0,....  
ae80: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
ae90: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  >..      /// The
aea0: 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6e 6f 74 20   command is not 
aeb0: 65 78 70 65 63 74 65 64 20 74 6f 20 72 65 74 75  expected to retu
aec0: 72 6e 20 61 20 72 65 73 75 6c 74 20 2d 4f 52 2d  rn a result -OR-
aed0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e   the result is n
aee0: 6f 74 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 6e 65  ot..      /// ne
aef0: 65 64 65 64 2e 20 20 54 68 65 20 3c 73 65 65 20  eded.  The <see 
af00: 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6d 6d  cref="SQLiteComm
af10: 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75  and.ExecuteNonQu
af20: 65 72 79 22 20 2f 3e 20 6d 65 74 68 6f 64 20 77  ery" /> method w
af30: 69 6c 6c 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 62  ill..      /// b
af40: 65 20 63 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 20  e called...     
af50: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
af60: 0a 20 20 20 20 20 20 4e 6f 6e 51 75 65 72 79 20  .      NonQuery 
af70: 3d 20 31 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  = 1,....      //
af80: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
af90: 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6d 6d 61     /// The comma
afa0: 6e 64 20 69 73 20 65 78 70 65 63 74 65 64 20 74  nd is expected t
afb0: 6f 20 72 65 74 75 72 6e 20 61 20 73 63 61 6c 61  o return a scala
afc0: 72 20 72 65 73 75 6c 74 20 2d 4f 52 2d 20 74 68  r result -OR- th
afd0: 65 20 72 65 73 75 6c 74 20 73 68 6f 75 6c 64 0d  e result should.
afe0: 0a 20 20 20 20 20 20 2f 2f 2f 20 62 65 20 6c 69  .      /// be li
aff0: 6d 69 74 65 64 20 74 6f 20 61 20 73 63 61 6c 61  mited to a scala
b000: 72 20 72 65 73 75 6c 74 2e 20 20 54 68 65 20 3c  r result.  The <
b010: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
b020: 43 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 53  Command.ExecuteS
b030: 63 61 6c 61 72 22 20 2f 3e 0d 0a 20 20 20 20 20  calar" />..     
b040: 20 2f 2f 2f 20 6d 65 74 68 6f 64 20 77 69 6c 6c   /// method will
b050: 20 62 65 20 63 61 6c 6c 65 64 2e 0d 0a 20 20 20   be called...   
b060: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
b070: 3e 0d 0a 20 20 20 20 20 20 53 63 61 6c 61 72 20  >..      Scalar 
b080: 3d 20 32 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  = 2,....      //
b090: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
b0a0: 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6d 6d 61     /// The comma
b0b0: 6e 64 20 69 73 20 65 78 70 65 63 74 65 64 20 74  nd is expected t
b0c0: 6f 20 72 65 74 75 72 6e 20 3c 73 65 65 20 63 72  o return <see cr
b0d0: 65 66 3d 22 53 51 4c 69 74 65 44 61 74 61 52 65  ef="SQLiteDataRe
b0e0: 61 64 65 72 22 2f 3e 20 72 65 73 75 6c 74 2e 0d  ader"/> result..
b0f0: 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c  .      /// The <
b100: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
b110: 43 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 52  Command.ExecuteR
b120: 65 61 64 65 72 28 29 22 20 2f 3e 20 6d 65 74 68  eader()" /> meth
b130: 6f 64 20 77 69 6c 6c 20 62 65 20 63 61 6c 6c 65  od will be calle
b140: 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  d...      /// </
b150: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
b160: 52 65 61 64 65 72 20 3d 20 33 2c 0d 0a 0d 0a 20  Reader = 3,.... 
b170: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
b180: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 55 73  y>..      /// Us
b190: 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f  e the default co
b1a0: 6d 6d 61 6e 64 20 65 78 65 63 75 74 69 6f 6e 20  mmand execution 
b1b0: 74 79 70 65 2e 20 20 55 73 69 6e 67 20 74 68 69  type.  Using thi
b1c0: 73 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 73  s value is the s
b1d0: 61 6d 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 61  ame..      /// a
b1e0: 73 20 75 73 69 6e 67 20 74 68 65 20 3c 73 65 65  s using the <see
b1f0: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 45 78 65   cref="SQLiteExe
b200: 63 75 74 65 54 79 70 65 2e 4e 6f 6e 65 22 20 2f  cuteType.None" /
b210: 3e 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20  > value...      
b220: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
b230: 20 20 20 20 20 20 44 65 66 61 75 6c 74 20 3d 20        Default = 
b240: 4e 6f 6e 51 75 65 72 79 20 2f 2a 20 54 4f 44 4f  NonQuery /* TODO
b250: 3a 20 47 6f 6f 64 20 64 65 66 61 75 6c 74 3f 20  : Good default? 
b260: 2a 2f 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f 2f 2f  */..  }....  ///
b270: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f   <summary>..  //
b280: 2f 20 53 74 72 75 63 74 20 75 73 65 64 20 69 6e  / Struct used in
b290: 74 65 72 6e 61 6c 6c 79 20 74 6f 20 64 65 74 65  ternally to dete
b2a0: 72 6d 69 6e 65 20 74 68 65 20 64 61 74 61 74 79  rmine the dataty
b2b0: 70 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69  pe of a column i
b2c0: 6e 20 61 20 72 65 73 75 6c 74 73 65 74 0d 0a 20  n a resultset.. 
b2d0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
b2e0: 0a 20 20 69 6e 74 65 72 6e 61 6c 20 63 6c 61 73  .  internal clas
b2f0: 73 20 53 51 4c 69 74 65 54 79 70 65 0d 0a 20 20  s SQLiteType..  
b300: 7b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  {..    /// <summ
b310: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
b320: 65 20 44 62 54 79 70 65 20 6f 66 20 74 68 65 20  e DbType of the 
b330: 63 6f 6c 75 6d 6e 2c 20 6f 72 20 44 62 54 79 70  column, or DbTyp
b340: 65 2e 4f 62 6a 65 63 74 20 69 66 20 69 74 20 63  e.Object if it c
b350: 61 6e 6e 6f 74 20 62 65 20 64 65 74 65 72 6d 69  annot be determi
b360: 6e 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ned..    /// </s
b370: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74  ummary>..    int
b380: 65 72 6e 61 6c 20 44 62 54 79 70 65 20 54 79 70  ernal DbType Typ
b390: 65 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  e;..    /// <sum
b3a0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
b3b0: 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 61  he affinity of a
b3c0: 20 63 6f 6c 75 6d 6e 2c 20 75 73 65 64 20 66 6f   column, used fo
b3d0: 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 72  r expressions or
b3e0: 20 77 68 65 6e 20 54 79 70 65 20 69 73 20 44 62   when Type is Db
b3f0: 54 79 70 65 2e 4f 62 6a 65 63 74 0d 0a 20 20 20  Type.Object..   
b400: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
b410: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 54 79  .    internal Ty
b420: 70 65 41 66 66 69 6e 69 74 79 20 41 66 66 69 6e  peAffinity Affin
b430: 69 74 79 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 69  ity;..  }....  i
b440: 6e 74 65 72 6e 61 6c 20 73 74 72 75 63 74 20 53  nternal struct S
b450: 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 0d 0a  QLiteTypeNames..
b460: 20 20 7b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61    {..    interna
b470: 6c 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  l SQLiteTypeName
b480: 73 28 73 74 72 69 6e 67 20 6e 65 77 74 79 70 65  s(string newtype
b490: 4e 61 6d 65 2c 20 44 62 54 79 70 65 20 6e 65 77  Name, DbType new
b4a0: 64 61 74 61 54 79 70 65 29 0d 0a 20 20 20 20 7b  dataType)..    {
b4b0: 0d 0a 20 20 20 20 20 20 74 79 70 65 4e 61 6d 65  ..      typeName
b4c0: 20 3d 20 6e 65 77 74 79 70 65 4e 61 6d 65 3b 0d   = newtypeName;.
b4d0: 0a 20 20 20 20 20 20 64 61 74 61 54 79 70 65 20  .      dataType 
b4e0: 3d 20 6e 65 77 64 61 74 61 54 79 70 65 3b 0d 0a  = newdataType;..
b4f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
b500: 65 72 6e 61 6c 20 73 74 72 69 6e 67 20 74 79 70  ernal string typ
b510: 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 69 6e 74 65  eName;..    inte
b520: 72 6e 61 6c 20 44 62 54 79 70 65 20 64 61 74 61  rnal DbType data
b530: 54 79 70 65 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  Type;..  }....  
b540: 69 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73 20 54  internal class T
b550: 79 70 65 4e 61 6d 65 53 74 72 69 6e 67 43 6f 6d  ypeNameStringCom
b560: 70 61 72 65 72 20 3a 20 49 45 71 75 61 6c 69 74  parer : IEqualit
b570: 79 43 6f 6d 70 61 72 65 72 3c 73 74 72 69 6e 67  yComparer<string
b580: 3e 0d 0a 20 20 7b 0d 0a 20 20 20 20 23 72 65 67  >..  {..    #reg
b590: 69 6f 6e 20 49 45 71 75 61 6c 69 74 79 43 6f 6d  ion IEqualityCom
b5a0: 70 61 72 65 72 3c 73 74 72 69 6e 67 3e 20 4d 65  parer<string> Me
b5b0: 6d 62 65 72 73 0d 0a 20 20 20 20 70 75 62 6c 69  mbers..    publi
b5c0: 63 20 62 6f 6f 6c 20 45 71 75 61 6c 73 28 0d 0a  c bool Equals(..
b5d0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 65 66        string lef
b5e0: 74 2c 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67  t,..      string
b5f0: 20 72 69 67 68 74 0d 0a 20 20 20 20 20 20 29 0d   right..      ).
b600: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
b610: 74 75 72 6e 20 53 74 72 69 6e 67 2e 45 71 75 61  turn String.Equa
b620: 6c 73 28 6c 65 66 74 2c 20 72 69 67 68 74 2c 20  ls(left, right, 
b630: 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
b640: 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61  .OrdinalIgnoreCa
b650: 73 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  se);..    }.... 
b660: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
b670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
b6b0: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74  ..    public int
b6c0: 20 47 65 74 48 61 73 68 43 6f 64 65 28 0d 0a 20   GetHashCode(.. 
b6d0: 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75       string valu
b6e0: 65 0d 0a 20 20 20 20 20 20 29 0d 0a 20 20 20 20  e..      )..    
b6f0: 7b 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  {..      //..   
b700: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20     // NOTE: The 
b710: 6f 6e 6c 79 20 74 68 69 6e 67 20 74 68 61 74 20  only thing that 
b720: 77 65 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65  we must guarante
b730: 65 20 68 65 72 65 2c 20 61 63 63 6f 72 64 69 6e  e here, accordin
b740: 67 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20  g..      //     
b750: 20 20 74 6f 20 74 68 65 20 4d 53 44 4e 20 64 6f    to the MSDN do
b760: 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20  cumentation for 
b770: 49 45 71 75 61 6c 69 74 79 43 6f 6d 70 61 72 65  IEqualityCompare
b780: 72 2c 20 69 73 20 0d 0a 20 20 20 20 20 20 2f 2f  r, is ..      //
b790: 20 20 20 20 20 20 20 74 68 61 74 20 66 6f 72 20         that for 
b7a0: 74 77 6f 20 67 69 76 65 6e 20 73 74 72 69 6e 67  two given string
b7b0: 73 2c 20 69 66 20 45 71 75 61 6c 73 20 72 65 74  s, if Equals ret
b7c0: 75 72 6e 20 74 72 75 65 20 74 68 65 6e 20 0d 0a  urn true then ..
b7d0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
b7e0: 68 65 20 74 77 6f 20 73 74 72 69 6e 67 73 20 6d  he two strings m
b7f0: 75 73 74 20 68 61 73 68 20 74 6f 20 74 68 65 20  ust hash to the 
b800: 73 61 6d 65 20 76 61 6c 75 65 2e 0d 0a 20 20 20  same value...   
b810: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 69 66 20     //..      if 
b820: 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 0d  (value != null).
b830: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
b840: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
b850: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
b860: 76 61 6c 75 65 2e 54 6f 4c 6f 77 65 72 49 6e 76  value.ToLowerInv
b870: 61 72 69 61 6e 74 28 29 2e 47 65 74 48 61 73 68  ariant().GetHash
b880: 43 6f 64 65 28 29 3b 0d 0a 23 65 6c 73 65 0d 0a  Code();..#else..
b890: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76          return v
b8a0: 61 6c 75 65 2e 54 6f 4c 6f 77 65 72 28 29 2e 47  alue.ToLower().G
b8b0: 65 74 48 61 73 68 43 6f 64 65 28 29 3b 0d 0a 23  etHashCode();..#
b8c0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 65 6c 73  endif..      els
b8d0: 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  e..        throw
b8e0: 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
b8f0: 6c 45 78 63 65 70 74 69 6f 6e 28 22 76 61 6c 75  lException("valu
b900: 65 22 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  e");..    }..   
b910: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 7d   #endregion..  }
b920: 0d 0a 7d 0d 0a                                   ..}..