System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 4698e44c89d2ce799eb2122c5666e5ea195bb30b:


0000: ef bb bf 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .../************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a  ************.. *
0040: 20 41 44 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74   ADO.NET 2.0 Dat
0050: 61 20 50 72 6f 76 69 64 65 72 20 66 6f 72 20 53  a Provider for S
0060: 51 4c 69 74 65 20 56 65 72 73 69 6f 6e 20 33 2e  QLite Version 3.
0070: 58 0d 0a 20 2a 20 57 72 69 74 74 65 6e 20 62 79  X.. * Written by
0080: 20 52 6f 62 65 72 74 20 53 69 6d 70 73 6f 6e 20   Robert Simpson 
0090: 28 72 6f 62 65 72 74 40 62 6c 61 63 6b 63 61 73  (robert@blackcas
00a0: 74 6c 65 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a  tlesoft.com).. *
00b0: 20 0d 0a 20 2a 20 52 65 6c 65 61 73 65 64 20 74   .. * Released t
00c0: 6f 20 74 68 65 20 70 75 62 6c 69 63 20 64 6f 6d  o the public dom
00d0: 61 69 6e 2c 20 75 73 65 20 61 74 20 79 6f 75 72  ain, use at your
00e0: 20 6f 77 6e 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a   own 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 2a 2a 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70  *****/....namesp
0130: 61 63 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ace System.Data.
0140: 53 51 4c 69 74 65 0d 0a 7b 0d 0a 20 20 75 73 69  SQLite..{..  usi
0150: 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 0d 0a 23 69  ng System;....#i
0160: 66 20 44 45 42 55 47 0d 0a 20 20 75 73 69 6e 67  f DEBUG..  using
0170: 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74   System.Diagnost
0180: 69 63 73 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  ics;..#endif....
0190: 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 52    using System.R
01a0: 75 6e 74 69 6d 65 2e 49 6e 74 65 72 6f 70 53 65  untime.InteropSe
01b0: 72 76 69 63 65 73 3b 0d 0a 20 20 75 73 69 6e 67  rvices;..  using
01c0: 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69   System.Collecti
01d0: 6f 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 20 20  ons.Generic;..  
01e0: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 47 6c 6f  using System.Glo
01f0: 62 61 6c 69 7a 61 74 69 6f 6e 3b 0d 0a 20 20 75  balization;..  u
0200: 73 69 6e 67 20 53 79 73 74 65 6d 2e 54 65 78 74  sing System.Text
0210: 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ;....  /// <summ
0220: 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73  ary>..  /// This
0230: 20 62 61 73 65 20 63 6c 61 73 73 20 70 72 6f 76   base class prov
0240: 69 64 65 73 20 64 61 74 61 74 79 70 65 20 63 6f  ides datatype co
0250: 6e 76 65 72 73 69 6f 6e 20 73 65 72 76 69 63 65  nversion service
0260: 73 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65  s for the SQLite
0270: 20 70 72 6f 76 69 64 65 72 2e 0d 0a 20 20 2f 2f   provider...  //
0280: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0290: 70 75 62 6c 69 63 20 61 62 73 74 72 61 63 74 20  public abstract 
02a0: 63 6c 61 73 73 20 53 51 4c 69 74 65 43 6f 6e 76  class SQLiteConv
02b0: 65 72 74 0d 0a 20 20 7b 0d 0a 20 20 20 20 2f 2f  ert..  {..    //
02c0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
02d0: 20 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65 20 66   /// The value f
02e0: 6f 72 20 74 68 65 20 55 6e 69 78 20 65 70 6f 63  or the Unix epoc
02f0: 68 20 28 65 2e 67 2e 20 4a 61 6e 75 61 72 79 20  h (e.g. January 
0300: 31 2c 20 31 39 37 30 20 61 74 20 6d 69 64 6e 69  1, 1970 at midni
0310: 67 68 74 2c 20 69 6e 20 55 54 43 29 2e 0d 0a 20  ght, in UTC)... 
0320: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0330: 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  >..    protected
0340: 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79   static readonly
0350: 20 44 61 74 65 54 69 6d 65 20 55 6e 69 78 45 70   DateTime UnixEp
0360: 6f 63 68 20 3d 0d 0a 20 20 20 20 20 20 20 20 6e  och =..        n
0370: 65 77 20 44 61 74 65 54 69 6d 65 28 31 39 37 30  ew DateTime(1970
0380: 2c 20 31 2c 20 31 2c 20 30 2c 20 30 2c 20 30 2c  , 1, 1, 0, 0, 0,
0390: 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55 74   DateTimeKind.Ut
03a0: 63 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  c);....    /// <
03b0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
03c0: 2f 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74  / The value of t
03d0: 68 65 20 4f 4c 45 20 41 75 74 6f 6d 61 74 69 6f  he OLE Automatio
03e0: 6e 20 65 70 6f 63 68 20 72 65 70 72 65 73 65 6e  n epoch represen
03f0: 74 65 64 20 61 73 20 61 20 4a 75 6c 69 61 6e 20  ted as a Julian 
0400: 64 61 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  day...    /// </
0410: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72  summary>..    pr
0420: 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61  ivate static rea
0430: 64 6f 6e 6c 79 20 64 6f 75 62 6c 65 20 4f 6c 65  donly double Ole
0440: 41 75 74 6f 6d 61 74 69 6f 6e 45 70 6f 63 68 41  AutomationEpochA
0450: 73 4a 75 6c 69 61 6e 44 61 79 20 3d 20 32 34 31  sJulianDay = 241
0460: 35 30 31 38 2e 35 3b 0d 0a 0d 0a 20 20 20 20 2f  5018.5;....    /
0470: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
0480: 20 20 2f 2f 2f 20 54 68 65 20 66 6f 72 6d 61 74    /// The format
0490: 20 73 74 72 69 6e 67 20 66 6f 72 20 44 61 74 65   string for Date
04a0: 54 69 6d 65 20 76 61 6c 75 65 73 20 77 68 65 6e  Time values when
04b0: 20 75 73 69 6e 67 20 74 68 65 20 49 6e 76 61 72   using the Invar
04c0: 69 61 6e 74 43 75 6c 74 75 72 65 20 6f 72 20 43  iantCulture or C
04d0: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 20 66 6f  urrentCulture fo
04e0: 72 6d 61 74 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  rmats...    /// 
04f0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
0500: 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
0510: 72 69 6e 67 20 46 75 6c 6c 46 6f 72 6d 61 74 20  ring FullFormat 
0520: 3d 20 22 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48  = "yyyy-MM-ddTHH
0530: 3a 6d 6d 3a 73 73 2e 66 66 66 66 66 66 66 4b 22  :mm:ss.fffffffK"
0540: 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ;....    /// <su
0550: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
0560: 41 6e 20 61 72 72 61 79 20 6f 66 20 49 53 4f 38  An array of ISO8
0570: 36 30 31 20 64 61 74 65 74 69 6d 65 20 66 6f 72  601 datetime for
0580: 6d 61 74 73 20 77 65 20 73 75 70 70 6f 72 74 20  mats we support 
0590: 63 6f 6e 76 65 72 73 69 6f 6e 20 66 72 6f 6d 0d  conversion from.
05a0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
05b0: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
05c0: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 5b 5d   static string[]
05d0: 20 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74   _datetimeFormat
05e0: 73 20 3d 20 6e 65 77 20 73 74 72 69 6e 67 5b 5d  s = new string[]
05f0: 20 7b 0d 0a 20 20 20 20 20 20 22 54 48 48 6d 6d   {..      "THHmm
0600: 73 73 4b 22 2c 0d 0a 20 20 20 20 20 20 22 54 48  ssK",..      "TH
0610: 48 6d 6d 4b 22 2c 0d 0a 20 20 20 20 20 20 22 48  HmmK",..      "H
0620: 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b  H:mm:ss.FFFFFFFK
0630: 22 2c 0d 0a 20 20 20 20 20 20 22 48 48 3a 6d 6d  ",..      "HH:mm
0640: 3a 73 73 4b 22 2c 0d 0a 20 20 20 20 20 20 22 48  :ssK",..      "H
0650: 48 3a 6d 6d 4b 22 2c 0d 0a 20 20 20 20 20 20 22  H:mmK",..      "
0660: 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d  yyyy-MM-dd HH:mm
0670: 3a 73 73 2e 46 46 46 46 46 46 46 4b 22 2c 20 2f  :ss.FFFFFFFK", /
0680: 2a 20 4e 4f 54 45 3a 20 55 54 43 20 64 65 66 61  * NOTE: UTC defa
0690: 75 6c 74 20 28 35 29 2e 20 2a 2f 0d 0a 20 20 20  ult (5). */..   
06a0: 20 20 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 48     "yyyy-MM-dd H
06b0: 48 3a 6d 6d 3a 73 73 4b 22 2c 0d 0a 20 20 20 20  H:mm:ssK",..    
06c0: 20 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48    "yyyy-MM-dd HH
06d0: 3a 6d 6d 4b 22 2c 0d 0a 20 20 20 20 20 20 22 79  :mmK",..      "y
06e0: 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a  yyy-MM-ddTHH:mm:
06f0: 73 73 2e 46 46 46 46 46 46 46 4b 22 2c 0d 0a 20  ss.FFFFFFFK",.. 
0700: 20 20 20 20 20 22 79 79 79 79 2d 4d 4d 2d 64 64       "yyyy-MM-dd
0710: 54 48 48 3a 6d 6d 4b 22 2c 0d 0a 20 20 20 20 20  THH:mmK",..     
0720: 20 22 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a   "yyyy-MM-ddTHH:
0730: 6d 6d 3a 73 73 4b 22 2c 0d 0a 20 20 20 20 20 20  mm:ssK",..      
0740: 22 79 79 79 79 4d 4d 64 64 48 48 6d 6d 73 73 4b  "yyyyMMddHHmmssK
0750: 22 2c 0d 0a 20 20 20 20 20 20 22 79 79 79 79 4d  ",..      "yyyyM
0760: 4d 64 64 48 48 6d 6d 4b 22 2c 0d 0a 20 20 20 20  MddHHmmK",..    
0770: 20 20 22 79 79 79 79 4d 4d 64 64 54 48 48 6d 6d    "yyyyMMddTHHmm
0780: 73 73 46 46 46 46 46 46 46 4b 22 2c 0d 0a 20 20  ssFFFFFFFK",..  
0790: 20 20 20 20 22 54 48 48 6d 6d 73 73 22 2c 0d 0a      "THHmmss",..
07a0: 20 20 20 20 20 20 22 54 48 48 6d 6d 22 2c 0d 0a        "THHmm",..
07b0: 20 20 20 20 20 20 22 48 48 3a 6d 6d 3a 73 73 2e        "HH:mm:ss.
07c0: 46 46 46 46 46 46 46 22 2c 0d 0a 20 20 20 20 20  FFFFFFF",..     
07d0: 20 22 48 48 3a 6d 6d 3a 73 73 22 2c 0d 0a 20 20   "HH:mm:ss",..  
07e0: 20 20 20 20 22 48 48 3a 6d 6d 22 2c 0d 0a 20 20      "HH:mm",..  
07f0: 20 20 20 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20      "yyyy-MM-dd 
0800: 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46  HH:mm:ss.FFFFFFF
0810: 22 2c 20 2f 2a 20 4e 4f 54 45 3a 20 4e 6f 6e 2d  ", /* NOTE: Non-
0820: 55 54 43 20 64 65 66 61 75 6c 74 20 28 31 39 29  UTC default (19)
0830: 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 22 79 79 79  . */..      "yyy
0840: 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73  y-MM-dd HH:mm:ss
0850: 22 2c 0d 0a 20 20 20 20 20 20 22 79 79 79 79 2d  ",..      "yyyy-
0860: 4d 4d 2d 64 64 20 48 48 3a 6d 6d 22 2c 0d 0a 20  MM-dd HH:mm",.. 
0870: 20 20 20 20 20 22 79 79 79 79 2d 4d 4d 2d 64 64       "yyyy-MM-dd
0880: 54 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46  THH:mm:ss.FFFFFF
0890: 46 22 2c 0d 0a 20 20 20 20 20 20 22 79 79 79 79  F",..      "yyyy
08a0: 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 22 2c 0d 0a  -MM-ddTHH:mm",..
08b0: 20 20 20 20 20 20 22 79 79 79 79 2d 4d 4d 2d 64        "yyyy-MM-d
08c0: 64 54 48 48 3a 6d 6d 3a 73 73 22 2c 0d 0a 20 20  dTHH:mm:ss",..  
08d0: 20 20 20 20 22 79 79 79 79 4d 4d 64 64 48 48 6d      "yyyyMMddHHm
08e0: 6d 73 73 22 2c 0d 0a 20 20 20 20 20 20 22 79 79  mss",..      "yy
08f0: 79 79 4d 4d 64 64 48 48 6d 6d 22 2c 0d 0a 20 20  yyMMddHHmm",..  
0900: 20 20 20 20 22 79 79 79 79 4d 4d 64 64 54 48 48      "yyyyMMddTHH
0910: 6d 6d 73 73 46 46 46 46 46 46 46 22 2c 0d 0a 20  mmssFFFFFFF",.. 
0920: 20 20 20 20 20 22 79 79 79 79 2d 4d 4d 2d 64 64       "yyyy-MM-dd
0930: 22 2c 0d 0a 20 20 20 20 20 20 22 79 79 79 79 4d  ",..      "yyyyM
0940: 4d 64 64 22 2c 0d 0a 20 20 20 20 20 20 22 79 79  Mdd",..      "yy
0950: 2d 4d 4d 2d 64 64 22 0d 0a 20 20 20 20 7d 3b 0d  -MM-dd"..    };.
0960: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
0970: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
0980: 65 20 69 6e 74 65 72 6e 61 6c 20 64 65 66 61 75  e internal defau
0990: 6c 74 20 66 6f 72 6d 61 74 20 66 6f 72 20 55 54  lt format for UT
09a0: 43 20 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65  C DateTime value
09b0: 73 20 77 68 65 6e 20 63 6f 6e 76 65 72 74 69 6e  s when convertin
09c0: 67 0d 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 61 20  g..    /// to a 
09d0: 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 2f 2f 2f  string...    ///
09e0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
09f0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
0a00: 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20  readonly string 
0a10: 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 55  _datetimeFormatU
0a20: 74 63 20 3d 20 5f 64 61 74 65 74 69 6d 65 46 6f  tc = _datetimeFo
0a30: 72 6d 61 74 73 5b 35 5d 3b 0d 0a 0d 0a 20 20 20  rmats[5];....   
0a40: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0a50: 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65      /// The inte
0a60: 72 6e 61 6c 20 64 65 66 61 75 6c 74 20 66 6f 72  rnal default for
0a70: 6d 61 74 20 66 6f 72 20 6c 6f 63 61 6c 20 44 61  mat for local Da
0a80: 74 65 54 69 6d 65 20 76 61 6c 75 65 73 20 77 68  teTime values wh
0a90: 65 6e 20 63 6f 6e 76 65 72 74 69 6e 67 0d 0a 20  en converting.. 
0aa0: 20 20 20 2f 2f 2f 20 74 6f 20 61 20 73 74 72 69     /// to a stri
0ab0: 6e 67 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ng...    /// </s
0ac0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69  ummary>..    pri
0ad0: 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64  vate static read
0ae0: 6f 6e 6c 79 20 73 74 72 69 6e 67 20 5f 64 61 74  only string _dat
0af0: 65 74 69 6d 65 46 6f 72 6d 61 74 4c 6f 63 61 6c  etimeFormatLocal
0b00: 20 3d 20 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d   = _datetimeForm
0b10: 61 74 73 5b 31 39 5d 3b 0d 0a 0d 0a 20 20 20 20  ats[19];....    
0b20: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
0b30: 20 20 20 2f 2f 2f 20 41 6e 20 55 54 46 2d 38 20     /// An UTF-8 
0b40: 45 6e 63 6f 64 69 6e 67 20 69 6e 73 74 61 6e 63  Encoding instanc
0b50: 65 2c 20 73 6f 20 77 65 20 63 61 6e 20 63 6f 6e  e, so we can con
0b60: 76 65 72 74 20 73 74 72 69 6e 67 73 20 74 6f 20  vert strings to 
0b70: 61 6e 64 20 66 72 6f 6d 20 55 54 46 2d 38 0d 0a  and from UTF-8..
0b80: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0b90: 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  y>..    private 
0ba0: 73 74 61 74 69 63 20 45 6e 63 6f 64 69 6e 67 20  static Encoding 
0bb0: 5f 75 74 66 38 20 3d 20 6e 65 77 20 55 54 46 38  _utf8 = new UTF8
0bc0: 45 6e 63 6f 64 69 6e 67 28 29 3b 0d 0a 20 20 20  Encoding();..   
0bd0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0be0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 64 65 66 61      /// The defa
0bf0: 75 6c 74 20 44 61 74 65 54 69 6d 65 20 66 6f 72  ult DateTime for
0c00: 6d 61 74 20 66 6f 72 20 74 68 69 73 20 69 6e 73  mat for this ins
0c10: 74 61 6e 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c  tance..    /// <
0c20: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69  /summary>..    i
0c30: 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 44 61  nternal SQLiteDa
0c40: 74 65 46 6f 72 6d 61 74 73 20 5f 64 61 74 65 74  teFormats _datet
0c50: 69 6d 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20  imeFormat;..    
0c60: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
0c70: 20 20 20 2f 2f 2f 20 54 68 65 20 64 65 66 61 75     /// The defau
0c80: 6c 74 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20  lt DateTimeKind 
0c90: 66 6f 72 20 74 68 69 73 20 69 6e 73 74 61 6e 63  for this instanc
0ca0: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
0cb0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65  mmary>..    inte
0cc0: 72 6e 61 6c 20 44 61 74 65 54 69 6d 65 4b 69 6e  rnal DateTimeKin
0cd0: 64 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 3b  d _datetimeKind;
0ce0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
0cf0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 6e 69  ry>..    /// Ini
0d00: 74 69 61 6c 69 7a 65 73 20 74 68 65 20 63 6f 6e  tializes the con
0d10: 76 65 72 73 69 6f 6e 20 63 6c 61 73 73 0d 0a 20  version class.. 
0d20: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0d30: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
0d40: 6d 20 6e 61 6d 65 3d 22 66 6d 74 22 3e 54 68 65  m name="fmt">The
0d50: 20 64 65 66 61 75 6c 74 20 64 61 74 65 2f 74 69   default date/ti
0d60: 6d 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73 65  me format to use
0d70: 20 66 6f 72 20 74 68 69 73 20 69 6e 73 74 61 6e   for this instan
0d80: 63 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  ce</param>..    
0d90: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
0da0: 22 6b 69 6e 64 22 3e 54 68 65 20 44 61 74 65 54  "kind">The DateT
0db0: 69 6d 65 4b 69 6e 64 20 74 6f 20 75 73 65 2e 3c  imeKind to use.<
0dc0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
0dd0: 65 72 6e 61 6c 20 53 51 4c 69 74 65 43 6f 6e 76  ernal SQLiteConv
0de0: 65 72 74 28 53 51 4c 69 74 65 44 61 74 65 46 6f  ert(SQLiteDateFo
0df0: 72 6d 61 74 73 20 66 6d 74 2c 20 44 61 74 65 54  rmats fmt, DateT
0e00: 69 6d 65 4b 69 6e 64 20 6b 69 6e 64 29 0d 0a 20  imeKind kind).. 
0e10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 5f 64 61 74     {..      _dat
0e20: 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d 20 66 6d  etimeFormat = fm
0e30: 74 3b 0d 0a 20 20 20 20 20 20 5f 64 61 74 65 74  t;..      _datet
0e40: 69 6d 65 4b 69 6e 64 20 3d 20 6b 69 6e 64 3b 0d  imeKind = kind;.
0e50: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 23 72  .    }....    #r
0e60: 65 67 69 6f 6e 20 55 54 46 2d 38 20 43 6f 6e 76  egion UTF-8 Conv
0e70: 65 72 73 69 6f 6e 20 46 75 6e 63 74 69 6f 6e 73  ersion Functions
0e80: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
0e90: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e  ry>..    /// Con
0ea0: 76 65 72 74 73 20 61 20 73 74 72 69 6e 67 20 74  verts a string t
0eb0: 6f 20 61 20 55 54 46 2d 38 20 65 6e 63 6f 64 65  o a UTF-8 encode
0ec0: 64 20 62 79 74 65 20 61 72 72 61 79 20 73 69 7a  d byte array siz
0ed0: 65 64 20 74 6f 20 69 6e 63 6c 75 64 65 20 61 20  ed to include a 
0ee0: 6e 75 6c 6c 2d 74 65 72 6d 69 6e 61 74 69 6e 67  null-terminating
0ef0: 20 63 68 61 72 61 63 74 65 72 2e 0d 0a 20 20 20   character...   
0f00: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0f10: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
0f20: 6e 61 6d 65 3d 22 73 6f 75 72 63 65 54 65 78 74  name="sourceText
0f30: 22 3e 54 68 65 20 73 74 72 69 6e 67 20 74 6f 20  ">The string to 
0f40: 63 6f 6e 76 65 72 74 20 74 6f 20 55 54 46 2d 38  convert to UTF-8
0f50: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
0f60: 2f 20 3c 72 65 74 75 72 6e 73 3e 41 20 62 79 74  / <returns>A byt
0f70: 65 20 61 72 72 61 79 20 63 6f 6e 74 61 69 6e 69  e array containi
0f80: 6e 67 20 74 68 65 20 63 6f 6e 76 65 72 74 65 64  ng the converted
0f90: 20 73 74 72 69 6e 67 20 70 6c 75 73 20 61 6e 20   string plus an 
0fa0: 65 78 74 72 61 20 30 20 74 65 72 6d 69 6e 61 74  extra 0 terminat
0fb0: 69 6e 67 20 62 79 74 65 20 61 74 20 74 68 65 20  ing byte at the 
0fc0: 65 6e 64 20 6f 66 20 74 68 65 20 61 72 72 61 79  end of the array
0fd0: 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
0fe0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 62   public static b
0ff0: 79 74 65 5b 5d 20 54 6f 55 54 46 38 28 73 74 72  yte[] ToUTF8(str
1000: 69 6e 67 20 73 6f 75 72 63 65 54 65 78 74 29 0d  ing sourceText).
1010: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 42 79  .    {..      By
1020: 74 65 5b 5d 20 62 79 74 65 41 72 72 61 79 3b 0d  te[] byteArray;.
1030: 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20  .      int nlen 
1040: 3d 20 5f 75 74 66 38 2e 47 65 74 42 79 74 65 43  = _utf8.GetByteC
1050: 6f 75 6e 74 28 73 6f 75 72 63 65 54 65 78 74 29  ount(sourceText)
1060: 20 2b 20 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 62   + 1;....      b
1070: 79 74 65 41 72 72 61 79 20 3d 20 6e 65 77 20 62  yteArray = new b
1080: 79 74 65 5b 6e 6c 65 6e 5d 3b 0d 0a 20 20 20 20  yte[nlen];..    
1090: 20 20 6e 6c 65 6e 20 3d 20 5f 75 74 66 38 2e 47    nlen = _utf8.G
10a0: 65 74 42 79 74 65 73 28 73 6f 75 72 63 65 54 65  etBytes(sourceTe
10b0: 78 74 2c 20 30 2c 20 73 6f 75 72 63 65 54 65 78  xt, 0, sourceTex
10c0: 74 2e 4c 65 6e 67 74 68 2c 20 62 79 74 65 41 72  t.Length, byteAr
10d0: 72 61 79 2c 20 30 29 3b 0d 0a 20 20 20 20 20 20  ray, 0);..      
10e0: 62 79 74 65 41 72 72 61 79 5b 6e 6c 65 6e 5d 20  byteArray[nlen] 
10f0: 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65  = 0;....      re
1100: 74 75 72 6e 20 62 79 74 65 41 72 72 61 79 3b 0d  turn byteArray;.
1110: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
1120: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
1130: 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 20 61 20 44   /// Convert a D
1140: 61 74 65 54 69 6d 65 20 74 6f 20 61 20 55 54 46  ateTime to a UTF
1150: 2d 38 20 65 6e 63 6f 64 65 64 2c 20 7a 65 72 6f  -8 encoded, zero
1160: 2d 74 65 72 6d 69 6e 61 74 65 64 20 62 79 74 65  -terminated byte
1170: 20 61 72 72 61 79 2e 0d 0a 20 20 20 20 2f 2f 2f   array...    ///
1180: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
1190: 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a   /// <remarks>..
11a0: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e      /// This fun
11b0: 63 74 69 6f 6e 20 69 73 20 61 20 63 6f 6e 76 65  ction is a conve
11c0: 6e 69 65 6e 63 65 20 66 75 6e 63 74 69 6f 6e 2c  nience function,
11d0: 20 77 68 69 63 68 20 66 69 72 73 74 20 63 61 6c   which first cal
11e0: 6c 73 20 54 6f 53 74 72 69 6e 67 28 29 20 6f 6e  ls ToString() on
11f0: 20 74 68 65 20 44 61 74 65 54 69 6d 65 2c 20 61   the DateTime, a
1200: 6e 64 20 74 68 65 6e 20 63 61 6c 6c 73 20 54 6f  nd then calls To
1210: 55 54 46 38 28 29 20 77 69 74 68 20 74 68 65 0d  UTF8() with the.
1220: 0a 20 20 20 20 2f 2f 2f 20 73 74 72 69 6e 67 20  .    /// string 
1230: 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20 2f 2f 2f  result...    ///
1240: 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20   </remarks>..   
1250: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1260: 3d 22 64 61 74 65 54 69 6d 65 56 61 6c 75 65 22  ="dateTimeValue"
1270: 3e 54 68 65 20 44 61 74 65 54 69 6d 65 20 74 6f  >The DateTime to
1280: 20 63 6f 6e 76 65 72 74 2e 3c 2f 70 61 72 61 6d   convert.</param
1290: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
12a0: 72 6e 73 3e 54 68 65 20 55 54 46 2d 38 20 65 6e  rns>The UTF-8 en
12b0: 63 6f 64 65 64 20 73 74 72 69 6e 67 2c 20 69 6e  coded string, in
12c0: 63 6c 75 64 69 6e 67 20 61 20 30 20 74 65 72 6d  cluding a 0 term
12d0: 69 6e 61 74 69 6e 67 20 62 79 74 65 20 61 74 20  inating byte at 
12e0: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 61  the end of the a
12f0: 72 72 61 79 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  rray.</returns>.
1300: 0a 20 20 20 20 70 75 62 6c 69 63 20 62 79 74 65  .    public byte
1310: 5b 5d 20 54 6f 55 54 46 38 28 44 61 74 65 54 69  [] ToUTF8(DateTi
1320: 6d 65 20 64 61 74 65 54 69 6d 65 56 61 6c 75 65  me dateTimeValue
1330: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
1340: 72 65 74 75 72 6e 20 54 6f 55 54 46 38 28 54 6f  return ToUTF8(To
1350: 53 74 72 69 6e 67 28 64 61 74 65 54 69 6d 65 56  String(dateTimeV
1360: 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  alue));..    }..
1370: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
1380: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e  ry>..    /// Con
1390: 76 65 72 74 73 20 61 20 55 54 46 2d 38 20 65 6e  verts a UTF-8 en
13a0: 63 6f 64 65 64 20 49 6e 74 50 74 72 20 6f 66 20  coded IntPtr of 
13b0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6c 65  the specified le
13c0: 6e 67 74 68 20 69 6e 74 6f 20 61 20 2e 4e 45 54  ngth into a .NET
13d0: 20 73 74 72 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f   string..    ///
13e0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
13f0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1400: 3d 22 6e 61 74 69 76 65 73 74 72 69 6e 67 22 3e  ="nativestring">
1410: 54 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  The pointer to t
1420: 68 65 20 6d 65 6d 6f 72 79 20 77 68 65 72 65 20  he memory where 
1430: 74 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67  the UTF-8 string
1440: 20 69 73 20 65 6e 63 6f 64 65 64 3c 2f 70 61 72   is encoded</par
1450: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
1460: 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 74 69 76 65  ram name="native
1470: 73 74 72 69 6e 67 6c 65 6e 22 3e 54 68 65 20 6e  stringlen">The n
1480: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 74  umber of bytes t
1490: 6f 20 64 65 63 6f 64 65 3c 2f 70 61 72 61 6d 3e  o decode</param>
14a0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
14b0: 6e 73 3e 41 20 73 74 72 69 6e 67 20 63 6f 6e 74  ns>A string cont
14c0: 61 69 6e 69 6e 67 20 74 68 65 20 74 72 61 6e 73  aining the trans
14d0: 6c 61 74 65 64 20 63 68 61 72 61 63 74 65 72 28  lated character(
14e0: 73 29 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  s)</returns>..  
14f0: 20 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c    public virtual
1500: 20 73 74 72 69 6e 67 20 54 6f 53 74 72 69 6e 67   string ToString
1510: 28 49 6e 74 50 74 72 20 6e 61 74 69 76 65 73 74  (IntPtr nativest
1520: 72 69 6e 67 2c 20 69 6e 74 20 6e 61 74 69 76 65  ring, int native
1530: 73 74 72 69 6e 67 6c 65 6e 29 0d 0a 20 20 20 20  stringlen)..    
1540: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
1550: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 6e 61 74  UTF8ToString(nat
1560: 69 76 65 73 74 72 69 6e 67 2c 20 6e 61 74 69 76  ivestring, nativ
1570: 65 73 74 72 69 6e 67 6c 65 6e 29 3b 0d 0a 20 20  estringlen);..  
1580: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
1590: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
15a0: 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 55 54 46  / Converts a UTF
15b0: 2d 38 20 65 6e 63 6f 64 65 64 20 49 6e 74 50 74  -8 encoded IntPt
15c0: 72 20 6f 66 20 74 68 65 20 73 70 65 63 69 66 69  r of the specifi
15d0: 65 64 20 6c 65 6e 67 74 68 20 69 6e 74 6f 20 61  ed length into a
15e0: 20 2e 4e 45 54 20 73 74 72 69 6e 67 0d 0a 20 20   .NET string..  
15f0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1600: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
1610: 20 6e 61 6d 65 3d 22 6e 61 74 69 76 65 73 74 72   name="nativestr
1620: 69 6e 67 22 3e 54 68 65 20 70 6f 69 6e 74 65 72  ing">The pointer
1630: 20 74 6f 20 74 68 65 20 6d 65 6d 6f 72 79 20 77   to the memory w
1640: 68 65 72 65 20 74 68 65 20 55 54 46 2d 38 20 73  here the UTF-8 s
1650: 74 72 69 6e 67 20 69 73 20 65 6e 63 6f 64 65 64  tring is encoded
1660: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
1670: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e  / <param name="n
1680: 61 74 69 76 65 73 74 72 69 6e 67 6c 65 6e 22 3e  ativestringlen">
1690: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  The number of by
16a0: 74 65 73 20 74 6f 20 64 65 63 6f 64 65 3c 2f 70  tes to decode</p
16b0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
16c0: 72 65 74 75 72 6e 73 3e 41 20 73 74 72 69 6e 67  returns>A string
16d0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
16e0: 74 72 61 6e 73 6c 61 74 65 64 20 63 68 61 72 61  translated chara
16f0: 63 74 65 72 28 73 29 3c 2f 72 65 74 75 72 6e 73  cter(s)</returns
1700: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74  >..    public st
1710: 61 74 69 63 20 73 74 72 69 6e 67 20 55 54 46 38  atic string UTF8
1720: 54 6f 53 74 72 69 6e 67 28 49 6e 74 50 74 72 20  ToString(IntPtr 
1730: 6e 61 74 69 76 65 73 74 72 69 6e 67 2c 20 69 6e  nativestring, in
1740: 74 20 6e 61 74 69 76 65 73 74 72 69 6e 67 6c 65  t nativestringle
1750: 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  n)..    {..     
1760: 20 69 66 20 28 6e 61 74 69 76 65 73 74 72 69 6e   if (nativestrin
1770: 67 6c 65 6e 20 3d 3d 20 30 20 7c 7c 20 6e 61 74  glen == 0 || nat
1780: 69 76 65 73 74 72 69 6e 67 20 3d 3d 20 49 6e 74  ivestring == Int
1790: 50 74 72 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e  Ptr.Zero) return
17a0: 20 22 22 3b 0d 0a 20 20 20 20 20 20 69 66 20 28   "";..      if (
17b0: 6e 61 74 69 76 65 73 74 72 69 6e 67 6c 65 6e 20  nativestringlen 
17c0: 3d 3d 20 2d 31 29 0d 0a 20 20 20 20 20 20 7b 0d  == -1)..      {.
17d0: 0a 20 20 20 20 20 20 20 20 64 6f 0d 0a 20 20 20  .        do..   
17e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
17f0: 20 20 6e 61 74 69 76 65 73 74 72 69 6e 67 6c 65    nativestringle
1800: 6e 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 7d 20  n++;..        } 
1810: 77 68 69 6c 65 20 28 4d 61 72 73 68 61 6c 2e 52  while (Marshal.R
1820: 65 61 64 42 79 74 65 28 6e 61 74 69 76 65 73 74  eadByte(nativest
1830: 72 69 6e 67 2c 20 6e 61 74 69 76 65 73 74 72 69  ring, nativestri
1840: 6e 67 6c 65 6e 29 20 21 3d 20 30 29 3b 0d 0a 20  nglen) != 0);.. 
1850: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1860: 62 79 74 65 5b 5d 20 62 79 74 65 41 72 72 61 79  byte[] byteArray
1870: 20 3d 20 6e 65 77 20 62 79 74 65 5b 6e 61 74 69   = new byte[nati
1880: 76 65 73 74 72 69 6e 67 6c 65 6e 5d 3b 0d 0a 20  vestringlen];.. 
1890: 20 20 20 20 20 0d 0a 20 20 20 20 20 20 4d 61 72       ..      Mar
18a0: 73 68 61 6c 2e 43 6f 70 79 28 6e 61 74 69 76 65  shal.Copy(native
18b0: 73 74 72 69 6e 67 2c 20 62 79 74 65 41 72 72 61  string, byteArra
18c0: 79 2c 20 30 2c 20 6e 61 74 69 76 65 73 74 72 69  y, 0, nativestri
18d0: 6e 67 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20  nglen);....     
18e0: 20 72 65 74 75 72 6e 20 5f 75 74 66 38 2e 47 65   return _utf8.Ge
18f0: 74 53 74 72 69 6e 67 28 62 79 74 65 41 72 72 61  tString(byteArra
1900: 79 2c 20 30 2c 20 6e 61 74 69 76 65 73 74 72 69  y, 0, nativestri
1910: 6e 67 6c 65 6e 29 3b 0d 0a 20 20 20 20 7d 0d 0a  nglen);..    }..
1920: 0d 0a 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69  ....    #endregi
1930: 6f 6e 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f  on....    #regio
1940: 6e 20 44 61 74 65 54 69 6d 65 20 43 6f 6e 76 65  n DateTime Conve
1950: 72 73 69 6f 6e 20 46 75 6e 63 74 69 6f 6e 73 0d  rsion Functions.
1960: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
1970: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76  y>..    /// Conv
1980: 65 72 74 73 20 61 20 73 74 72 69 6e 67 20 69 6e  erts a string in
1990: 74 6f 20 61 20 44 61 74 65 54 69 6d 65 2c 20 75  to a DateTime, u
19a0: 73 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74  sing the current
19b0: 20 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 20   DateTimeFormat 
19c0: 73 70 65 63 69 66 69 65 64 20 66 6f 72 20 74 68  specified for th
19d0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 68 65  e connection whe
19e0: 6e 20 69 74 20 77 61 73 20 6f 70 65 6e 65 64 2e  n it was opened.
19f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
1a00: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
1a10: 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f  emarks>..    ///
1a20: 20 41 63 63 65 70 74 61 62 6c 65 20 49 53 4f 38   Acceptable ISO8
1a30: 36 30 31 20 44 61 74 65 54 69 6d 65 20 66 6f 72  601 DateTime for
1a40: 6d 61 74 73 20 61 72 65 3a 0d 0a 20 20 20 20 2f  mats are:..    /
1a50: 2f 2f 20 3c 6c 69 73 74 20 74 79 70 65 3d 22 62  // <list type="b
1a60: 75 6c 6c 65 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f  ullet">..    ///
1a70: 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74   <item><descript
1a80: 69 6f 6e 3e 54 48 48 6d 6d 73 73 4b 3c 2f 64 65  ion>THHmmssK</de
1a90: 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d  scription></item
1aa0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d  >..    /// <item
1ab0: 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 54 48  ><description>TH
1ac0: 48 6d 6d 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f  HmmK</descriptio
1ad0: 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f  n></item>..    /
1ae0: 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69  // <item><descri
1af0: 70 74 69 6f 6e 3e 48 48 3a 6d 6d 3a 73 73 2e 46  ption>HH:mm:ss.F
1b00: 46 46 46 46 46 46 4b 3c 2f 64 65 73 63 72 69 70  FFFFFFK</descrip
1b10: 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20  tion></item>..  
1b20: 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73    /// <item><des
1b30: 63 72 69 70 74 69 6f 6e 3e 48 48 3a 6d 6d 3a 73  cription>HH:mm:s
1b40: 73 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  sK</description>
1b50: 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  </item>..    ///
1b60: 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74   <item><descript
1b70: 69 6f 6e 3e 48 48 3a 6d 6d 4b 3c 2f 64 65 73 63  ion>HH:mmK</desc
1b80: 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d  ription></item>.
1b90: 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c  .    /// <item><
1ba0: 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79  description>yyyy
1bb0: 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 2e  -MM-dd HH:mm:ss.
1bc0: 46 46 46 46 46 46 46 4b 3c 2f 64 65 73 63 72 69  FFFFFFFK</descri
1bd0: 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20  ption></item>.. 
1be0: 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65     /// <item><de
1bf0: 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d  scription>yyyy-M
1c00: 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 4b 3c 2f  M-dd HH:mm:ssK</
1c10: 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74  description></it
1c20: 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74  em>..    /// <it
1c30: 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e  em><description>
1c40: 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d  yyyy-MM-dd HH:mm
1c50: 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  K</description><
1c60: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
1c70: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
1c80: 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48  on>yyyy-MM-ddTHH
1c90: 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b 3c  :mm:ss.FFFFFFFK<
1ca0: 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69  /description></i
1cb0: 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69  tem>..    /// <i
1cc0: 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e  tem><description
1cd0: 3e 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d  >yyyy-MM-ddTHH:m
1ce0: 6d 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  mK</description>
1cf0: 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  </item>..    ///
1d00: 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74   <item><descript
1d10: 69 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 54 48  ion>yyyy-MM-ddTH
1d20: 48 3a 6d 6d 3a 73 73 4b 3c 2f 64 65 73 63 72 69  H:mm:ssK</descri
1d30: 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20  ption></item>.. 
1d40: 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65     /// <item><de
1d50: 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 4d 4d  scription>yyyyMM
1d60: 64 64 48 48 6d 6d 73 73 4b 3c 2f 64 65 73 63 72  ddHHmmssK</descr
1d70: 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a  iption></item>..
1d80: 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64      /// <item><d
1d90: 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 4d  escription>yyyyM
1da0: 4d 64 64 48 48 6d 6d 4b 3c 2f 64 65 73 63 72 69  MddHHmmK</descri
1db0: 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20  ption></item>.. 
1dc0: 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65     /// <item><de
1dd0: 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 4d 4d  scription>yyyyMM
1de0: 64 64 54 48 48 6d 6d 73 73 46 46 46 46 46 46 46  ddTHHmmssFFFFFFF
1df0: 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  K</description><
1e00: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
1e10: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
1e20: 6f 6e 3e 54 48 48 6d 6d 73 73 3c 2f 64 65 73 63  on>THHmmss</desc
1e30: 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d  ription></item>.
1e40: 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c  .    /// <item><
1e50: 64 65 73 63 72 69 70 74 69 6f 6e 3e 54 48 48 6d  description>THHm
1e60: 6d 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  m</description><
1e70: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
1e80: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
1e90: 6f 6e 3e 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46  on>HH:mm:ss.FFFF
1ea0: 46 46 46 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e  FFF</description
1eb0: 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f  ></item>..    //
1ec0: 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70  / <item><descrip
1ed0: 74 69 6f 6e 3e 48 48 3a 6d 6d 3a 73 73 3c 2f 64  tion>HH:mm:ss</d
1ee0: 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65  escription></ite
1ef0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65  m>..    /// <ite
1f00: 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 48  m><description>H
1f10: 48 3a 6d 6d 3c 2f 64 65 73 63 72 69 70 74 69 6f  H:mm</descriptio
1f20: 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f  n></item>..    /
1f30: 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69  // <item><descri
1f40: 70 74 69 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64  ption>yyyy-MM-dd
1f50: 20 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46   HH:mm:ss.FFFFFF
1f60: 46 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  F</description><
1f70: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
1f80: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
1f90: 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48  on>yyyy-MM-dd HH
1fa0: 3a 6d 6d 3a 73 73 3c 2f 64 65 73 63 72 69 70 74  :mm:ss</descript
1fb0: 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20  ion></item>..   
1fc0: 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63   /// <item><desc
1fd0: 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d 4d 2d  ription>yyyy-MM-
1fe0: 64 64 20 48 48 3a 6d 6d 3c 2f 64 65 73 63 72 69  dd HH:mm</descri
1ff0: 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20  ption></item>.. 
2000: 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65     /// <item><de
2010: 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d  scription>yyyy-M
2020: 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 46 46  M-ddTHH:mm:ss.FF
2030: 46 46 46 46 46 3c 2f 64 65 73 63 72 69 70 74 69  FFFFF</descripti
2040: 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20  on></item>..    
2050: 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72  /// <item><descr
2060: 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64  iption>yyyy-MM-d
2070: 64 54 48 48 3a 6d 6d 3c 2f 64 65 73 63 72 69 70  dTHH:mm</descrip
2080: 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20  tion></item>..  
2090: 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73    /// <item><des
20a0: 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d 4d  cription>yyyy-MM
20b0: 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 3c 2f 64 65  -ddTHH:mm:ss</de
20c0: 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d  scription></item
20d0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d  >..    /// <item
20e0: 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79  ><description>yy
20f0: 79 79 4d 4d 64 64 48 48 6d 6d 73 73 3c 2f 64 65  yyMMddHHmmss</de
2100: 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d  scription></item
2110: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d  >..    /// <item
2120: 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79  ><description>yy
2130: 79 79 4d 4d 64 64 48 48 6d 6d 3c 2f 64 65 73 63  yyMMddHHmm</desc
2140: 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d  ription></item>.
2150: 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c  .    /// <item><
2160: 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79  description>yyyy
2170: 4d 4d 64 64 54 48 48 6d 6d 73 73 46 46 46 46 46  MMddTHHmmssFFFFF
2180: 46 46 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  FF</description>
2190: 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  </item>..    ///
21a0: 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74   <item><descript
21b0: 69 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 3c 2f  ion>yyyy-MM-dd</
21c0: 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74  description></it
21d0: 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74  em>..    /// <it
21e0: 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e  em><description>
21f0: 79 79 79 79 4d 4d 64 64 3c 2f 64 65 73 63 72 69  yyyyMMdd</descri
2200: 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20  ption></item>.. 
2210: 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65     /// <item><de
2220: 73 63 72 69 70 74 69 6f 6e 3e 79 79 2d 4d 4d 2d  scription>yy-MM-
2230: 64 64 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  dd</description>
2240: 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  </item>..    ///
2250: 20 3c 2f 6c 69 73 74 3e 0d 0a 20 20 20 20 2f 2f   </list>..    //
2260: 2f 20 49 66 20 74 68 65 20 73 74 72 69 6e 67 20  / If the string 
2270: 63 61 6e 6e 6f 74 20 62 65 20 6d 61 74 63 68 65  cannot be matche
2280: 64 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  d to one of the 
2290: 61 62 6f 76 65 20 66 6f 72 6d 61 74 73 2c 20 61  above formats, a
22a0: 6e 20 65 78 63 65 70 74 69 6f 6e 20 77 69 6c 6c  n exception will
22b0: 20 62 65 20 74 68 72 6f 77 6e 2e 0d 0a 20 20 20   be thrown...   
22c0: 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d   /// </remarks>.
22d0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
22e0: 6e 61 6d 65 3d 22 64 61 74 65 54 65 78 74 22 3e  name="dateText">
22f0: 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  The string conta
2300: 69 6e 69 6e 67 20 65 69 74 68 65 72 20 61 20 6c  ining either a l
2310: 6f 6e 67 20 69 6e 74 65 67 65 72 20 6e 75 6d 62  ong integer numb
2320: 65 72 20 6f 66 20 31 30 30 2d 6e 61 6e 6f 73 65  er of 100-nanose
2330: 63 6f 6e 64 20 75 6e 69 74 73 20 73 69 6e 63 65  cond units since
2340: 0d 0a 20 20 20 20 2f 2f 2f 20 53 79 73 74 65 6d  ..    /// System
2350: 2e 44 61 74 65 54 69 6d 65 2e 4d 69 6e 56 61 6c  .DateTime.MinVal
2360: 75 65 2c 20 61 20 4a 75 6c 69 61 6e 20 64 61 79  ue, a Julian day
2370: 20 64 6f 75 62 6c 65 2c 20 61 6e 20 69 6e 74 65   double, an inte
2380: 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 73 65  ger number of se
2390: 63 6f 6e 64 73 20 73 69 6e 63 65 20 74 68 65 20  conds since the 
23a0: 55 6e 69 78 20 65 70 6f 63 68 2c 20 61 0d 0a 20  Unix epoch, a.. 
23b0: 20 20 20 2f 2f 2f 20 63 75 6c 74 75 72 65 2d 69     /// culture-i
23c0: 6e 64 65 70 65 6e 64 65 6e 74 20 66 6f 72 6d 61  ndependent forma
23d0: 74 74 65 64 20 64 61 74 65 20 61 6e 64 20 74 69  tted date and ti
23e0: 6d 65 20 73 74 72 69 6e 67 2c 20 61 20 66 6f 72  me string, a for
23f0: 6d 61 74 74 65 64 20 64 61 74 65 20 61 6e 64 20  matted date and 
2400: 74 69 6d 65 20 73 74 72 69 6e 67 20 69 6e 20 74  time string in t
2410: 68 65 20 63 75 72 72 65 6e 74 0d 0a 20 20 20 20  he current..    
2420: 2f 2f 2f 20 63 75 6c 74 75 72 65 2c 20 6f 72 20  /// culture, or 
2430: 61 6e 20 49 53 4f 38 36 30 31 2d 66 6f 72 6d 61  an ISO8601-forma
2440: 74 20 73 74 72 69 6e 67 2e 3c 2f 70 61 72 61 6d  t string.</param
2450: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
2460: 72 6e 73 3e 41 20 44 61 74 65 54 69 6d 65 20 76  rns>A DateTime v
2470: 61 6c 75 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  alue</returns>..
2480: 20 20 20 20 70 75 62 6c 69 63 20 44 61 74 65 54      public DateT
2490: 69 6d 65 20 54 6f 44 61 74 65 54 69 6d 65 28 73  ime ToDateTime(s
24a0: 74 72 69 6e 67 20 64 61 74 65 54 65 78 74 29 0d  tring dateText).
24b0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
24c0: 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28  turn ToDateTime(
24d0: 64 61 74 65 54 65 78 74 2c 20 5f 64 61 74 65 74  dateText, _datet
24e0: 69 6d 65 46 6f 72 6d 61 74 2c 20 5f 64 61 74 65  imeFormat, _date
24f0: 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20  timeKind);..    
2500: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
2510: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
2520: 43 6f 6e 76 65 72 74 73 20 61 20 73 74 72 69 6e  Converts a strin
2530: 67 20 69 6e 74 6f 20 61 20 44 61 74 65 54 69 6d  g into a DateTim
2540: 65 2c 20 75 73 69 6e 67 20 74 68 65 20 73 70 65  e, using the spe
2550: 63 69 66 69 65 64 20 44 61 74 65 54 69 6d 65 46  cified DateTimeF
2560: 6f 72 6d 61 74 20 61 6e 64 20 44 61 74 65 54 69  ormat and DateTi
2570: 6d 65 4b 69 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f  meKind...    ///
2580: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2590: 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a   /// <remarks>..
25a0: 20 20 20 20 2f 2f 2f 20 41 63 63 65 70 74 61 62      /// Acceptab
25b0: 6c 65 20 49 53 4f 38 36 30 31 20 44 61 74 65 54  le ISO8601 DateT
25c0: 69 6d 65 20 66 6f 72 6d 61 74 73 20 61 72 65 3a  ime formats are:
25d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 6c 69 73 74 20  ..    /// <list 
25e0: 74 79 70 65 3d 22 62 75 6c 6c 65 74 22 3e 0d 0a  type="bullet">..
25f0: 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64      /// <item><d
2600: 65 73 63 72 69 70 74 69 6f 6e 3e 54 48 48 6d 6d  escription>THHmm
2610: 73 73 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e  ssK</description
2620: 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f  ></item>..    //
2630: 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70  / <item><descrip
2640: 74 69 6f 6e 3e 54 48 48 6d 6d 4b 3c 2f 64 65 73  tion>THHmmK</des
2650: 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e  cription></item>
2660: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e  ..    /// <item>
2670: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 48 48 3a  <description>HH:
2680: 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b 3c 2f  mm:ss.FFFFFFFK</
2690: 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74  description></it
26a0: 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74  em>..    /// <it
26b0: 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e  em><description>
26c0: 48 48 3a 6d 6d 3a 73 73 4b 3c 2f 64 65 73 63 72  HH:mm:ssK</descr
26d0: 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a  iption></item>..
26e0: 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64      /// <item><d
26f0: 65 73 63 72 69 70 74 69 6f 6e 3e 48 48 3a 6d 6d  escription>HH:mm
2700: 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  K</description><
2710: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
2720: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
2730: 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48  on>yyyy-MM-dd HH
2740: 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b 3c  :mm:ss.FFFFFFFK<
2750: 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69  /description></i
2760: 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69  tem>..    /// <i
2770: 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e  tem><description
2780: 3e 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d  >yyyy-MM-dd HH:m
2790: 6d 3a 73 73 4b 3c 2f 64 65 73 63 72 69 70 74 69  m:ssK</descripti
27a0: 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20  on></item>..    
27b0: 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72  /// <item><descr
27c0: 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64  iption>yyyy-MM-d
27d0: 64 20 48 48 3a 6d 6d 4b 3c 2f 64 65 73 63 72 69  d HH:mmK</descri
27e0: 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20  ption></item>.. 
27f0: 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65     /// <item><de
2800: 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d  scription>yyyy-M
2810: 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 46 46  M-ddTHH:mm:ss.FF
2820: 46 46 46 46 46 4b 3c 2f 64 65 73 63 72 69 70 74  FFFFFK</descript
2830: 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20  ion></item>..   
2840: 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63   /// <item><desc
2850: 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d 4d 2d  ription>yyyy-MM-
2860: 64 64 54 48 48 3a 6d 6d 4b 3c 2f 64 65 73 63 72  ddTHH:mmK</descr
2870: 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a  iption></item>..
2880: 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64      /// <item><d
2890: 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d  escription>yyyy-
28a0: 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 4b 3c  MM-ddTHH:mm:ssK<
28b0: 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69  /description></i
28c0: 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69  tem>..    /// <i
28d0: 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e  tem><description
28e0: 3e 79 79 79 79 4d 4d 64 64 48 48 6d 6d 73 73 4b  >yyyyMMddHHmmssK
28f0: 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f  </description></
2900: 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  item>..    /// <
2910: 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f  item><descriptio
2920: 6e 3e 79 79 79 79 4d 4d 64 64 48 48 6d 6d 4b 3c  n>yyyyMMddHHmmK<
2930: 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69  /description></i
2940: 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69  tem>..    /// <i
2950: 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e  tem><description
2960: 3e 79 79 79 79 4d 4d 64 64 54 48 48 6d 6d 73 73  >yyyyMMddTHHmmss
2970: 46 46 46 46 46 46 46 4b 3c 2f 64 65 73 63 72 69  FFFFFFFK</descri
2980: 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20  ption></item>.. 
2990: 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65     /// <item><de
29a0: 73 63 72 69 70 74 69 6f 6e 3e 54 48 48 6d 6d 73  scription>THHmms
29b0: 73 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  s</description><
29c0: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
29d0: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
29e0: 6f 6e 3e 54 48 48 6d 6d 3c 2f 64 65 73 63 72 69  on>THHmm</descri
29f0: 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20  ption></item>.. 
2a00: 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65     /// <item><de
2a10: 73 63 72 69 70 74 69 6f 6e 3e 48 48 3a 6d 6d 3a  scription>HH:mm:
2a20: 73 73 2e 46 46 46 46 46 46 46 3c 2f 64 65 73 63  ss.FFFFFFF</desc
2a30: 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d  ription></item>.
2a40: 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c  .    /// <item><
2a50: 64 65 73 63 72 69 70 74 69 6f 6e 3e 48 48 3a 6d  description>HH:m
2a60: 6d 3a 73 73 3c 2f 64 65 73 63 72 69 70 74 69 6f  m:ss</descriptio
2a70: 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f  n></item>..    /
2a80: 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69  // <item><descri
2a90: 70 74 69 6f 6e 3e 48 48 3a 6d 6d 3c 2f 64 65 73  ption>HH:mm</des
2aa0: 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e  cription></item>
2ab0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e  ..    /// <item>
2ac0: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79  <description>yyy
2ad0: 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73  y-MM-dd HH:mm:ss
2ae0: 2e 46 46 46 46 46 46 46 3c 2f 64 65 73 63 72 69  .FFFFFFF</descri
2af0: 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20  ption></item>.. 
2b00: 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65     /// <item><de
2b10: 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d  scription>yyyy-M
2b20: 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 3c 2f 64  M-dd HH:mm:ss</d
2b30: 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65  escription></ite
2b40: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65  m>..    /// <ite
2b50: 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 79  m><description>y
2b60: 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3c  yyy-MM-dd HH:mm<
2b70: 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69  /description></i
2b80: 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69  tem>..    /// <i
2b90: 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e  tem><description
2ba0: 3e 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d  >yyyy-MM-ddTHH:m
2bb0: 6d 3a 73 73 2e 46 46 46 46 46 46 46 3c 2f 64 65  m:ss.FFFFFFF</de
2bc0: 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d  scription></item
2bd0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d  >..    /// <item
2be0: 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79  ><description>yy
2bf0: 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3c 2f  yy-MM-ddTHH:mm</
2c00: 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74  description></it
2c10: 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74  em>..    /// <it
2c20: 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e  em><description>
2c30: 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d  yyyy-MM-ddTHH:mm
2c40: 3a 73 73 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e  :ss</description
2c50: 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f  ></item>..    //
2c60: 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70  / <item><descrip
2c70: 74 69 6f 6e 3e 79 79 79 79 4d 4d 64 64 48 48 6d  tion>yyyyMMddHHm
2c80: 6d 73 73 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e  mss</description
2c90: 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f  ></item>..    //
2ca0: 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70  / <item><descrip
2cb0: 74 69 6f 6e 3e 79 79 79 79 4d 4d 64 64 48 48 6d  tion>yyyyMMddHHm
2cc0: 6d 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  m</description><
2cd0: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
2ce0: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
2cf0: 6f 6e 3e 79 79 79 79 4d 4d 64 64 54 48 48 6d 6d  on>yyyyMMddTHHmm
2d00: 73 73 46 46 46 46 46 46 46 3c 2f 64 65 73 63 72  ssFFFFFFF</descr
2d10: 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a  iption></item>..
2d20: 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64      /// <item><d
2d30: 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d  escription>yyyy-
2d40: 4d 4d 2d 64 64 3c 2f 64 65 73 63 72 69 70 74 69  MM-dd</descripti
2d50: 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20  on></item>..    
2d60: 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72  /// <item><descr
2d70: 69 70 74 69 6f 6e 3e 79 79 79 79 4d 4d 64 64 3c  iption>yyyyMMdd<
2d80: 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69  /description></i
2d90: 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69  tem>..    /// <i
2da0: 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e  tem><description
2db0: 3e 79 79 2d 4d 4d 2d 64 64 3c 2f 64 65 73 63 72  >yy-MM-dd</descr
2dc0: 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a  iption></item>..
2dd0: 20 20 20 20 2f 2f 2f 20 3c 2f 6c 69 73 74 3e 0d      /// </list>.
2de0: 0a 20 20 20 20 2f 2f 2f 20 49 66 20 74 68 65 20  .    /// If the 
2df0: 73 74 72 69 6e 67 20 63 61 6e 6e 6f 74 20 62 65  string cannot be
2e00: 20 6d 61 74 63 68 65 64 20 74 6f 20 6f 6e 65 20   matched to one 
2e10: 6f 66 20 74 68 65 20 61 62 6f 76 65 20 66 6f 72  of the above for
2e20: 6d 61 74 73 2c 20 61 6e 20 65 78 63 65 70 74 69  mats, an excepti
2e30: 6f 6e 20 77 69 6c 6c 20 62 65 20 74 68 72 6f 77  on will be throw
2e40: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  n...    /// </re
2e50: 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  marks>..    /// 
2e60: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 61 74  <param name="dat
2e70: 65 54 65 78 74 22 3e 54 68 65 20 73 74 72 69 6e  eText">The strin
2e80: 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 65 69 74  g containing eit
2e90: 68 65 72 20 61 20 6c 6f 6e 67 20 69 6e 74 65 67  her a long integ
2ea0: 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 31 30 30  er number of 100
2eb0: 2d 6e 61 6e 6f 73 65 63 6f 6e 64 20 75 6e 69 74  -nanosecond unit
2ec0: 73 20 73 69 6e 63 65 0d 0a 20 20 20 20 2f 2f 2f  s since..    ///
2ed0: 20 53 79 73 74 65 6d 2e 44 61 74 65 54 69 6d 65   System.DateTime
2ee0: 2e 4d 69 6e 56 61 6c 75 65 2c 20 61 20 4a 75 6c  .MinValue, a Jul
2ef0: 69 61 6e 20 64 61 79 20 64 6f 75 62 6c 65 2c 20  ian day double, 
2f00: 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65  an integer numbe
2f10: 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e  r of seconds sin
2f20: 63 65 20 74 68 65 20 55 6e 69 78 20 65 70 6f 63  ce the Unix epoc
2f30: 68 2c 20 61 0d 0a 20 20 20 20 2f 2f 2f 20 63 75  h, a..    /// cu
2f40: 6c 74 75 72 65 2d 69 6e 64 65 70 65 6e 64 65 6e  lture-independen
2f50: 74 20 66 6f 72 6d 61 74 74 65 64 20 64 61 74 65  t formatted date
2f60: 20 61 6e 64 20 74 69 6d 65 20 73 74 72 69 6e 67   and time string
2f70: 2c 20 61 20 66 6f 72 6d 61 74 74 65 64 20 64 61  , a formatted da
2f80: 74 65 20 61 6e 64 20 74 69 6d 65 20 73 74 72 69  te and time stri
2f90: 6e 67 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e  ng in the curren
2fa0: 74 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 6c 74 75  t..    /// cultu
2fb0: 72 65 2c 20 6f 72 20 61 6e 20 49 53 4f 38 36 30  re, or an ISO860
2fc0: 31 2d 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 2e  1-format string.
2fd0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
2fe0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
2ff0: 6f 72 6d 61 74 22 3e 54 68 65 20 53 51 4c 69 74  ormat">The SQLit
3000: 65 44 61 74 65 46 6f 72 6d 61 74 73 20 74 6f 20  eDateFormats to 
3010: 75 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  use.</param>..  
3020: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
3030: 65 3d 22 6b 69 6e 64 22 3e 54 68 65 20 44 61 74  e="kind">The Dat
3040: 65 54 69 6d 65 4b 69 6e 64 20 74 6f 20 75 73 65  eTimeKind to use
3050: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
3060: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41 20 44 61  // <returns>A Da
3070: 74 65 54 69 6d 65 20 76 61 6c 75 65 3c 2f 72 65  teTime value</re
3080: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
3090: 69 63 20 73 74 61 74 69 63 20 44 61 74 65 54 69  ic static DateTi
30a0: 6d 65 20 54 6f 44 61 74 65 54 69 6d 65 28 73 74  me ToDateTime(st
30b0: 72 69 6e 67 20 64 61 74 65 54 65 78 74 2c 20 53  ring dateText, S
30c0: 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73  QLiteDateFormats
30d0: 20 66 6f 72 6d 61 74 2c 20 44 61 74 65 54 69 6d   format, DateTim
30e0: 65 4b 69 6e 64 20 6b 69 6e 64 29 0d 0a 20 20 20  eKind kind)..   
30f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 77 69 74   {..        swit
3100: 63 68 20 28 66 6f 72 6d 61 74 29 0d 0a 20 20 20  ch (format)..   
3110: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3120: 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65 44      case SQLiteD
3130: 61 74 65 46 6f 72 6d 61 74 73 2e 54 69 63 6b 73  ateFormats.Ticks
3140: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
3150: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3160: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
3170: 20 6e 65 77 20 44 61 74 65 54 69 6d 65 28 43 6f   new DateTime(Co
3180: 6e 76 65 72 74 2e 54 6f 49 6e 74 36 34 28 0d 0a  nvert.ToInt64(..
3190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a0: 20 20 20 20 20 20 20 20 64 61 74 65 54 65 78 74          dateText
31b0: 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e  , CultureInfo.In
31c0: 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29 2c  variantCulture),
31d0: 20 6b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20   kind);..       
31e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
31f0: 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
3200: 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 4a  iteDateFormats.J
3210: 75 6c 69 61 6e 44 61 79 3a 0d 0a 20 20 20 20 20  ulianDay:..     
3220: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
3230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3240: 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54    return ToDateT
3250: 69 6d 65 28 43 6f 6e 76 65 72 74 2e 54 6f 44 6f  ime(Convert.ToDo
3260: 75 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20  uble(..         
3270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
3280: 61 74 65 54 65 78 74 2c 20 43 75 6c 74 75 72 65  ateText, Culture
3290: 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75  Info.InvariantCu
32a0: 6c 74 75 72 65 29 2c 20 6b 69 6e 64 29 3b 0d 0a  lture), kind);..
32b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
32d0: 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f  ase SQLiteDateFo
32e0: 72 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63 68 3a  rmats.UnixEpoch:
32f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3300: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3310: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
3320: 44 61 74 65 54 69 6d 65 2e 53 70 65 63 69 66 79  DateTime.Specify
3330: 4b 69 6e 64 28 0d 0a 20 20 20 20 20 20 20 20 20  Kind(..         
3340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55                 U
3350: 6e 69 78 45 70 6f 63 68 2e 41 64 64 53 65 63 6f  nixEpoch.AddSeco
3360: 6e 64 73 28 43 6f 6e 76 65 72 74 2e 54 6f 49 6e  nds(Convert.ToIn
3370: 74 33 32 28 0d 0a 20 20 20 20 20 20 20 20 20 20  t32(..          
3380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
3390: 74 65 54 65 78 74 2c 20 43 75 6c 74 75 72 65 49  teText, CultureI
33a0: 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  nfo.InvariantCul
33b0: 74 75 72 65 29 29 2c 20 6b 69 6e 64 29 3b 0d 0a  ture)), kind);..
33c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
33e0: 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f  ase SQLiteDateFo
33f0: 72 6d 61 74 73 2e 49 6e 76 61 72 69 61 6e 74 43  rmats.InvariantC
3400: 75 6c 74 75 72 65 3a 0d 0a 20 20 20 20 20 20 20  ulture:..       
3410: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3430: 72 65 74 75 72 6e 20 44 61 74 65 54 69 6d 65 2e  return DateTime.
3440: 53 70 65 63 69 66 79 4b 69 6e 64 28 44 61 74 65  SpecifyKind(Date
3450: 54 69 6d 65 2e 50 61 72 73 65 28 0d 0a 20 20 20  Time.Parse(..   
3460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3470: 20 20 20 20 20 64 61 74 65 54 65 78 74 2c 20 44       dateText, D
3480: 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 49 6e 66  ateTimeFormatInf
3490: 6f 2e 49 6e 76 61 72 69 61 6e 74 49 6e 66 6f 2c  o.InvariantInfo,
34a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34b0: 20 20 20 20 20 20 20 20 20 20 6b 69 6e 64 20 3d            kind =
34c0: 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55  = DateTimeKind.U
34d0: 74 63 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  tc ?..          
34e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f0: 20 20 44 61 74 65 54 69 6d 65 53 74 79 6c 65 73    DateTimeStyles
3500: 2e 41 64 6a 75 73 74 54 6f 55 6e 69 76 65 72 73  .AdjustToUnivers
3510: 61 6c 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  al :..          
3520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3530: 20 20 44 61 74 65 54 69 6d 65 53 74 79 6c 65 73    DateTimeStyles
3540: 2e 4e 6f 6e 65 29 2c 0d 0a 20 20 20 20 20 20 20  .None),..       
3550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3560: 20 6b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20   kind);..       
3570: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
3580: 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
3590: 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 43  iteDateFormats.C
35a0: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 3a 0d 0a  urrentCulture:..
35b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
35d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 61         return Da
35e0: 74 65 54 69 6d 65 2e 53 70 65 63 69 66 79 4b 69  teTime.SpecifyKi
35f0: 6e 64 28 44 61 74 65 54 69 6d 65 2e 50 61 72 73  nd(DateTime.Pars
3600: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
3610: 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 65              date
3620: 54 65 78 74 2c 20 44 61 74 65 54 69 6d 65 46 6f  Text, DateTimeFo
3630: 72 6d 61 74 49 6e 66 6f 2e 43 75 72 72 65 6e 74  rmatInfo.Current
3640: 49 6e 66 6f 2c 0d 0a 20 20 20 20 20 20 20 20 20  Info,..         
3650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
3660: 69 6e 64 20 3d 3d 20 44 61 74 65 54 69 6d 65 4b  ind == DateTimeK
3670: 69 6e 64 2e 55 74 63 20 3f 0d 0a 20 20 20 20 20  ind.Utc ?..     
3680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3690: 20 20 20 20 20 20 20 44 61 74 65 54 69 6d 65 53         DateTimeS
36a0: 74 79 6c 65 73 2e 41 64 6a 75 73 74 54 6f 55 6e  tyles.AdjustToUn
36b0: 69 76 65 72 73 61 6c 20 3a 0d 0a 20 20 20 20 20  iversal :..     
36c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d0: 20 20 20 20 20 20 20 44 61 74 65 54 69 6d 65 53         DateTimeS
36e0: 74 79 6c 65 73 2e 4e 6f 6e 65 29 2c 0d 0a 20 20  tyles.None),..  
36f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3700: 20 20 20 20 20 20 6b 69 6e 64 29 3b 0d 0a 20 20        kind);..  
3710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
3720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66  .            def
3730: 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 20  ault:..         
3740: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
3760: 74 75 72 6e 20 44 61 74 65 54 69 6d 65 2e 53 70  turn DateTime.Sp
3770: 65 63 69 66 79 4b 69 6e 64 28 44 61 74 65 54 69  ecifyKind(DateTi
3780: 6d 65 2e 50 61 72 73 65 45 78 61 63 74 28 0d 0a  me.ParseExact(..
3790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a0: 20 20 20 20 20 20 20 20 64 61 74 65 54 65 78 74          dateText
37b0: 2c 20 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61  , _datetimeForma
37c0: 74 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ts,..           
37d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 61 74               Dat
37e0: 65 54 69 6d 65 46 6f 72 6d 61 74 49 6e 66 6f 2e  eTimeFormatInfo.
37f0: 49 6e 76 61 72 69 61 6e 74 49 6e 66 6f 2c 0d 0a  InvariantInfo,..
3800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3810: 20 20 20 20 20 20 20 20 6b 69 6e 64 20 3d 3d 20          kind == 
3820: 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55 74 63  DateTimeKind.Utc
3830: 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
3840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3850: 44 61 74 65 54 69 6d 65 53 74 79 6c 65 73 2e 41  DateTimeStyles.A
3860: 64 6a 75 73 74 54 6f 55 6e 69 76 65 72 73 61 6c  djustToUniversal
3870: 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   :..            
3880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3890: 44 61 74 65 54 69 6d 65 53 74 79 6c 65 73 2e 4e  DateTimeStyles.N
38a0: 6f 6e 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  one),..         
38b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
38c0: 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ind);..         
38d0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
38e0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
38f0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
3900: 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74  .    /// Convert
3910: 73 20 61 20 6a 75 6c 69 61 6e 64 61 79 20 76 61  s a julianday va
3920: 6c 75 65 20 69 6e 74 6f 20 61 20 44 61 74 65 54  lue into a DateT
3930: 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ime..    /// </s
3940: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
3950: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6a 75   <param name="ju
3960: 6c 69 61 6e 44 61 79 22 3e 54 68 65 20 76 61 6c  lianDay">The val
3970: 75 65 20 74 6f 20 63 6f 6e 76 65 72 74 3c 2f 70  ue to convert</p
3980: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
3990: 72 65 74 75 72 6e 73 3e 41 20 2e 4e 45 54 20 44  returns>A .NET D
39a0: 61 74 65 54 69 6d 65 3c 2f 72 65 74 75 72 6e 73  ateTime</returns
39b0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 44 61  >..    public Da
39c0: 74 65 54 69 6d 65 20 54 6f 44 61 74 65 54 69 6d  teTime ToDateTim
39d0: 65 28 64 6f 75 62 6c 65 20 6a 75 6c 69 61 6e 44  e(double julianD
39e0: 61 79 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ay)..    {..    
39f0: 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54    return ToDateT
3a00: 69 6d 65 28 6a 75 6c 69 61 6e 44 61 79 2c 20 5f  ime(julianDay, _
3a10: 64 61 74 65 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a  datetimeKind);..
3a20: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
3a30: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
3a40: 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 6a  /// Converts a j
3a50: 75 6c 69 61 6e 64 61 79 20 76 61 6c 75 65 20 69  ulianday value i
3a60: 6e 74 6f 20 61 20 44 61 74 65 54 69 6d 65 0d 0a  nto a DateTime..
3a70: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
3a80: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
3a90: 61 6d 20 6e 61 6d 65 3d 22 6a 75 6c 69 61 6e 44  am name="julianD
3aa0: 61 79 22 3e 54 68 65 20 76 61 6c 75 65 20 74 6f  ay">The value to
3ab0: 20 63 6f 6e 76 65 72 74 3c 2f 70 61 72 61 6d 3e   convert</param>
3ac0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
3ad0: 20 6e 61 6d 65 3d 22 6b 69 6e 64 22 3e 54 68 65   name="kind">The
3ae0: 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20 74 6f   DateTimeKind to
3af0: 20 75 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20   use.</param>.. 
3b00: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
3b10: 41 20 2e 4e 45 54 20 44 61 74 65 54 69 6d 65 3c  A .NET DateTime<
3b20: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
3b30: 75 62 6c 69 63 20 73 74 61 74 69 63 20 44 61 74  ublic static Dat
3b40: 65 54 69 6d 65 20 54 6f 44 61 74 65 54 69 6d 65  eTime ToDateTime
3b50: 28 64 6f 75 62 6c 65 20 6a 75 6c 69 61 6e 44 61  (double julianDa
3b60: 79 2c 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20  y, DateTimeKind 
3b70: 6b 69 6e 64 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  kind)..    {..  
3b80: 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 61 74        return Dat
3b90: 65 54 69 6d 65 2e 53 70 65 63 69 66 79 4b 69 6e  eTime.SpecifyKin
3ba0: 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d(..            
3bb0: 44 61 74 65 54 69 6d 65 2e 46 72 6f 6d 4f 41 44  DateTime.FromOAD
3bc0: 61 74 65 28 6a 75 6c 69 61 6e 44 61 79 20 2d 20  ate(julianDay - 
3bd0: 4f 6c 65 41 75 74 6f 6d 61 74 69 6f 6e 45 70 6f  OleAutomationEpo
3be0: 63 68 41 73 4a 75 6c 69 61 6e 44 61 79 29 2c 20  chAsJulianDay), 
3bf0: 6b 69 6e 64 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  kind);..    }...
3c00: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
3c10: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76  y>..    /// Conv
3c20: 65 72 74 73 20 61 20 44 61 74 65 54 69 6d 65 20  erts a DateTime 
3c30: 73 74 72 75 63 74 20 74 6f 20 61 20 4a 75 6c 69  struct to a Juli
3c40: 61 6e 44 61 79 20 64 6f 75 62 6c 65 0d 0a 20 20  anDay double..  
3c50: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
3c60: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
3c70: 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 54 68   name="value">Th
3c80: 65 20 44 61 74 65 54 69 6d 65 20 74 6f 20 63 6f  e DateTime to co
3c90: 6e 76 65 72 74 3c 2f 70 61 72 61 6d 3e 0d 0a 20  nvert</param>.. 
3ca0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
3cb0: 54 68 65 20 4a 75 6c 69 61 6e 44 61 79 20 76 61  The JulianDay va
3cc0: 6c 75 65 20 74 68 65 20 44 61 74 65 74 69 6d 65  lue the Datetime
3cd0: 20 72 65 70 72 65 73 65 6e 74 73 3c 2f 72 65 74   represents</ret
3ce0: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69  urns>..    publi
3cf0: 63 20 73 74 61 74 69 63 20 64 6f 75 62 6c 65 20  c static double 
3d00: 54 6f 4a 75 6c 69 61 6e 44 61 79 28 44 61 74 65  ToJulianDay(Date
3d10: 54 69 6d 65 20 76 61 6c 75 65 29 0d 0a 20 20 20  Time value)..   
3d20: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
3d30: 20 76 61 6c 75 65 2e 54 6f 4f 41 44 61 74 65 28   value.ToOADate(
3d40: 29 20 2b 20 4f 6c 65 41 75 74 6f 6d 61 74 69 6f  ) + OleAutomatio
3d50: 6e 45 70 6f 63 68 41 73 4a 75 6c 69 61 6e 44 61  nEpochAsJulianDa
3d60: 79 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  y;..    }....   
3d70: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
3d80: 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73      /// Converts
3d90: 20 61 20 44 61 74 65 54 69 6d 65 20 73 74 72 75   a DateTime stru
3da0: 63 74 20 74 6f 20 74 68 65 20 77 68 6f 6c 65 20  ct to the whole 
3db0: 6e 75 6d 62 65 72 20 6f 66 20 73 65 63 6f 6e 64  number of second
3dc0: 73 20 73 69 6e 63 65 20 74 68 65 0d 0a 20 20 20  s since the..   
3dd0: 20 2f 2f 2f 20 55 6e 69 78 20 65 70 6f 63 68 2e   /// Unix epoch.
3de0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
3df0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
3e00: 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65  aram name="value
3e10: 22 3e 54 68 65 20 44 61 74 65 54 69 6d 65 20 74  ">The DateTime t
3e20: 6f 20 63 6f 6e 76 65 72 74 3c 2f 70 61 72 61 6d  o convert</param
3e30: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
3e40: 72 6e 73 3e 54 68 65 20 77 68 6f 6c 65 20 6e 75  rns>The whole nu
3e50: 6d 62 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20  mber of seconds 
3e60: 73 69 6e 63 65 20 74 68 65 20 55 6e 69 78 20 65  since the Unix e
3e70: 70 6f 63 68 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  poch</returns>..
3e80: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
3e90: 63 20 6c 6f 6e 67 20 54 6f 55 6e 69 78 45 70 6f  c long ToUnixEpo
3ea0: 63 68 28 44 61 74 65 54 69 6d 65 20 76 61 6c 75  ch(DateTime valu
3eb0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
3ec0: 20 20 20 72 65 74 75 72 6e 20 28 76 61 6c 75 65     return (value
3ed0: 2e 53 75 62 74 72 61 63 74 28 55 6e 69 78 45 70  .Subtract(UnixEp
3ee0: 6f 63 68 29 2e 54 69 63 6b 73 20 2f 20 54 69 6d  och).Ticks / Tim
3ef0: 65 53 70 61 6e 2e 54 69 63 6b 73 50 65 72 53 65  eSpan.TicksPerSe
3f00: 63 6f 6e 64 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  cond);..    }...
3f10: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
3f20: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
3f30: 72 6e 73 20 74 68 65 20 64 65 66 61 75 6c 74 20  rns the default 
3f40: 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 20  DateTime format 
3f50: 73 74 72 69 6e 67 20 74 6f 20 75 73 65 20 66 6f  string to use fo
3f60: 72 20 74 68 65 20 73 70 65 63 69 66 69 65 64 0d  r the specified.
3f70: 0a 20 20 20 20 2f 2f 2f 20 44 61 74 65 54 69 6d  .    /// DateTim
3f80: 65 4b 69 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  eKind...    /// 
3f90: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
3fa0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
3fb0: 22 6b 69 6e 64 22 3e 54 68 65 20 44 61 74 65 54  "kind">The DateT
3fc0: 69 6d 65 4b 69 6e 64 20 74 6f 20 75 73 65 2e 3c  imeKind to use.<
3fd0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
3fe0: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
3ff0: 2f 2f 2f 20 54 68 65 20 64 65 66 61 75 6c 74 20  /// The default 
4000: 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 20  DateTime format 
4010: 73 74 72 69 6e 67 20 74 6f 20 75 73 65 20 66 6f  string to use fo
4020: 72 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  r the specified 
4030: 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 0d 0a 20  DateTimeKind... 
4040: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
4050: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  >..    private s
4060: 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
4070: 44 61 74 65 54 69 6d 65 4b 69 6e 64 46 6f 72 6d  DateTimeKindForm
4080: 61 74 28 44 61 74 65 54 69 6d 65 4b 69 6e 64 20  at(DateTimeKind 
4090: 6b 69 6e 64 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  kind)..    {..  
40a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 6b 69        return (ki
40b0: 6e 64 20 3d 3d 20 44 61 74 65 54 69 6d 65 4b 69  nd == DateTimeKi
40c0: 6e 64 2e 55 74 63 29 20 3f 20 5f 64 61 74 65 74  nd.Utc) ? _datet
40d0: 69 6d 65 46 6f 72 6d 61 74 55 74 63 20 3a 20 5f  imeFormatUtc : _
40e0: 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 4c 6f  datetimeFormatLo
40f0: 63 61 6c 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  cal;..    }.... 
4100: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
4110: 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72  ..    /// Conver
4120: 74 73 20 61 20 44 61 74 65 54 69 6d 65 20 74 6f  ts a DateTime to
4130: 20 61 20 73 74 72 69 6e 67 20 76 61 6c 75 65 2c   a string value,
4140: 20 75 73 69 6e 67 20 74 68 65 20 63 75 72 72 65   using the curre
4150: 6e 74 20 44 61 74 65 54 69 6d 65 46 6f 72 6d 61  nt DateTimeForma
4160: 74 20 73 70 65 63 69 66 69 65 64 20 66 6f 72 20  t specified for 
4170: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77  the connection w
4180: 68 65 6e 20 69 74 20 77 61 73 20 6f 70 65 6e 65  hen it was opene
4190: 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  d...    /// </su
41a0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
41b0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 61 74  <param name="dat
41c0: 65 56 61 6c 75 65 22 3e 54 68 65 20 44 61 74 65  eValue">The Date
41d0: 54 69 6d 65 20 76 61 6c 75 65 20 74 6f 20 63 6f  Time value to co
41e0: 6e 76 65 72 74 3c 2f 70 61 72 61 6d 3e 0d 0a 20  nvert</param>.. 
41f0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
4200: 45 69 74 68 65 72 20 61 20 73 74 72 69 6e 67 20  Either a string 
4210: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6c  containing the l
4220: 6f 6e 67 20 69 6e 74 65 67 65 72 20 6e 75 6d 62  ong integer numb
4230: 65 72 20 6f 66 20 31 30 30 2d 6e 61 6e 6f 73 65  er of 100-nanose
4240: 63 6f 6e 64 20 75 6e 69 74 73 20 73 69 6e 63 65  cond units since
4250: 20 53 79 73 74 65 6d 2e 44 61 74 65 54 69 6d 65   System.DateTime
4260: 2e 4d 69 6e 56 61 6c 75 65 2c 20 61 0d 0a 20 20  .MinValue, a..  
4270: 20 20 2f 2f 2f 20 4a 75 6c 69 61 6e 20 64 61 79    /// Julian day
4280: 20 64 6f 75 62 6c 65 2c 20 61 6e 20 69 6e 74 65   double, an inte
4290: 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 73 65  ger number of se
42a0: 63 6f 6e 64 73 20 73 69 6e 63 65 20 74 68 65 20  conds since the 
42b0: 55 6e 69 78 20 65 70 6f 63 68 2c 20 61 20 63 75  Unix epoch, a cu
42c0: 6c 74 75 72 65 2d 69 6e 64 65 70 65 6e 64 65 6e  lture-independen
42d0: 74 20 66 6f 72 6d 61 74 74 65 64 20 64 61 74 65  t formatted date
42e0: 20 61 6e 64 20 74 69 6d 65 0d 0a 20 20 20 20 2f   and time..    /
42f0: 2f 2f 20 73 74 72 69 6e 67 2c 20 61 20 66 6f 72  // string, a for
4300: 6d 61 74 74 65 64 20 64 61 74 65 20 61 6e 64 20  matted date and 
4310: 74 69 6d 65 20 73 74 72 69 6e 67 20 69 6e 20 74  time string in t
4320: 68 65 20 63 75 72 72 65 6e 74 20 63 75 6c 74 75  he current cultu
4330: 72 65 2c 20 6f 72 20 61 6e 20 49 53 4f 38 36 30  re, or an ISO860
4340: 31 2d 66 6f 72 6d 61 74 20 64 61 74 65 2f 74 69  1-format date/ti
4350: 6d 65 20 73 74 72 69 6e 67 2e 3c 2f 72 65 74 75  me string.</retu
4360: 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  rns>..    public
4370: 20 73 74 72 69 6e 67 20 54 6f 53 74 72 69 6e 67   string ToString
4380: 28 44 61 74 65 54 69 6d 65 20 64 61 74 65 56 61  (DateTime dateVa
4390: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
43a0: 20 20 20 20 20 73 77 69 74 63 68 20 28 5f 64 61       switch (_da
43b0: 74 65 74 69 6d 65 46 6f 72 6d 61 74 29 0d 0a 20  tetimeFormat).. 
43c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
43d0: 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74        case SQLit
43e0: 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 54 69 63  eDateFormats.Tic
43f0: 6b 73 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ks:..           
4400: 20 20 20 20 20 72 65 74 75 72 6e 20 64 61 74 65       return date
4410: 56 61 6c 75 65 2e 54 69 63 6b 73 2e 54 6f 53 74  Value.Ticks.ToSt
4420: 72 69 6e 67 28 43 75 6c 74 75 72 65 49 6e 66 6f  ring(CultureInfo
4430: 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72  .InvariantCultur
4440: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
4450: 20 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65   case SQLiteDate
4460: 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44 61  Formats.JulianDa
4470: 79 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y:..            
4480: 20 20 20 20 72 65 74 75 72 6e 20 54 6f 4a 75 6c      return ToJul
4490: 69 61 6e 44 61 79 28 64 61 74 65 56 61 6c 75 65  ianDay(dateValue
44a0: 29 2e 54 6f 53 74 72 69 6e 67 28 43 75 6c 74 75  ).ToString(Cultu
44b0: 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74  reInfo.Invariant
44c0: 43 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20 20  Culture);..     
44d0: 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 69         case SQLi
44e0: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 55 6e  teDateFormats.Un
44f0: 69 78 45 70 6f 63 68 3a 0d 0a 20 20 20 20 20 20  ixEpoch:..      
4500: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4510: 20 28 28 6c 6f 6e 67 29 28 64 61 74 65 56 61 6c   ((long)(dateVal
4520: 75 65 2e 53 75 62 74 72 61 63 74 28 55 6e 69 78  ue.Subtract(Unix
4530: 45 70 6f 63 68 29 2e 54 69 63 6b 73 20 2f 20 54  Epoch).Ticks / T
4540: 69 6d 65 53 70 61 6e 2e 54 69 63 6b 73 50 65 72  imeSpan.TicksPer
4550: 53 65 63 6f 6e 64 29 29 2e 54 6f 53 74 72 69 6e  Second)).ToStrin
4560: 67 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  g();..          
4570: 20 20 63 61 73 65 20 53 51 4c 69 74 65 44 61 74    case SQLiteDat
4580: 65 46 6f 72 6d 61 74 73 2e 49 6e 76 61 72 69 61  eFormats.Invaria
4590: 6e 74 43 75 6c 74 75 72 65 3a 0d 0a 20 20 20 20  ntCulture:..    
45a0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
45b0: 72 6e 20 64 61 74 65 56 61 6c 75 65 2e 54 6f 53  rn dateValue.ToS
45c0: 74 72 69 6e 67 28 46 75 6c 6c 46 6f 72 6d 61 74  tring(FullFormat
45d0: 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e  , CultureInfo.In
45e0: 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29 3b  variantCulture);
45f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
4600: 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72  se SQLiteDateFor
4610: 6d 61 74 73 2e 43 75 72 72 65 6e 74 43 75 6c 74  mats.CurrentCult
4620: 75 72 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ure:..          
4630: 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 61 74        return dat
4640: 65 56 61 6c 75 65 2e 54 6f 53 74 72 69 6e 67 28  eValue.ToString(
4650: 46 75 6c 6c 46 6f 72 6d 61 74 2c 20 43 75 6c 74  FullFormat, Cult
4660: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
4670: 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20 20 20  ulture);..      
4680: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a        default:..
4690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46a0: 72 65 74 75 72 6e 20 28 64 61 74 65 56 61 6c 75  return (dateValu
46b0: 65 2e 4b 69 6e 64 20 3d 3d 20 44 61 74 65 54 69  e.Kind == DateTi
46c0: 6d 65 4b 69 6e 64 2e 55 6e 73 70 65 63 69 66 69  meKind.Unspecifi
46d0: 65 64 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20  ed) ?..         
46e0: 20 20 20 20 20 20 20 20 20 20 20 44 61 74 65 54             DateT
46f0: 69 6d 65 2e 53 70 65 63 69 66 79 4b 69 6e 64 28  ime.SpecifyKind(
4700: 64 61 74 65 56 61 6c 75 65 2c 20 5f 64 61 74 65  dateValue, _date
4710: 74 69 6d 65 4b 69 6e 64 29 2e 54 6f 53 74 72 69  timeKind).ToStri
4720: 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng(..           
4730: 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74               Get
4740: 44 61 74 65 54 69 6d 65 4b 69 6e 64 46 6f 72 6d  DateTimeKindForm
4750: 61 74 28 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64  at(_datetimeKind
4760: 29 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49  ), CultureInfo.I
4770: 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29  nvariantCulture)
4780: 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   :..            
4790: 20 20 20 20 20 20 20 20 64 61 74 65 56 61 6c 75          dateValu
47a0: 65 2e 54 6f 53 74 72 69 6e 67 28 47 65 74 44 61  e.ToString(GetDa
47b0: 74 65 54 69 6d 65 4b 69 6e 64 46 6f 72 6d 61 74  teTimeKindFormat
47c0: 28 64 61 74 65 56 61 6c 75 65 2e 4b 69 6e 64 29  (dateValue.Kind)
47d0: 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e  , CultureInfo.In
47e0: 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29 3b  variantCulture);
47f0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
4800: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
4810: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
4820: 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69   Internal functi
4830: 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20 61 20  on to convert a 
4840: 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 49 6e  UTF-8 encoded In
4850: 74 50 74 72 20 6f 66 20 74 68 65 20 73 70 65 63  tPtr of the spec
4860: 69 66 69 65 64 20 6c 65 6e 67 74 68 20 74 6f 20  ified length to 
4870: 61 20 44 61 74 65 54 69 6d 65 2e 0d 0a 20 20 20  a DateTime...   
4880: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
4890: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b  .    /// <remark
48a0: 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  s>..    /// This
48b0: 20 69 73 20 61 20 63 6f 6e 76 65 6e 69 65 6e 63   is a convenienc
48c0: 65 20 66 75 6e 63 74 69 6f 6e 2c 20 77 68 69 63  e function, whic
48d0: 68 20 66 69 72 73 74 20 63 61 6c 6c 73 20 54 6f  h first calls To
48e0: 53 74 72 69 6e 67 28 29 20 6f 6e 20 74 68 65 20  String() on the 
48f0: 49 6e 74 50 74 72 20 74 6f 20 63 6f 6e 76 65 72  IntPtr to conver
4900: 74 20 69 74 20 74 6f 20 61 20 73 74 72 69 6e 67  t it to a string
4910: 2c 20 74 68 65 6e 20 63 61 6c 6c 73 0d 0a 20 20  , then calls..  
4920: 20 20 2f 2f 2f 20 54 6f 44 61 74 65 54 69 6d 65    /// ToDateTime
4930: 28 29 20 6f 6e 20 74 68 65 20 73 74 72 69 6e 67  () on the string
4940: 20 74 6f 20 72 65 74 75 72 6e 20 61 20 44 61 74   to return a Dat
4950: 65 54 69 6d 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  eTime...    /// 
4960: 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20  </remarks>..    
4970: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
4980: 22 70 74 72 22 3e 41 20 70 6f 69 6e 74 65 72 20  "ptr">A pointer 
4990: 74 6f 20 74 68 65 20 55 54 46 2d 38 20 65 6e 63  to the UTF-8 enc
49a0: 6f 64 65 64 20 73 74 72 69 6e 67 3c 2f 70 61 72  oded string</par
49b0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
49c0: 72 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e 22 3e 54  ram name="len">T
49d0: 68 65 20 6c 65 6e 67 74 68 20 69 6e 20 62 79 74  he length in byt
49e0: 65 73 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  es of the string
49f0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
4a00: 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 70  / <returns>The p
4a10: 61 72 73 65 64 20 44 61 74 65 54 69 6d 65 20 76  arsed DateTime v
4a20: 61 6c 75 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  alue</returns>..
4a30: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 44 61 74      internal Dat
4a40: 65 54 69 6d 65 20 54 6f 44 61 74 65 54 69 6d 65  eTime ToDateTime
4a50: 28 49 6e 74 50 74 72 20 70 74 72 2c 20 69 6e 74  (IntPtr ptr, int
4a60: 20 6c 65 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20 20   len)..    {..  
4a70: 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74      return ToDat
4a80: 65 54 69 6d 65 28 54 6f 53 74 72 69 6e 67 28 70  eTime(ToString(p
4a90: 74 72 2c 20 6c 65 6e 29 29 3b 0d 0a 20 20 20 20  tr, len));..    
4aa0: 7d 0d 0a 0d 0a 20 20 20 20 23 65 6e 64 72 65 67  }....    #endreg
4ab0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ion....    /// <
4ac0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
4ad0: 2f 20 53 6d 61 72 74 20 6d 65 74 68 6f 64 20 6f  / Smart method o
4ae0: 66 20 73 70 6c 69 74 74 69 6e 67 20 61 20 73 74  f splitting a st
4af0: 72 69 6e 67 2e 20 20 53 6b 69 70 73 20 71 75 6f  ring.  Skips quo
4b00: 74 65 64 20 65 6c 65 6d 65 6e 74 73 2c 20 72 65  ted elements, re
4b10: 6d 6f 76 65 73 20 74 68 65 20 71 75 6f 74 65 73  moves the quotes
4b20: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
4b30: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
4b40: 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f  remarks>..    //
4b50: 2f 20 54 68 69 73 20 73 70 6c 69 74 20 66 75 6e  / This split fun
4b60: 63 74 69 6f 6e 20 77 6f 72 6b 73 20 73 6f 6d 65  ction works some
4b70: 77 68 61 74 20 6c 69 6b 65 20 74 68 65 20 53 74  what like the St
4b80: 72 69 6e 67 2e 53 70 6c 69 74 28 29 20 66 75 6e  ring.Split() fun
4b90: 63 74 69 6f 6e 20 69 6e 20 74 68 61 74 20 69 74  ction in that it
4ba0: 20 62 72 65 61 6b 73 20 61 70 61 72 74 20 61 20   breaks apart a 
4bb0: 73 74 72 69 6e 67 20 69 6e 74 6f 0d 0a 20 20 20  string into..   
4bc0: 20 2f 2f 2f 20 70 69 65 63 65 73 20 61 6e 64 20   /// pieces and 
4bd0: 72 65 74 75 72 6e 73 20 74 68 65 20 70 69 65 63  returns the piec
4be0: 65 73 20 61 73 20 61 6e 20 61 72 72 61 79 2e 20  es as an array. 
4bf0: 20 54 68 65 20 70 72 69 6d 61 72 79 20 64 69 66   The primary dif
4c00: 66 65 72 65 6e 63 65 73 20 61 72 65 3a 0d 0a 20  ferences are:.. 
4c10: 20 20 20 2f 2f 2f 20 3c 6c 69 73 74 20 74 79 70     /// <list typ
4c20: 65 3d 22 62 75 6c 6c 65 74 22 3e 0d 0a 20 20 20  e="bullet">..   
4c30: 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63   /// <item><desc
4c40: 72 69 70 74 69 6f 6e 3e 4f 6e 6c 79 20 6f 6e 65  ription>Only one
4c50: 20 63 68 61 72 61 63 74 65 72 20 63 61 6e 20 62   character can b
4c60: 65 20 70 72 6f 76 69 64 65 64 20 61 73 20 61 20  e provided as a 
4c70: 73 65 70 61 72 61 74 6f 72 20 63 68 61 72 61 63  separator charac
4c80: 74 65 72 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e  ter</description
4c90: 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f  ></item>..    //
4ca0: 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70  / <item><descrip
4cb0: 74 69 6f 6e 3e 51 75 6f 74 65 64 20 74 65 78 74  tion>Quoted text
4cc0: 20 69 6e 73 69 64 65 20 74 68 65 20 73 74 72 69   inside the stri
4cd0: 6e 67 20 69 73 20 73 6b 69 70 70 65 64 20 6f 76  ng is skipped ov
4ce0: 65 72 20 77 68 65 6e 20 73 65 61 72 63 68 69 6e  er when searchin
4cf0: 67 20 66 6f 72 20 74 68 65 20 73 65 70 61 72 61  g for the separa
4d00: 74 6f 72 2c 20 61 6e 64 20 74 68 65 20 71 75 6f  tor, and the quo
4d10: 74 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64 2e  tes are removed.
4d20: 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f  </description></
4d30: 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  item>..    /// <
4d40: 2f 6c 69 73 74 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /list>..    /// 
4d50: 54 68 75 73 2c 20 69 66 20 73 70 6c 69 74 74 69  Thus, if splitti
4d60: 6e 67 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ng the following
4d70: 20 73 74 72 69 6e 67 20 6c 6f 6f 6b 69 6e 67 20   string looking 
4d80: 66 6f 72 20 61 20 63 6f 6d 6d 61 3a 3c 62 72 2f  for a comma:<br/
4d90: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4f 6e 65 2c 54  >..    /// One,T
4da0: 77 6f 2c 20 22 54 68 72 65 65 2c 20 46 6f 75 72  wo, "Three, Four
4db0: 22 2c 20 46 69 76 65 3c 62 72 2f 3e 0d 0a 20 20  ", Five<br/>..  
4dc0: 20 20 2f 2f 2f 20 3c 62 72 2f 3e 0d 0a 20 20 20    /// <br/>..   
4dd0: 20 2f 2f 2f 20 54 68 65 20 72 65 73 75 6c 74 69   /// The resulti
4de0: 6e 67 20 61 72 72 61 79 20 77 6f 75 6c 64 20 63  ng array would c
4df0: 6f 6e 74 61 69 6e 3c 62 72 2f 3e 0d 0a 20 20 20  ontain<br/>..   
4e00: 20 2f 2f 2f 20 5b 30 5d 20 4f 6e 65 3c 62 72 2f   /// [0] One<br/
4e10: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 5b 31 5d 20 54  >..    /// [1] T
4e20: 77 6f 3c 62 72 2f 3e 0d 0a 20 20 20 20 2f 2f 2f  wo<br/>..    ///
4e30: 20 5b 32 5d 20 54 68 72 65 65 2c 20 46 6f 75 72   [2] Three, Four
4e40: 3c 62 72 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 5b  <br/>..    /// [
4e50: 33 5d 20 46 69 76 65 3c 62 72 2f 3e 0d 0a 20 20  3] Five<br/>..  
4e60: 20 20 2f 2f 2f 20 3c 62 72 2f 3e 0d 0a 20 20 20    /// <br/>..   
4e70: 20 2f 2f 2f 20 4e 6f 74 65 20 74 68 61 74 20 74   /// Note that t
4e80: 68 65 20 6c 65 61 64 69 6e 67 20 61 6e 64 20 74  he leading and t
4e90: 72 61 69 6c 69 6e 67 20 73 70 61 63 65 73 20 77  railing spaces w
4ea0: 65 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d  ere removed from
4eb0: 20 65 61 63 68 20 69 74 65 6d 20 64 75 72 69 6e   each item durin
4ec0: 67 20 74 68 65 20 73 70 6c 69 74 2e 0d 0a 20 20  g the split...  
4ed0: 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e    /// </remarks>
4ee0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
4ef0: 20 6e 61 6d 65 3d 22 73 6f 75 72 63 65 22 3e 53   name="source">S
4f00: 6f 75 72 63 65 20 73 74 72 69 6e 67 20 74 6f 20  ource string to 
4f10: 73 70 6c 69 74 20 61 70 61 72 74 3c 2f 70 61 72  split apart</par
4f20: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
4f30: 72 61 6d 20 6e 61 6d 65 3d 22 73 65 70 61 72 61  ram name="separa
4f40: 74 6f 72 22 3e 53 65 70 61 72 61 74 6f 72 20 63  tor">Separator c
4f50: 68 61 72 61 63 74 65 72 3c 2f 70 61 72 61 6d 3e  haracter</param>
4f60: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
4f70: 6e 73 3e 41 20 73 74 72 69 6e 67 20 61 72 72 61  ns>A string arra
4f80: 79 20 6f 66 20 74 68 65 20 73 70 6c 69 74 20 75  y of the split u
4f90: 70 20 65 6c 65 6d 65 6e 74 73 3c 2f 72 65 74 75  p elements</retu
4fa0: 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  rns>..    public
4fb0: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 5b 5d   static string[]
4fc0: 20 53 70 6c 69 74 28 73 74 72 69 6e 67 20 73 6f   Split(string so
4fd0: 75 72 63 65 2c 20 63 68 61 72 20 73 65 70 61 72  urce, char separ
4fe0: 61 74 6f 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ator)..    {..  
4ff0: 20 20 20 20 63 68 61 72 5b 5d 20 74 6f 6b 73 20      char[] toks 
5000: 3d 20 6e 65 77 20 63 68 61 72 5b 32 5d 20 7b 20  = new char[2] { 
5010: 27 5c 22 27 2c 20 73 65 70 61 72 61 74 6f 72 20  '\"', separator 
5020: 7d 3b 0d 0a 20 20 20 20 20 20 63 68 61 72 5b 5d  };..      char[]
5030: 20 71 75 6f 74 20 3d 20 6e 65 77 20 63 68 61 72   quot = new char
5040: 5b 31 5d 20 7b 20 27 5c 22 27 20 7d 3b 0d 0a 20  [1] { '\"' };.. 
5050: 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0d       int n = 0;.
5060: 0a 20 20 20 20 20 20 4c 69 73 74 3c 73 74 72 69  .      List<stri
5070: 6e 67 3e 20 6c 73 20 3d 20 6e 65 77 20 4c 69 73  ng> ls = new Lis
5080: 74 3c 73 74 72 69 6e 67 3e 28 29 3b 0d 0a 20 20  t<string>();..  
5090: 20 20 20 20 73 74 72 69 6e 67 20 73 3b 0d 0a 0d      string s;...
50a0: 0a 20 20 20 20 20 20 77 68 69 6c 65 20 28 73 6f  .      while (so
50b0: 75 72 63 65 2e 4c 65 6e 67 74 68 20 3e 20 30 29  urce.Length > 0)
50c0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
50d0: 20 20 20 6e 20 3d 20 73 6f 75 72 63 65 2e 49 6e     n = source.In
50e0: 64 65 78 4f 66 41 6e 79 28 74 6f 6b 73 2c 20 6e  dexOfAny(toks, n
50f0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
5100: 6e 20 3d 3d 20 2d 31 29 20 62 72 65 61 6b 3b 0d  n == -1) break;.
5110: 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 6f 75  .        if (sou
5120: 72 63 65 5b 6e 5d 20 3d 3d 20 74 6f 6b 73 5b 30  rce[n] == toks[0
5130: 5d 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ])..        {.. 
5140: 20 20 20 20 20 20 20 20 20 2f 2f 73 6f 75 72 63           //sourc
5150: 65 20 3d 20 73 6f 75 72 63 65 2e 52 65 6d 6f 76  e = source.Remov
5160: 65 28 6e 2c 20 31 29 3b 0d 0a 20 20 20 20 20 20  e(n, 1);..      
5170: 20 20 20 20 6e 20 3d 20 73 6f 75 72 63 65 2e 49      n = source.I
5180: 6e 64 65 78 4f 66 41 6e 79 28 71 75 6f 74 2c 20  ndexOfAny(quot, 
5190: 6e 20 2b 20 31 29 3b 0d 0a 20 20 20 20 20 20 20  n + 1);..       
51a0: 20 20 20 69 66 20 28 6e 20 3d 3d 20 2d 31 29 0d     if (n == -1).
51b0: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
51c0: 20 20 20 20 20 20 20 20 20 20 2f 2f 73 6f 75 72            //sour
51d0: 63 65 20 3d 20 22 5c 22 22 20 2b 20 73 6f 75 72  ce = "\"" + sour
51e0: 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce;..           
51f0: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
5200: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
5210: 6e 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n++;..          
5220: 2f 2f 73 6f 75 72 63 65 20 3d 20 73 6f 75 72 63  //source = sourc
5230: 65 2e 52 65 6d 6f 76 65 28 6e 2c 20 31 29 3b 0d  e.Remove(n, 1);.
5240: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
5250: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
5260: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73    {..          s
5270: 20 3d 20 73 6f 75 72 63 65 2e 53 75 62 73 74 72   = source.Substr
5280: 69 6e 67 28 30 2c 20 6e 29 2e 54 72 69 6d 28 29  ing(0, n).Trim()
5290: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ;..          if 
52a0: 28 73 2e 4c 65 6e 67 74 68 20 3e 20 31 20 26 26  (s.Length > 1 &&
52b0: 20 73 5b 30 5d 20 3d 3d 20 71 75 6f 74 5b 30 5d   s[0] == quot[0]
52c0: 20 26 26 20 73 5b 73 2e 4c 65 6e 67 74 68 20 2d   && s[s.Length -
52d0: 20 31 5d 20 3d 3d 20 73 5b 30 5d 29 0d 0a 20 20   1] == s[0])..  
52e0: 20 20 20 20 20 20 20 20 20 20 73 20 3d 20 73 2e            s = s.
52f0: 53 75 62 73 74 72 69 6e 67 28 31 2c 20 73 2e 4c  Substring(1, s.L
5300: 65 6e 67 74 68 20 2d 20 32 29 3b 0d 0a 0d 0a 20  ength - 2);.... 
5310: 20 20 20 20 20 20 20 20 20 73 6f 75 72 63 65 20           source 
5320: 3d 20 73 6f 75 72 63 65 2e 53 75 62 73 74 72 69  = source.Substri
5330: 6e 67 28 6e 20 2b 20 31 29 2e 54 72 69 6d 28 29  ng(n + 1).Trim()
5340: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ;..          if 
5350: 28 73 2e 4c 65 6e 67 74 68 20 3e 20 30 29 20 6c  (s.Length > 0) l
5360: 73 2e 41 64 64 28 73 29 3b 0d 0a 20 20 20 20 20  s.Add(s);..     
5370: 20 20 20 20 20 6e 20 3d 20 30 3b 0d 0a 20 20 20       n = 0;..   
5380: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
5390: 0a 20 20 20 20 20 20 69 66 20 28 73 6f 75 72 63  .      if (sourc
53a0: 65 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20  e.Length > 0).. 
53b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
53c0: 73 20 3d 20 73 6f 75 72 63 65 2e 54 72 69 6d 28  s = source.Trim(
53d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
53e0: 73 2e 4c 65 6e 67 74 68 20 3e 20 31 20 26 26 20  s.Length > 1 && 
53f0: 73 5b 30 5d 20 3d 3d 20 71 75 6f 74 5b 30 5d 20  s[0] == quot[0] 
5400: 26 26 20 73 5b 73 2e 4c 65 6e 67 74 68 20 2d 20  && s[s.Length - 
5410: 31 5d 20 3d 3d 20 73 5b 30 5d 29 0d 0a 20 20 20  1] == s[0])..   
5420: 20 20 20 20 20 20 20 73 20 3d 20 73 2e 53 75 62         s = s.Sub
5430: 73 74 72 69 6e 67 28 31 2c 20 73 2e 4c 65 6e 67  string(1, s.Leng
5440: 74 68 20 2d 20 32 29 3b 0d 0a 20 20 20 20 20 20  th - 2);..      
5450: 20 20 6c 73 2e 41 64 64 28 73 29 3b 0d 0a 20 20    ls.Add(s);..  
5460: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73      }....      s
5470: 74 72 69 6e 67 5b 5d 20 61 72 20 3d 20 6e 65 77  tring[] ar = new
5480: 20 73 74 72 69 6e 67 5b 6c 73 2e 43 6f 75 6e 74   string[ls.Count
5490: 5d 3b 0d 0a 20 20 20 20 20 20 6c 73 2e 43 6f 70  ];..      ls.Cop
54a0: 79 54 6f 28 61 72 2c 20 30 29 3b 0d 0a 0d 0a 20  yTo(ar, 0);.... 
54b0: 20 20 20 20 20 72 65 74 75 72 6e 20 61 72 3b 0d       return ar;.
54c0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
54d0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
54e0: 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 20 61 20 76   /// Convert a v
54f0: 61 6c 75 65 20 74 6f 20 74 72 75 65 20 6f 72 20  alue to true or 
5500: 66 61 6c 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  false...    /// 
5510: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
5520: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
5530: 22 73 6f 75 72 63 65 22 3e 41 20 73 74 72 69 6e  "source">A strin
5540: 67 20 6f 72 20 6e 75 6d 62 65 72 20 72 65 70 72  g or number repr
5550: 65 73 65 6e 74 69 6e 67 20 74 72 75 65 20 6f 72  esenting true or
5560: 20 66 61 6c 73 65 3c 2f 70 61 72 61 6d 3e 0d 0a   false</param>..
5570: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
5580: 3e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  ></returns>..   
5590: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 62   public static b
55a0: 6f 6f 6c 20 54 6f 42 6f 6f 6c 65 61 6e 28 6f 62  ool ToBoolean(ob
55b0: 6a 65 63 74 20 73 6f 75 72 63 65 29 0d 0a 20 20  ject source)..  
55c0: 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 73    {..      if (s
55d0: 6f 75 72 63 65 20 69 73 20 62 6f 6f 6c 29 20 72  ource is bool) r
55e0: 65 74 75 72 6e 20 28 62 6f 6f 6c 29 73 6f 75 72  eturn (bool)sour
55f0: 63 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74  ce;....      ret
5600: 75 72 6e 20 54 6f 42 6f 6f 6c 65 61 6e 28 73 6f  urn ToBoolean(so
5610: 75 72 63 65 2e 54 6f 53 74 72 69 6e 67 28 29 29  urce.ToString())
5620: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
5630: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
5640: 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 20 61     /// Convert a
5650: 20 73 74 72 69 6e 67 20 74 6f 20 74 72 75 65 20   string to true 
5660: 6f 72 20 66 61 6c 73 65 2e 0d 0a 20 20 20 20 2f  or false...    /
5670: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
5680: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
5690: 6d 65 3d 22 73 6f 75 72 63 65 22 3e 41 20 73 74  me="source">A st
56a0: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 69 6e  ring representin
56b0: 67 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 3c  g true or false<
56c0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
56d0: 20 3c 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75   <returns></retu
56e0: 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  rns>..    /// <r
56f0: 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f  emarks>..    ///
5700: 20 22 79 65 73 22 2c 20 22 6e 6f 22 2c 20 22 79   "yes", "no", "y
5710: 22 2c 20 22 6e 22 2c 20 22 30 22 2c 20 22 31 22  ", "n", "0", "1"
5720: 2c 20 22 6f 6e 22 2c 20 22 6f 66 66 22 20 61 73  , "on", "off" as
5730: 20 77 65 6c 6c 20 61 73 20 42 6f 6f 6c 65 61 6e   well as Boolean
5740: 2e 46 61 6c 73 65 53 74 72 69 6e 67 20 61 6e 64  .FalseString and
5750: 20 42 6f 6f 6c 65 61 6e 2e 54 72 75 65 53 74 72   Boolean.TrueStr
5760: 69 6e 67 20 77 69 6c 6c 20 61 6c 6c 20 62 65 0d  ing will all be.
5770: 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 76 65 72 74  .    /// convert
5780: 65 64 20 74 6f 20 61 20 70 72 6f 70 65 72 20 62  ed to a proper b
5790: 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 0d 0a 20  oolean value... 
57a0: 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73     /// </remarks
57b0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74  >..    public st
57c0: 61 74 69 63 20 62 6f 6f 6c 20 54 6f 42 6f 6f 6c  atic bool ToBool
57d0: 65 61 6e 28 73 74 72 69 6e 67 20 73 6f 75 72 63  ean(string sourc
57e0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
57f0: 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70   if (String.Comp
5800: 61 72 65 28 73 6f 75 72 63 65 2c 20 62 6f 6f 6c  are(source, bool
5810: 2e 54 72 75 65 53 74 72 69 6e 67 2c 20 53 74 72  .TrueString, Str
5820: 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
5830: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
5840: 20 3d 3d 20 30 29 20 72 65 74 75 72 6e 20 74 72   == 0) return tr
5850: 75 65 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 20  ue;..      else 
5860: 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61  if (String.Compa
5870: 72 65 28 73 6f 75 72 63 65 2c 20 62 6f 6f 6c 2e  re(source, bool.
5880: 46 61 6c 73 65 53 74 72 69 6e 67 2c 20 53 74 72  FalseString, Str
5890: 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
58a0: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
58b0: 20 3d 3d 20 30 29 20 72 65 74 75 72 6e 20 66 61   == 0) return fa
58c0: 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77  lse;....      sw
58d0: 69 74 63 68 28 73 6f 75 72 63 65 2e 54 6f 4c 6f  itch(source.ToLo
58e0: 77 65 72 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e  wer(CultureInfo.
58f0: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
5900: 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  ))..      {..   
5910: 20 20 20 20 20 63 61 73 65 20 22 79 65 73 22 3a       case "yes":
5920: 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 22  ..        case "
5930: 79 22 3a 0d 0a 20 20 20 20 20 20 20 20 63 61 73  y":..        cas
5940: 65 20 22 31 22 3a 0d 0a 20 20 20 20 20 20 20 20  e "1":..        
5950: 63 61 73 65 20 22 6f 6e 22 3a 0d 0a 20 20 20 20  case "on":..    
5960: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
5970: 65 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65  e;..        case
5980: 20 22 6e 6f 22 3a 0d 0a 20 20 20 20 20 20 20 20   "no":..        
5990: 63 61 73 65 20 22 6e 22 3a 0d 0a 20 20 20 20 20  case "n":..     
59a0: 20 20 20 63 61 73 65 20 22 30 22 3a 0d 0a 20 20     case "0":..  
59b0: 20 20 20 20 20 20 63 61 73 65 20 22 6f 66 66 22        case "off"
59c0: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  :..          ret
59d0: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
59e0: 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20      default:..  
59f0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
5a00: 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74  w ArgumentExcept
5a10: 69 6f 6e 28 22 73 6f 75 72 63 65 22 29 3b 0d 0a  ion("source");..
5a20: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
5a30: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 54 79  ..    #region Ty
5a40: 70 65 20 43 6f 6e 76 65 72 73 69 6f 6e 73 0d 0a  pe Conversions..
5a50: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
5a60: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72  >..    /// Deter
5a70: 6d 69 6e 65 73 20 74 68 65 20 64 61 74 61 20 74  mines the data t
5a80: 79 70 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  ype of a column 
5a90: 69 6e 20 61 20 73 74 61 74 65 6d 65 6e 74 0d 0a  in a statement..
5aa0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
5ab0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
5ac0: 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e 54  am name="stmt">T
5ad0: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20  he statement to 
5ae0: 72 65 74 72 69 65 76 65 20 69 6e 66 6f 72 6d 61  retrieve informa
5af0: 74 69 6f 6e 20 66 6f 72 3c 2f 70 61 72 61 6d 3e  tion for</param>
5b00: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
5b10: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 63 6f   name="i">The co
5b20: 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65  lumn to retrieve
5b30: 20 74 79 70 65 20 69 6e 66 6f 72 6d 61 74 69 6f   type informatio
5b40: 6e 20 6f 6e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  n on</param>..  
5b50: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
5b60: 65 3d 22 74 79 70 22 3e 54 68 65 20 53 51 4c 69  e="typ">The SQLi
5b70: 74 65 54 79 70 65 20 74 6f 20 72 65 63 65 69 76  teType to receiv
5b80: 65 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 66  e the affinity f
5b90: 6f 72 20 74 68 65 20 67 69 76 65 6e 20 63 6f 6c  or the given col
5ba0: 75 6d 6e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  umn</param>..   
5bb0: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
5bc0: 20 76 6f 69 64 20 43 6f 6c 75 6d 6e 54 6f 54 79   void ColumnToTy
5bd0: 70 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  pe(SQLiteStateme
5be0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 2c 20  nt stmt, int i, 
5bf0: 53 51 4c 69 74 65 54 79 70 65 20 74 79 70 29 0d  SQLiteType typ).
5c00: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 74 79  .    {..      ty
5c10: 70 2e 54 79 70 65 20 3d 20 54 79 70 65 4e 61 6d  p.Type = TypeNam
5c20: 65 54 6f 44 62 54 79 70 65 28 73 74 6d 74 2e 5f  eToDbType(stmt._
5c30: 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65 28 73  sql.ColumnType(s
5c40: 74 6d 74 2c 20 69 2c 20 6f 75 74 20 74 79 70 2e  tmt, i, out typ.
5c50: 41 66 66 69 6e 69 74 79 29 29 3b 0d 0a 20 20 20  Affinity));..   
5c60: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
5c70: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
5c80: 20 43 6f 6e 76 65 72 74 73 20 61 20 53 51 4c 69   Converts a SQLi
5c90: 74 65 54 79 70 65 20 74 6f 20 61 20 2e 4e 45 54  teType to a .NET
5ca0: 20 54 79 70 65 20 6f 62 6a 65 63 74 0d 0a 20 20   Type object..  
5cb0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
5cc0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
5cd0: 20 6e 61 6d 65 3d 22 74 22 3e 54 68 65 20 53 51   name="t">The SQ
5ce0: 4c 69 74 65 54 79 70 65 20 74 6f 20 63 6f 6e 76  LiteType to conv
5cf0: 65 72 74 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ert</param>..   
5d00: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65   /// <returns>Re
5d10: 74 75 72 6e 73 20 61 20 2e 4e 45 54 20 54 79 70  turns a .NET Typ
5d20: 65 20 6f 62 6a 65 63 74 3c 2f 72 65 74 75 72 6e  e object</return
5d30: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
5d40: 20 73 74 61 74 69 63 20 54 79 70 65 20 53 51 4c   static Type SQL
5d50: 69 74 65 54 79 70 65 54 6f 54 79 70 65 28 53 51  iteTypeToType(SQ
5d60: 4c 69 74 65 54 79 70 65 20 74 29 0d 0a 20 20 20  LiteType t)..   
5d70: 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 74 2e   {..      if (t.
5d80: 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 4f  Type == DbType.O
5d90: 62 6a 65 63 74 29 0d 0a 20 20 20 20 20 20 20 20  bject)..        
5da0: 72 65 74 75 72 6e 20 5f 61 66 66 69 6e 69 74 79  return _affinity
5db0: 74 6f 74 79 70 65 5b 28 69 6e 74 29 74 2e 41 66  totype[(int)t.Af
5dc0: 66 69 6e 69 74 79 5d 3b 0d 0a 20 20 20 20 20 20  finity];..      
5dd0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 72 65  else..        re
5de0: 74 75 72 6e 20 53 51 4c 69 74 65 43 6f 6e 76 65  turn SQLiteConve
5df0: 72 74 2e 44 62 54 79 70 65 54 6f 54 79 70 65 28  rt.DbTypeToType(
5e00: 74 2e 54 79 70 65 29 3b 0d 0a 20 20 20 20 7d 0d  t.Type);..    }.
5e10: 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  ...    private s
5e20: 74 61 74 69 63 20 54 79 70 65 5b 5d 20 5f 61 66  tatic Type[] _af
5e30: 66 69 6e 69 74 79 74 6f 74 79 70 65 20 3d 20 7b  finitytotype = {
5e40: 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 6f  ..      typeof(o
5e50: 62 6a 65 63 74 29 2c 0d 0a 20 20 20 20 20 20 74  bject),..      t
5e60: 79 70 65 6f 66 28 49 6e 74 36 34 29 2c 0d 0a 20  ypeof(Int64),.. 
5e70: 20 20 20 20 20 74 79 70 65 6f 66 28 44 6f 75 62       typeof(Doub
5e80: 6c 65 29 2c 0d 0a 20 20 20 20 20 20 74 79 70 65  le),..      type
5e90: 6f 66 28 73 74 72 69 6e 67 29 2c 0d 0a 20 20 20  of(string),..   
5ea0: 20 20 20 74 79 70 65 6f 66 28 62 79 74 65 5b 5d     typeof(byte[]
5eb0: 29 2c 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66  ),..      typeof
5ec0: 28 6f 62 6a 65 63 74 29 2c 0d 0a 20 20 20 20 20  (object),..     
5ed0: 20 74 79 70 65 6f 66 28 44 61 74 65 54 69 6d 65   typeof(DateTime
5ee0: 29 2c 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66  ),..      typeof
5ef0: 28 6f 62 6a 65 63 74 29 0d 0a 20 20 20 20 7d 3b  (object)..    };
5f00: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
5f10: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 46  mary>..    /// F
5f20: 6f 72 20 61 20 67 69 76 65 6e 20 69 6e 74 72 69  or a given intri
5f30: 6e 73 69 63 20 74 79 70 65 2c 20 72 65 74 75 72  nsic type, retur
5f40: 6e 20 61 20 44 62 54 79 70 65 0d 0a 20 20 20 20  n a DbType..    
5f50: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
5f60: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
5f70: 61 6d 65 3d 22 74 79 70 22 3e 54 68 65 20 6e 61  ame="typ">The na
5f80: 74 69 76 65 20 74 79 70 65 20 74 6f 20 63 6f 6e  tive type to con
5f90: 76 65 72 74 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  vert</param>..  
5fa0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
5fb0: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
5fc0: 20 28 63 6c 6f 73 65 73 74 20 6d 61 74 63 68 29   (closest match)
5fd0: 20 44 62 54 79 70 65 3c 2f 72 65 74 75 72 6e 73   DbType</returns
5fe0: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
5ff0: 73 74 61 74 69 63 20 44 62 54 79 70 65 20 54 79  static DbType Ty
6000: 70 65 54 6f 44 62 54 79 70 65 28 54 79 70 65 20  peToDbType(Type 
6010: 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  typ)..    {..   
6020: 20 20 20 54 79 70 65 43 6f 64 65 20 74 63 20 3d     TypeCode tc =
6030: 20 54 79 70 65 2e 47 65 74 54 79 70 65 43 6f 64   Type.GetTypeCod
6040: 65 28 74 79 70 29 3b 0d 0a 20 20 20 20 20 20 69  e(typ);..      i
6050: 66 20 28 74 63 20 3d 3d 20 54 79 70 65 43 6f 64  f (tc == TypeCod
6060: 65 2e 4f 62 6a 65 63 74 29 0d 0a 20 20 20 20 20  e.Object)..     
6070: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
6080: 74 79 70 20 3d 3d 20 74 79 70 65 6f 66 28 62 79  typ == typeof(by
6090: 74 65 5b 5d 29 29 20 72 65 74 75 72 6e 20 44 62  te[])) return Db
60a0: 54 79 70 65 2e 42 69 6e 61 72 79 3b 0d 0a 20 20  Type.Binary;..  
60b0: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
60c0: 20 74 79 70 65 6f 66 28 47 75 69 64 29 29 20 72   typeof(Guid)) r
60d0: 65 74 75 72 6e 20 44 62 54 79 70 65 2e 47 75 69  eturn DbType.Gui
60e0: 64 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  d;..        retu
60f0: 72 6e 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67  rn DbType.String
6100: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
6110: 20 20 72 65 74 75 72 6e 20 5f 74 79 70 65 74 6f    return _typeto
6120: 64 62 74 79 70 65 5b 28 69 6e 74 29 74 63 5d 3b  dbtype[(int)tc];
6130: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70  ..    }....    p
6140: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 44 62  rivate static Db
6150: 54 79 70 65 5b 5d 20 5f 74 79 70 65 74 6f 64 62  Type[] _typetodb
6160: 74 79 70 65 20 3d 20 7b 0d 0a 20 20 20 20 20 20  type = {..      
6170: 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 2c 0d 0a  DbType.Object,..
6180: 20 20 20 20 20 20 44 62 54 79 70 65 2e 42 69 6e        DbType.Bin
6190: 61 72 79 2c 0d 0a 20 20 20 20 20 20 44 62 54 79  ary,..      DbTy
61a0: 70 65 2e 4f 62 6a 65 63 74 2c 0d 0a 20 20 20 20  pe.Object,..    
61b0: 20 20 44 62 54 79 70 65 2e 42 6f 6f 6c 65 61 6e    DbType.Boolean
61c0: 2c 0d 0a 20 20 20 20 20 20 44 62 54 79 70 65 2e  ,..      DbType.
61d0: 53 42 79 74 65 2c 0d 0a 20 20 20 20 20 20 44 62  SByte,..      Db
61e0: 54 79 70 65 2e 53 42 79 74 65 2c 0d 0a 20 20 20  Type.SByte,..   
61f0: 20 20 20 44 62 54 79 70 65 2e 42 79 74 65 2c 0d     DbType.Byte,.
6200: 0a 20 20 20 20 20 20 44 62 54 79 70 65 2e 49 6e  .      DbType.In
6210: 74 31 36 2c 20 2f 2f 20 37 0d 0a 20 20 20 20 20  t16, // 7..     
6220: 20 44 62 54 79 70 65 2e 55 49 6e 74 31 36 2c 0d   DbType.UInt16,.
6230: 0a 20 20 20 20 20 20 44 62 54 79 70 65 2e 49 6e  .      DbType.In
6240: 74 33 32 2c 0d 0a 20 20 20 20 20 20 44 62 54 79  t32,..      DbTy
6250: 70 65 2e 55 49 6e 74 33 32 2c 0d 0a 20 20 20 20  pe.UInt32,..    
6260: 20 20 44 62 54 79 70 65 2e 49 6e 74 36 34 2c 20    DbType.Int64, 
6270: 2f 2f 20 31 31 0d 0a 20 20 20 20 20 20 44 62 54  // 11..      DbT
6280: 79 70 65 2e 55 49 6e 74 36 34 2c 0d 0a 20 20 20  ype.UInt64,..   
6290: 20 20 20 44 62 54 79 70 65 2e 53 69 6e 67 6c 65     DbType.Single
62a0: 2c 0d 0a 20 20 20 20 20 20 44 62 54 79 70 65 2e  ,..      DbType.
62b0: 44 6f 75 62 6c 65 2c 0d 0a 20 20 20 20 20 20 44  Double,..      D
62c0: 62 54 79 70 65 2e 44 65 63 69 6d 61 6c 2c 0d 0a  bType.Decimal,..
62d0: 20 20 20 20 20 20 44 62 54 79 70 65 2e 44 61 74        DbType.Dat
62e0: 65 54 69 6d 65 2c 0d 0a 20 20 20 20 20 20 44 62  eTime,..      Db
62f0: 54 79 70 65 2e 4f 62 6a 65 63 74 2c 0d 0a 20 20  Type.Object,..  
6300: 20 20 20 20 44 62 54 79 70 65 2e 53 74 72 69 6e      DbType.Strin
6310: 67 2c 0d 0a 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20  g,..    };....  
6320: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
6330: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
6340: 20 74 68 65 20 43 6f 6c 75 6d 6e 53 69 7a 65 20   the ColumnSize 
6350: 66 6f 72 20 74 68 65 20 67 69 76 65 6e 20 44 62  for the given Db
6360: 54 79 70 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  Type..    /// </
6370: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
6380: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74  / <param name="t
6390: 79 70 22 3e 54 68 65 20 44 62 54 79 70 65 20 74  yp">The DbType t
63a0: 6f 20 67 65 74 20 74 68 65 20 73 69 7a 65 20 6f  o get the size o
63b0: 66 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  f</param>..    /
63c0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 3c 2f 72 65  // <returns></re
63d0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
63e0: 72 6e 61 6c 20 73 74 61 74 69 63 20 69 6e 74 20  rnal static int 
63f0: 44 62 54 79 70 65 54 6f 43 6f 6c 75 6d 6e 53 69  DbTypeToColumnSi
6400: 7a 65 28 44 62 54 79 70 65 20 74 79 70 29 0d 0a  ze(DbType typ)..
6410: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
6420: 75 72 6e 20 5f 64 62 74 79 70 65 74 6f 63 6f 6c  urn _dbtypetocol
6430: 75 6d 6e 73 69 7a 65 5b 28 69 6e 74 29 74 79 70  umnsize[(int)typ
6440: 5d 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ];..    }....   
6450: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
6460: 69 6e 74 5b 5d 20 5f 64 62 74 79 70 65 74 6f 63  int[] _dbtypetoc
6470: 6f 6c 75 6d 6e 73 69 7a 65 20 3d 20 7b 0d 0a 20  olumnsize = {.. 
6480: 20 20 20 20 20 32 31 34 37 34 38 33 36 34 37 2c       2147483647,
6490: 20 20 20 2f 2f 20 30 0d 0a 20 20 20 20 20 20 32     // 0..      2
64a0: 31 34 37 34 38 33 36 34 37 2c 20 20 20 2f 2f 20  147483647,   // 
64b0: 31 0d 0a 20 20 20 20 20 20 31 2c 20 20 20 20 20  1..      1,     
64c0: 2f 2f 20 32 0d 0a 20 20 20 20 20 20 31 2c 20 20  // 2..      1,  
64d0: 20 20 20 2f 2f 20 33 0d 0a 20 20 20 20 20 20 38     // 3..      8
64e0: 2c 20 20 2f 2f 20 34 0d 0a 20 20 20 20 20 20 38  ,  // 4..      8
64f0: 2c 20 2f 2f 20 35 0d 0a 20 20 20 20 20 20 38 2c  , // 5..      8,
6500: 20 2f 2f 20 36 0d 0a 20 20 20 20 20 20 38 2c 20   // 6..      8, 
6510: 20 2f 2f 20 37 0d 0a 20 20 20 20 20 20 38 2c 20   // 7..      8, 
6520: 20 20 2f 2f 20 38 0d 0a 20 20 20 20 20 20 31 36    // 8..      16
6530: 2c 20 20 20 20 20 2f 2f 20 39 0d 0a 20 20 20 20  ,     // 9..    
6540: 20 20 32 2c 0d 0a 20 20 20 20 20 20 34 2c 0d 0a    2,..      4,..
6550: 20 20 20 20 20 20 38 2c 0d 0a 20 20 20 20 20 20        8,..      
6560: 32 31 34 37 34 38 33 36 34 37 2c 0d 0a 20 20 20  2147483647,..   
6570: 20 20 20 31 2c 0d 0a 20 20 20 20 20 20 34 2c 0d     1,..      4,.
6580: 0a 20 20 20 20 20 20 32 31 34 37 34 38 33 36 34  .      214748364
6590: 37 2c 0d 0a 20 20 20 20 20 20 38 2c 0d 0a 20 20  7,..      8,..  
65a0: 20 20 20 20 32 2c 0d 0a 20 20 20 20 20 20 34 2c      2,..      4,
65b0: 0d 0a 20 20 20 20 20 20 38 2c 0d 0a 20 20 20 20  ..      8,..    
65c0: 20 20 38 2c 0d 0a 20 20 20 20 20 20 32 31 34 37    8,..      2147
65d0: 34 38 33 36 34 37 2c 0d 0a 20 20 20 20 20 20 32  483647,..      2
65e0: 31 34 37 34 38 33 36 34 37 2c 0d 0a 20 20 20 20  147483647,..    
65f0: 20 20 32 31 34 37 34 38 33 36 34 37 2c 0d 0a 20    2147483647,.. 
6600: 20 20 20 20 20 32 31 34 37 34 38 33 36 34 37 2c       2147483647,
6610: 20 20 20 2f 2f 20 32 35 20 28 58 6d 6c 29 0d 0a     // 25 (Xml)..
6620: 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 69 6e      };....    in
6630: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 6f 62  ternal static ob
6640: 6a 65 63 74 20 44 62 54 79 70 65 54 6f 4e 75 6d  ject DbTypeToNum
6650: 65 72 69 63 50 72 65 63 69 73 69 6f 6e 28 44 62  ericPrecision(Db
6660: 54 79 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b  Type typ)..    {
6670: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f  ..      return _
6680: 64 62 74 79 70 65 74 6f 6e 75 6d 65 72 69 63 70  dbtypetonumericp
6690: 72 65 63 69 73 69 6f 6e 5b 28 69 6e 74 29 74 79  recision[(int)ty
66a0: 70 5d 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  p];..    }....  
66b0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
66c0: 20 6f 62 6a 65 63 74 5b 5d 20 5f 64 62 74 79 70   object[] _dbtyp
66d0: 65 74 6f 6e 75 6d 65 72 69 63 70 72 65 63 69 73  etonumericprecis
66e0: 69 6f 6e 20 3d 20 7b 0d 0a 20 20 20 20 20 20 44  ion = {..      D
66f0: 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20  BNull.Value, // 
6700: 30 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e  0..      DBNull.
6710: 56 61 6c 75 65 2c 20 2f 2f 20 31 0d 0a 20 20 20  Value, // 1..   
6720: 20 20 20 33 2c 0d 0a 20 20 20 20 20 20 44 42 4e     3,..      DBN
6730: 75 6c 6c 2e 56 61 6c 75 65 2c 0d 0a 20 20 20 20  ull.Value,..    
6740: 20 20 31 39 2c 0d 0a 20 20 20 20 20 20 44 42 4e    19,..      DBN
6750: 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20 35 0d  ull.Value, // 5.
6760: 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61  .      DBNull.Va
6770: 6c 75 65 2c 20 2f 2f 20 36 0d 0a 20 20 20 20 20  lue, // 6..     
6780: 20 35 33 2c 0d 0a 20 20 20 20 20 20 35 33 2c 0d   53,..      53,.
6790: 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61  .      DBNull.Va
67a0: 6c 75 65 2c 0d 0a 20 20 20 20 20 20 35 2c 0d 0a  lue,..      5,..
67b0: 20 20 20 20 20 20 31 30 2c 0d 0a 20 20 20 20 20        10,..     
67c0: 20 31 39 2c 0d 0a 20 20 20 20 20 20 44 42 4e 75   19,..      DBNu
67d0: 6c 6c 2e 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20  ll.Value,..     
67e0: 20 33 2c 0d 0a 20 20 20 20 20 20 32 34 2c 0d 0a   3,..      24,..
67f0: 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c        DBNull.Val
6800: 75 65 2c 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c  ue,..      DBNul
6810: 6c 2e 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20  l.Value,..      
6820: 35 2c 0d 0a 20 20 20 20 20 20 31 30 2c 0d 0a 20  5,..      10,.. 
6830: 20 20 20 20 20 31 39 2c 0d 0a 20 20 20 20 20 20       19,..      
6840: 35 33 2c 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c  53,..      DBNul
6850: 6c 2e 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20  l.Value,..      
6860: 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 0d 0a 20  DBNull.Value,.. 
6870: 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75       DBNull.Valu
6880: 65 0d 0a 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20  e..    };....   
6890: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
68a0: 20 6f 62 6a 65 63 74 20 44 62 54 79 70 65 54 6f   object DbTypeTo
68b0: 4e 75 6d 65 72 69 63 53 63 61 6c 65 28 44 62 54  NumericScale(DbT
68c0: 79 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d  ype typ)..    {.
68d0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 64  .      return _d
68e0: 62 74 79 70 65 74 6f 6e 75 6d 65 72 69 63 73 63  btypetonumericsc
68f0: 61 6c 65 5b 28 69 6e 74 29 74 79 70 5d 3b 0d 0a  ale[(int)typ];..
6900: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69      }....    pri
6910: 76 61 74 65 20 73 74 61 74 69 63 20 6f 62 6a 65  vate static obje
6920: 63 74 5b 5d 20 5f 64 62 74 79 70 65 74 6f 6e 75  ct[] _dbtypetonu
6930: 6d 65 72 69 63 73 63 61 6c 65 20 3d 20 7b 0d 0a  mericscale = {..
6940: 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c        DBNull.Val
6950: 75 65 2c 20 2f 2f 20 30 0d 0a 20 20 20 20 20 20  ue, // 0..      
6960: 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f  DBNull.Value, //
6970: 20 31 0d 0a 20 20 20 20 20 20 30 2c 0d 0a 20 20   1..      0,..  
6980: 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65      DBNull.Value
6990: 2c 0d 0a 20 20 20 20 20 20 34 2c 0d 0a 20 20 20  ,..      4,..   
69a0: 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c     DBNull.Value,
69b0: 20 2f 2f 20 35 0d 0a 20 20 20 20 20 20 44 42 4e   // 5..      DBN
69c0: 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20 36 0d  ull.Value, // 6.
69d0: 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61  .      DBNull.Va
69e0: 6c 75 65 2c 0d 0a 20 20 20 20 20 20 44 42 4e 75  lue,..      DBNu
69f0: 6c 6c 2e 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20  ll.Value,..     
6a00: 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 0d 0a   DBNull.Value,..
6a10: 20 20 20 20 20 20 30 2c 0d 0a 20 20 20 20 20 20        0,..      
6a20: 30 2c 0d 0a 20 20 20 20 20 20 30 2c 0d 0a 20 20  0,..      0,..  
6a30: 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65      DBNull.Value
6a40: 2c 0d 0a 20 20 20 20 20 20 30 2c 0d 0a 20 20 20  ,..      0,..   
6a50: 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c     DBNull.Value,
6a60: 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56  ..      DBNull.V
6a70: 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 44 42 4e  alue,..      DBN
6a80: 75 6c 6c 2e 56 61 6c 75 65 2c 0d 0a 20 20 20 20  ull.Value,..    
6a90: 20 20 30 2c 0d 0a 20 20 20 20 20 20 30 2c 0d 0a    0,..      0,..
6aa0: 20 20 20 20 20 20 30 2c 0d 0a 20 20 20 20 20 20        0,..      
6ab0: 30 2c 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c  0,..      DBNull
6ac0: 2e 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 44  .Value,..      D
6ad0: 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 0d 0a 20 20  BNull.Value,..  
6ae0: 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65      DBNull.Value
6af0: 0d 0a 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20  ..    };....    
6b00: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
6b10: 73 74 72 69 6e 67 20 44 62 54 79 70 65 54 6f 54  string DbTypeToT
6b20: 79 70 65 4e 61 6d 65 28 44 62 54 79 70 65 20 74  ypeName(DbType t
6b30: 79 70 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  yp)..    {..    
6b40: 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30    for (int n = 0
6b50: 3b 20 6e 20 3c 20 5f 64 62 74 79 70 65 4e 61 6d  ; n < _dbtypeNam
6b60: 65 73 2e 4c 65 6e 67 74 68 3b 20 6e 2b 2b 29 0d  es.Length; n++).
6b70: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
6b80: 20 20 69 66 20 28 5f 64 62 74 79 70 65 4e 61 6d    if (_dbtypeNam
6b90: 65 73 5b 6e 5d 2e 64 61 74 61 54 79 70 65 20 3d  es[n].dataType =
6ba0: 3d 20 74 79 70 29 0d 0a 20 20 20 20 20 20 20 20  = typ)..        
6bb0: 20 20 72 65 74 75 72 6e 20 5f 64 62 74 79 70 65    return _dbtype
6bc0: 4e 61 6d 65 73 5b 6e 5d 2e 74 79 70 65 4e 61 6d  Names[n].typeNam
6bd0: 65 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  e;..      }.... 
6be0: 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 66 61       string defa
6bf0: 75 6c 74 54 79 70 65 4e 61 6d 65 20 3d 20 53 74  ultTypeName = St
6c00: 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 23  ring.Empty;....#
6c10: 69 66 20 44 45 42 55 47 20 26 26 20 21 4e 45 54  if DEBUG && !NET
6c20: 5f 43 4f 4d 50 41 43 54 5f 32 30 0d 0a 20 20 20  _COMPACT_20..   
6c30: 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
6c40: 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ne(String.Format
6c50: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 22 57 41  (..          "WA
6c60: 52 4e 49 4e 47 3a 20 54 79 70 65 20 6d 61 70 70  RNING: Type mapp
6c70: 69 6e 67 20 66 61 69 6c 65 64 2c 20 72 65 74 75  ing failed, retu
6c80: 72 6e 69 6e 67 20 64 65 66 61 75 6c 74 20 6e 61  rning default na
6c90: 6d 65 20 5c 22 7b 30 7d 5c 22 20 66 6f 72 20 74  me \"{0}\" for t
6ca0: 79 70 65 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20  ype {1}.",..    
6cb0: 20 20 20 20 20 20 64 65 66 61 75 6c 74 54 79 70        defaultTyp
6cc0: 65 4e 61 6d 65 2c 20 74 79 70 29 29 3b 0d 0a 23  eName, typ));..#
6cd0: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 72  endif....      r
6ce0: 65 74 75 72 6e 20 64 65 66 61 75 6c 74 54 79 70  eturn defaultTyp
6cf0: 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  eName;..    }...
6d00: 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61  .    private sta
6d10: 74 69 63 20 53 51 4c 69 74 65 54 79 70 65 4e 61  tic SQLiteTypeNa
6d20: 6d 65 73 5b 5d 20 5f 64 62 74 79 70 65 4e 61 6d  mes[] _dbtypeNam
6d30: 65 73 20 3d 20 7b 0d 0a 20 20 20 20 20 20 6e 65  es = {..      ne
6d40: 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  w SQLiteTypeName
6d50: 73 28 22 49 4e 54 45 47 45 52 22 2c 20 44 62 54  s("INTEGER", DbT
6d60: 79 70 65 2e 49 6e 74 36 34 29 2c 0d 0a 20 20 20  ype.Int64),..   
6d70: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
6d80: 65 4e 61 6d 65 73 28 22 54 49 4e 59 49 4e 54 22  eNames("TINYINT"
6d90: 2c 20 44 62 54 79 70 65 2e 42 79 74 65 29 2c 0d  , DbType.Byte),.
6da0: 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74  .      new SQLit
6db0: 65 54 79 70 65 4e 61 6d 65 73 28 22 49 4e 54 22  eTypeNames("INT"
6dc0: 2c 20 44 62 54 79 70 65 2e 49 6e 74 33 32 29 2c  , DbType.Int32),
6dd0: 0d 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69  ..      new SQLi
6de0: 74 65 54 79 70 65 4e 61 6d 65 73 28 22 56 41 52  teTypeNames("VAR
6df0: 43 48 41 52 22 2c 20 44 62 54 79 70 65 2e 41 6e  CHAR", DbType.An
6e00: 73 69 53 74 72 69 6e 67 29 2c 0d 0a 20 20 20 20  siString),..    
6e10: 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65    new SQLiteType
6e20: 4e 61 6d 65 73 28 22 4e 56 41 52 43 48 41 52 22  Names("NVARCHAR"
6e30: 2c 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67 29  , DbType.String)
6e40: 2c 0d 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c  ,..      new SQL
6e50: 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 43 48  iteTypeNames("CH
6e60: 41 52 22 2c 20 44 62 54 79 70 65 2e 41 6e 73 69  AR", DbType.Ansi
6e70: 53 74 72 69 6e 67 46 69 78 65 64 4c 65 6e 67 74  StringFixedLengt
6e80: 68 29 2c 0d 0a 20 20 20 20 20 20 6e 65 77 20 53  h),..      new S
6e90: 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22  QLiteTypeNames("
6ea0: 4e 43 48 41 52 22 2c 20 44 62 54 79 70 65 2e 53  NCHAR", DbType.S
6eb0: 74 72 69 6e 67 46 69 78 65 64 4c 65 6e 67 74 68  tringFixedLength
6ec0: 29 2c 0d 0a 20 20 20 20 20 20 6e 65 77 20 53 51  ),..      new SQ
6ed0: 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 46  LiteTypeNames("F
6ee0: 4c 4f 41 54 22 2c 20 44 62 54 79 70 65 2e 44 6f  LOAT", DbType.Do
6ef0: 75 62 6c 65 29 2c 0d 0a 20 20 20 20 20 20 6e 65  uble),..      ne
6f00: 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  w SQLiteTypeName
6f10: 73 28 22 52 45 41 4c 22 2c 20 44 62 54 79 70 65  s("REAL", DbType
6f20: 2e 44 6f 75 62 6c 65 29 2c 0d 0a 20 20 20 20 20  .Double),..     
6f30: 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e   new SQLiteTypeN
6f40: 61 6d 65 73 28 22 42 49 54 22 2c 20 44 62 54 79  ames("BIT", DbTy
6f50: 70 65 2e 42 6f 6f 6c 65 61 6e 29 2c 0d 0a 20 20  pe.Boolean),..  
6f60: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
6f70: 70 65 4e 61 6d 65 73 28 22 44 45 43 49 4d 41 4c  peNames("DECIMAL
6f80: 22 2c 20 44 62 54 79 70 65 2e 44 65 63 69 6d 61  ", DbType.Decima
6f90: 6c 29 2c 0d 0a 20 20 20 20 20 20 6e 65 77 20 53  l),..      new S
6fa0: 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22  QLiteTypeNames("
6fb0: 44 41 54 45 54 49 4d 45 22 2c 20 44 62 54 79 70  DATETIME", DbTyp
6fc0: 65 2e 44 61 74 65 54 69 6d 65 29 2c 0d 0a 20 20  e.DateTime),..  
6fd0: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
6fe0: 70 65 4e 61 6d 65 73 28 22 42 4c 4f 42 22 2c 20  peNames("BLOB", 
6ff0: 44 62 54 79 70 65 2e 42 69 6e 61 72 79 29 2c 0d  DbType.Binary),.
7000: 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74  .      new SQLit
7010: 65 54 79 70 65 4e 61 6d 65 73 28 22 55 4e 49 51  eTypeNames("UNIQ
7020: 55 45 49 44 45 4e 54 49 46 49 45 52 22 2c 20 44  UEIDENTIFIER", D
7030: 62 54 79 70 65 2e 47 75 69 64 29 2c 0d 0a 20 20  bType.Guid),..  
7040: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
7050: 70 65 4e 61 6d 65 73 28 22 53 4d 41 4c 4c 49 4e  peNames("SMALLIN
7060: 54 22 2c 20 44 62 54 79 70 65 2e 49 6e 74 31 36  T", DbType.Int16
7070: 29 2c 0d 0a 20 20 20 20 7d 3b 0d 0a 20 20 20 20  ),..    };..    
7080: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
7090: 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 20 61     /// Convert a
70a0: 20 44 62 54 79 70 65 20 74 6f 20 61 20 54 79 70   DbType to a Typ
70b0: 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  e..    /// </sum
70c0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
70d0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22  param name="typ"
70e0: 3e 54 68 65 20 44 62 54 79 70 65 20 74 6f 20 63  >The DbType to c
70f0: 6f 6e 76 65 72 74 20 66 72 6f 6d 3c 2f 70 61 72  onvert from</par
7100: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
7110: 74 75 72 6e 73 3e 54 68 65 20 63 6c 6f 73 65 73  turns>The closes
7120: 74 2d 6d 61 74 63 68 20 2e 4e 45 54 20 74 79 70  t-match .NET typ
7130: 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  e</returns>..   
7140: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
7150: 20 54 79 70 65 20 44 62 54 79 70 65 54 6f 54 79   Type DbTypeToTy
7160: 70 65 28 44 62 54 79 70 65 20 74 79 70 29 0d 0a  pe(DbType typ)..
7170: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
7180: 75 72 6e 20 5f 64 62 74 79 70 65 54 6f 54 79 70  urn _dbtypeToTyp
7190: 65 5b 28 69 6e 74 29 74 79 70 5d 3b 0d 0a 20 20  e[(int)typ];..  
71a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61    }....    priva
71b0: 74 65 20 73 74 61 74 69 63 20 54 79 70 65 5b 5d  te static Type[]
71c0: 20 5f 64 62 74 79 70 65 54 6f 54 79 70 65 20 3d   _dbtypeToType =
71d0: 20 7b 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66   {..      typeof
71e0: 28 73 74 72 69 6e 67 29 2c 20 20 20 2f 2f 20 30  (string),   // 0
71f0: 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 62  ..      typeof(b
7200: 79 74 65 5b 5d 29 2c 20 20 20 2f 2f 20 31 0d 0a  yte[]),   // 1..
7210: 20 20 20 20 20 20 74 79 70 65 6f 66 28 62 79 74        typeof(byt
7220: 65 29 2c 20 20 20 20 20 2f 2f 20 32 0d 0a 20 20  e),     // 2..  
7230: 20 20 20 20 74 79 70 65 6f 66 28 62 6f 6f 6c 29      typeof(bool)
7240: 2c 20 20 20 20 20 2f 2f 20 33 0d 0a 20 20 20 20  ,     // 3..    
7250: 20 20 74 79 70 65 6f 66 28 64 65 63 69 6d 61 6c    typeof(decimal
7260: 29 2c 20 20 2f 2f 20 34 0d 0a 20 20 20 20 20 20  ),  // 4..      
7270: 74 79 70 65 6f 66 28 44 61 74 65 54 69 6d 65 29  typeof(DateTime)
7280: 2c 20 2f 2f 20 35 0d 0a 20 20 20 20 20 20 74 79  , // 5..      ty
7290: 70 65 6f 66 28 44 61 74 65 54 69 6d 65 29 2c 20  peof(DateTime), 
72a0: 2f 2f 20 36 0d 0a 20 20 20 20 20 20 74 79 70 65  // 6..      type
72b0: 6f 66 28 64 65 63 69 6d 61 6c 29 2c 20 20 2f 2f  of(decimal),  //
72c0: 20 37 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66   7..      typeof
72d0: 28 64 6f 75 62 6c 65 29 2c 20 20 20 2f 2f 20 38  (double),   // 8
72e0: 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 47  ..      typeof(G
72f0: 75 69 64 29 2c 20 20 20 20 20 2f 2f 20 39 0d 0a  uid),     // 9..
7300: 20 20 20 20 20 20 74 79 70 65 6f 66 28 49 6e 74        typeof(Int
7310: 31 36 29 2c 0d 0a 20 20 20 20 20 20 74 79 70 65  16),..      type
7320: 6f 66 28 49 6e 74 33 32 29 2c 0d 0a 20 20 20 20  of(Int32),..    
7330: 20 20 74 79 70 65 6f 66 28 49 6e 74 36 34 29 2c    typeof(Int64),
7340: 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 6f  ..      typeof(o
7350: 62 6a 65 63 74 29 2c 0d 0a 20 20 20 20 20 20 74  bject),..      t
7360: 79 70 65 6f 66 28 73 62 79 74 65 29 2c 0d 0a 20  ypeof(sbyte),.. 
7370: 20 20 20 20 20 74 79 70 65 6f 66 28 66 6c 6f 61       typeof(floa
7380: 74 29 2c 0d 0a 20 20 20 20 20 20 74 79 70 65 6f  t),..      typeo
7390: 66 28 73 74 72 69 6e 67 29 2c 0d 0a 20 20 20 20  f(string),..    
73a0: 20 20 74 79 70 65 6f 66 28 44 61 74 65 54 69 6d    typeof(DateTim
73b0: 65 29 2c 0d 0a 20 20 20 20 20 20 74 79 70 65 6f  e),..      typeo
73c0: 66 28 55 49 6e 74 31 36 29 2c 0d 0a 20 20 20 20  f(UInt16),..    
73d0: 20 20 74 79 70 65 6f 66 28 55 49 6e 74 33 32 29    typeof(UInt32)
73e0: 2c 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28  ,..      typeof(
73f0: 55 49 6e 74 36 34 29 2c 0d 0a 20 20 20 20 20 20  UInt64),..      
7400: 74 79 70 65 6f 66 28 64 6f 75 62 6c 65 29 2c 0d  typeof(double),.
7410: 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 73 74  .      typeof(st
7420: 72 69 6e 67 29 2c 0d 0a 20 20 20 20 20 20 74 79  ring),..      ty
7430: 70 65 6f 66 28 73 74 72 69 6e 67 29 2c 0d 0a 20  peof(string),.. 
7440: 20 20 20 20 20 74 79 70 65 6f 66 28 73 74 72 69       typeof(stri
7450: 6e 67 29 2c 0d 0a 20 20 20 20 20 20 74 79 70 65  ng),..      type
7460: 6f 66 28 73 74 72 69 6e 67 29 2c 20 20 20 2f 2f  of(string),   //
7470: 20 32 35 20 28 58 6d 6c 29 0d 0a 20 20 20 20 7d   25 (Xml)..    }
7480: 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ;....    /// <su
7490: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
74a0: 46 6f 72 20 61 20 67 69 76 65 6e 20 74 79 70 65  For a given type
74b0: 2c 20 72 65 74 75 72 6e 20 74 68 65 20 63 6c 6f  , return the clo
74c0: 73 65 73 74 2d 6d 61 74 63 68 20 53 51 4c 69 74  sest-match SQLit
74d0: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2c 20  e TypeAffinity, 
74e0: 77 68 69 63 68 20 6f 6e 6c 79 20 75 6e 64 65 72  which only under
74f0: 73 74 61 6e 64 73 20 61 20 76 65 72 79 20 6c 69  stands a very li
7500: 6d 69 74 65 64 20 73 75 62 73 65 74 20 6f 66 20  mited subset of 
7510: 74 79 70 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  types...    /// 
7520: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
7530: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
7540: 22 74 79 70 22 3e 54 68 65 20 74 79 70 65 20 74  "typ">The type t
7550: 6f 20 65 76 61 6c 75 61 74 65 3c 2f 70 61 72 61  o evaluate</para
7560: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
7570: 75 72 6e 73 3e 54 68 65 20 53 51 4c 69 74 65 20  urns>The SQLite 
7580: 74 79 70 65 20 61 66 66 69 6e 69 74 79 20 66 6f  type affinity fo
7590: 72 20 74 68 61 74 20 74 79 70 65 2e 3c 2f 72 65  r that type.</re
75a0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
75b0: 72 6e 61 6c 20 73 74 61 74 69 63 20 54 79 70 65  rnal static Type
75c0: 41 66 66 69 6e 69 74 79 20 54 79 70 65 54 6f 41  Affinity TypeToA
75d0: 66 66 69 6e 69 74 79 28 54 79 70 65 20 74 79 70  ffinity(Type typ
75e0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
75f0: 54 79 70 65 43 6f 64 65 20 74 63 20 3d 20 54 79  TypeCode tc = Ty
7600: 70 65 2e 47 65 74 54 79 70 65 43 6f 64 65 28 74  pe.GetTypeCode(t
7610: 79 70 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  yp);..      if (
7620: 74 63 20 3d 3d 20 54 79 70 65 43 6f 64 65 2e 4f  tc == TypeCode.O
7630: 62 6a 65 63 74 29 0d 0a 20 20 20 20 20 20 7b 0d  bject)..      {.
7640: 0a 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70  .        if (typ
7650: 20 3d 3d 20 74 79 70 65 6f 66 28 62 79 74 65 5b   == typeof(byte[
7660: 5d 29 20 7c 7c 20 74 79 70 20 3d 3d 20 74 79 70  ]) || typ == typ
7670: 65 6f 66 28 47 75 69 64 29 29 0d 0a 20 20 20 20  eof(Guid))..    
7680: 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 79 70        return Typ
7690: 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3b 0d  eAffinity.Blob;.
76a0: 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20  .        else.. 
76b0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
76c0: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54 65 78  TypeAffinity.Tex
76d0: 74 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  t;..      }..   
76e0: 20 20 20 72 65 74 75 72 6e 20 5f 74 79 70 65 63     return _typec
76f0: 6f 64 65 41 66 66 69 6e 69 74 69 65 73 5b 28 69  odeAffinities[(i
7700: 6e 74 29 74 63 5d 3b 0d 0a 20 20 20 20 7d 0d 0a  nt)tc];..    }..
7710: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74  ..    private st
7720: 61 74 69 63 20 54 79 70 65 41 66 66 69 6e 69 74  atic TypeAffinit
7730: 79 5b 5d 20 5f 74 79 70 65 63 6f 64 65 41 66 66  y[] _typecodeAff
7740: 69 6e 69 74 69 65 73 20 3d 20 7b 0d 0a 20 20 20  inities = {..   
7750: 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e     TypeAffinity.
7760: 4e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 54 79 70  Null,..      Typ
7770: 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 2c 0d  eAffinity.Blob,.
7780: 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e  .      TypeAffin
7790: 69 74 79 2e 4e 75 6c 6c 2c 0d 0a 20 20 20 20 20  ity.Null,..     
77a0: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e   TypeAffinity.In
77b0: 74 36 34 2c 0d 0a 20 20 20 20 20 20 54 79 70 65  t64,..      Type
77c0: 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 2c 0d  Affinity.Int64,.
77d0: 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e  .      TypeAffin
77e0: 69 74 79 2e 49 6e 74 36 34 2c 0d 0a 20 20 20 20  ity.Int64,..    
77f0: 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49    TypeAffinity.I
7800: 6e 74 36 34 2c 0d 0a 20 20 20 20 20 20 54 79 70  nt64,..      Typ
7810: 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 2c  eAffinity.Int64,
7820: 20 2f 2f 20 37 0d 0a 20 20 20 20 20 20 54 79 70   // 7..      Typ
7830: 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 2c  eAffinity.Int64,
7840: 0d 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69  ..      TypeAffi
7850: 6e 69 74 79 2e 49 6e 74 36 34 2c 0d 0a 20 20 20  nity.Int64,..   
7860: 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e     TypeAffinity.
7870: 49 6e 74 36 34 2c 0d 0a 20 20 20 20 20 20 54 79  Int64,..      Ty
7880: 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34  peAffinity.Int64
7890: 2c 20 2f 2f 20 31 31 0d 0a 20 20 20 20 20 20 54  , // 11..      T
78a0: 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36  ypeAffinity.Int6
78b0: 34 2c 0d 0a 20 20 20 20 20 20 54 79 70 65 41 66  4,..      TypeAf
78c0: 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 2c 0d 0a  finity.Double,..
78d0: 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69        TypeAffini
78e0: 74 79 2e 44 6f 75 62 6c 65 2c 0d 0a 20 20 20 20  ty.Double,..    
78f0: 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44    TypeAffinity.D
7900: 6f 75 62 6c 65 2c 0d 0a 20 20 20 20 20 20 54 79  ouble,..      Ty
7910: 70 65 41 66 66 69 6e 69 74 79 2e 44 61 74 65 54  peAffinity.DateT
7920: 69 6d 65 2c 0d 0a 20 20 20 20 20 20 54 79 70 65  ime,..      Type
7930: 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 2c 0d 0a  Affinity.Null,..
7940: 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69        TypeAffini
7950: 74 79 2e 54 65 78 74 2c 0d 0a 20 20 20 20 7d 3b  ty.Text,..    };
7960: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
7970: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 46  mary>..    /// F
7980: 6f 72 20 61 20 67 69 76 65 6e 20 74 79 70 65 20  or a given type 
7990: 6e 61 6d 65 2c 20 72 65 74 75 72 6e 20 61 20 63  name, return a c
79a0: 6c 6f 73 65 73 74 2d 6d 61 74 63 68 20 2e 4e 45  losest-match .NE
79b0: 54 20 74 79 70 65 0d 0a 20 20 20 20 2f 2f 2f 20  T type..    /// 
79c0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
79d0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
79e0: 22 4e 61 6d 65 22 3e 54 68 65 20 6e 61 6d 65 20  "Name">The name 
79f0: 6f 66 20 74 68 65 20 74 79 70 65 20 74 6f 20 6d  of the type to m
7a00: 61 74 63 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  atch</param>..  
7a10: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
7a20: 68 65 20 2e 4e 45 54 20 44 42 54 79 70 65 20 74  he .NET DBType t
7a30: 68 65 20 74 65 78 74 20 65 76 61 6c 75 61 74 65  he text evaluate
7a40: 73 20 74 6f 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  s to.</returns>.
7a50: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
7a60: 61 74 69 63 20 44 62 54 79 70 65 20 54 79 70 65  atic DbType Type
7a70: 4e 61 6d 65 54 6f 44 62 54 79 70 65 28 73 74 72  NameToDbType(str
7a80: 69 6e 67 20 4e 61 6d 65 29 0d 0a 20 20 20 20 7b  ing Name)..    {
7a90: 0d 0a 20 20 20 20 20 20 6c 6f 63 6b 20 28 5f 73  ..      lock (_s
7aa0: 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20  yncRoot)..      
7ab0: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f  {..        if (_
7ac0: 74 79 70 65 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c  typeNames == nul
7ad0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  l)..        {.. 
7ae0: 20 20 20 20 20 20 20 20 20 5f 74 79 70 65 4e 61           _typeNa
7af0: 6d 65 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f  mes = new Dictio
7b00: 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c  nary<string, SQL
7b10: 69 74 65 54 79 70 65 4e 61 6d 65 73 3e 28 0d 0a  iteTypeNames>(..
7b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
7b30: 77 20 54 79 70 65 4e 61 6d 65 53 74 72 69 6e 67  w TypeNameString
7b40: 43 6f 6d 70 61 72 65 72 28 29 29 3b 0d 0a 0d 0a  Comparer());....
7b50: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
7b60: 68 20 28 53 51 4c 69 74 65 54 79 70 65 4e 61 6d  h (SQLiteTypeNam
7b70: 65 73 20 74 79 70 65 4e 61 6d 65 20 69 6e 20 6e  es typeName in n
7b80: 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d  ew SQLiteTypeNam
7b90: 65 73 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  es[] {..        
7ba0: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
7bb0: 54 79 70 65 4e 61 6d 65 73 28 22 43 4f 55 4e 54  TypeNames("COUNT
7bc0: 45 52 22 2c 20 44 62 54 79 70 65 2e 49 6e 74 36  ER", DbType.Int6
7bd0: 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  4),..           
7be0: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
7bf0: 65 4e 61 6d 65 73 28 22 41 55 54 4f 49 4e 43 52  eNames("AUTOINCR
7c00: 45 4d 45 4e 54 22 2c 20 44 62 54 79 70 65 2e 49  EMENT", DbType.I
7c10: 6e 74 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20  nt64),..        
7c20: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
7c30: 54 79 70 65 4e 61 6d 65 73 28 22 49 44 45 4e 54  TypeNames("IDENT
7c40: 49 54 59 22 2c 20 44 62 54 79 70 65 2e 49 6e 74  ITY", DbType.Int
7c50: 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  64),..          
7c60: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
7c70: 70 65 4e 61 6d 65 73 28 22 4c 4f 4e 47 54 45 58  peNames("LONGTEX
7c80: 54 22 2c 20 44 62 54 79 70 65 2e 53 74 72 69 6e  T", DbType.Strin
7c90: 67 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g),..           
7ca0: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
7cb0: 65 4e 61 6d 65 73 28 22 4c 4f 4e 47 43 48 41 52  eNames("LONGCHAR
7cc0: 22 2c 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67  ", DbType.String
7cd0: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
7ce0: 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65    new SQLiteType
7cf0: 4e 61 6d 65 73 28 22 4c 4f 4e 47 56 41 52 43 48  Names("LONGVARCH
7d00: 41 52 22 2c 20 44 62 54 79 70 65 2e 53 74 72 69  AR", DbType.Stri
7d10: 6e 67 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ng),..          
7d20: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
7d30: 70 65 4e 61 6d 65 73 28 22 4c 4f 4e 47 22 2c 20  peNames("LONG", 
7d40: 44 62 54 79 70 65 2e 49 6e 74 36 34 29 2c 0d 0a  DbType.Int64),..
7d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
7d60: 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  w SQLiteTypeName
7d70: 73 28 22 54 49 4e 59 49 4e 54 22 2c 20 44 62 54  s("TINYINT", DbT
7d80: 79 70 65 2e 42 79 74 65 29 2c 0d 0a 20 20 20 20  ype.Byte),..    
7d90: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51            new SQ
7da0: 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 49  LiteTypeNames("I
7db0: 4e 54 45 47 45 52 22 2c 20 44 62 54 79 70 65 2e  NTEGER", DbType.
7dc0: 49 6e 74 36 34 29 2c 0d 0a 20 20 20 20 20 20 20  Int64),..       
7dd0: 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74         new SQLit
7de0: 65 54 79 70 65 4e 61 6d 65 73 28 22 49 4e 54 22  eTypeNames("INT"
7df0: 2c 20 44 62 54 79 70 65 2e 49 6e 74 33 32 29 2c  , DbType.Int32),
7e00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7e10: 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61  new SQLiteTypeNa
7e20: 6d 65 73 28 22 56 41 52 43 48 41 52 22 2c 20 44  mes("VARCHAR", D
7e30: 62 54 79 70 65 2e 53 74 72 69 6e 67 29 2c 0d 0a  bType.String),..
7e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
7e50: 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  w SQLiteTypeName
7e60: 73 28 22 4e 56 41 52 43 48 41 52 22 2c 20 44 62  s("NVARCHAR", Db
7e70: 54 79 70 65 2e 53 74 72 69 6e 67 29 2c 0d 0a 20  Type.String),.. 
7e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
7e90: 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73   SQLiteTypeNames
7ea0: 28 22 43 48 41 52 22 2c 20 44 62 54 79 70 65 2e  ("CHAR", DbType.
7eb0: 53 74 72 69 6e 67 29 2c 0d 0a 20 20 20 20 20 20  String),..      
7ec0: 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69          new SQLi
7ed0: 74 65 54 79 70 65 4e 61 6d 65 73 28 22 4e 43 48  teTypeNames("NCH
7ee0: 41 52 22 2c 20 44 62 54 79 70 65 2e 53 74 72 69  AR", DbType.Stri
7ef0: 6e 67 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ng),..          
7f00: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
7f10: 70 65 4e 61 6d 65 73 28 22 54 45 58 54 22 2c 20  peNames("TEXT", 
7f20: 44 62 54 79 70 65 2e 53 74 72 69 6e 67 29 2c 0d  DbType.String),.
7f30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e  .              n
7f40: 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d  ew SQLiteTypeNam
7f50: 65 73 28 22 4e 54 45 58 54 22 2c 20 44 62 54 79  es("NTEXT", DbTy
7f60: 70 65 2e 53 74 72 69 6e 67 29 2c 0d 0a 20 20 20  pe.String),..   
7f70: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53             new S
7f80: 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22  QLiteTypeNames("
7f90: 53 54 52 49 4e 47 22 2c 20 44 62 54 79 70 65 2e  STRING", DbType.
7fa0: 53 74 72 69 6e 67 29 2c 0d 0a 20 20 20 20 20 20  String),..      
7fb0: 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69          new SQLi
7fc0: 74 65 54 79 70 65 4e 61 6d 65 73 28 22 44 4f 55  teTypeNames("DOU
7fd0: 42 4c 45 22 2c 20 44 62 54 79 70 65 2e 44 6f 75  BLE", DbType.Dou
7fe0: 62 6c 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ble),..         
7ff0: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54       new SQLiteT
8000: 79 70 65 4e 61 6d 65 73 28 22 46 4c 4f 41 54 22  ypeNames("FLOAT"
8010: 2c 20 44 62 54 79 70 65 2e 44 6f 75 62 6c 65 29  , DbType.Double)
8020: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
8030: 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e   new SQLiteTypeN
8040: 61 6d 65 73 28 22 52 45 41 4c 22 2c 20 44 62 54  ames("REAL", DbT
8050: 79 70 65 2e 44 6f 75 62 6c 65 29 2c 0d 0a 20 20  ype.Double),..  
8060: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
8070: 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28  SQLiteTypeNames(
8080: 22 42 49 54 22 2c 20 44 62 54 79 70 65 2e 42 6f  "BIT", DbType.Bo
8090: 6f 6c 65 61 6e 29 2c 0d 0a 20 20 20 20 20 20 20  olean),..       
80a0: 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74         new SQLit
80b0: 65 54 79 70 65 4e 61 6d 65 73 28 22 59 45 53 4e  eTypeNames("YESN
80c0: 4f 22 2c 20 44 62 54 79 70 65 2e 42 6f 6f 6c 65  O", DbType.Boole
80d0: 61 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  an),..          
80e0: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
80f0: 70 65 4e 61 6d 65 73 28 22 4c 4f 47 49 43 41 4c  peNames("LOGICAL
8100: 22 2c 20 44 62 54 79 70 65 2e 42 6f 6f 6c 65 61  ", DbType.Boolea
8110: 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n),..           
8120: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
8130: 65 4e 61 6d 65 73 28 22 42 4f 4f 4c 22 2c 20 44  eNames("BOOL", D
8140: 62 54 79 70 65 2e 42 6f 6f 6c 65 61 6e 29 2c 0d  bType.Boolean),.
8150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e  .              n
8160: 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d  ew SQLiteTypeNam
8170: 65 73 28 22 42 4f 4f 4c 45 41 4e 22 2c 20 44 62  es("BOOLEAN", Db
8180: 54 79 70 65 2e 42 6f 6f 6c 65 61 6e 29 2c 0d 0a  Type.Boolean),..
8190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
81a0: 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  w SQLiteTypeName
81b0: 73 28 22 4e 55 4d 45 52 49 43 22 2c 20 44 62 54  s("NUMERIC", DbT
81c0: 79 70 65 2e 44 65 63 69 6d 61 6c 29 2c 0d 0a 20  ype.Decimal),.. 
81d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
81e0: 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73   SQLiteTypeNames
81f0: 28 22 44 45 43 49 4d 41 4c 22 2c 20 44 62 54 79  ("DECIMAL", DbTy
8200: 70 65 2e 44 65 63 69 6d 61 6c 29 2c 0d 0a 20 20  pe.Decimal),..  
8210: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
8220: 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28  SQLiteTypeNames(
8230: 22 4d 4f 4e 45 59 22 2c 20 44 62 54 79 70 65 2e  "MONEY", DbType.
8240: 44 65 63 69 6d 61 6c 29 2c 0d 0a 20 20 20 20 20  Decimal),..     
8250: 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c           new SQL
8260: 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 43 55  iteTypeNames("CU
8270: 52 52 45 4e 43 59 22 2c 20 44 62 54 79 70 65 2e  RRENCY", DbType.
8280: 44 65 63 69 6d 61 6c 29 2c 0d 0a 20 20 20 20 20  Decimal),..     
8290: 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c           new SQL
82a0: 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 54 49  iteTypeNames("TI
82b0: 4d 45 22 2c 20 44 62 54 79 70 65 2e 44 61 74 65  ME", DbType.Date
82c0: 54 69 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  Time),..        
82d0: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
82e0: 54 79 70 65 4e 61 6d 65 73 28 22 44 41 54 45 22  TypeNames("DATE"
82f0: 2c 20 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d  , DbType.DateTim
8300: 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
8310: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
8320: 65 4e 61 6d 65 73 28 22 44 41 54 45 54 49 4d 45  eNames("DATETIME
8330: 22 2c 20 44 62 54 79 70 65 2e 44 61 74 65 54 69  ", DbType.DateTi
8340: 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  me),..          
8350: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
8360: 70 65 4e 61 6d 65 73 28 22 53 4d 41 4c 4c 44 41  peNames("SMALLDA
8370: 54 45 22 2c 20 44 62 54 79 70 65 2e 44 61 74 65  TE", DbType.Date
8380: 54 69 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  Time),..        
8390: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
83a0: 54 79 70 65 4e 61 6d 65 73 28 22 54 49 4d 45 53  TypeNames("TIMES
83b0: 54 41 4d 50 22 2c 20 44 62 54 79 70 65 2e 44 61  TAMP", DbType.Da
83c0: 74 65 54 69 6d 65 29 2c 0d 0a 20 20 20 20 20 20  teTime),..      
83d0: 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69          new SQLi
83e0: 74 65 54 79 70 65 4e 61 6d 65 73 28 22 42 4c 4f  teTypeNames("BLO
83f0: 42 22 2c 20 44 62 54 79 70 65 2e 42 69 6e 61 72  B", DbType.Binar
8400: 79 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y),..           
8410: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
8420: 65 4e 61 6d 65 73 28 22 42 49 4e 41 52 59 22 2c  eNames("BINARY",
8430: 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79 29 2c   DbType.Binary),
8440: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8450: 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61  new SQLiteTypeNa
8460: 6d 65 73 28 22 56 41 52 42 49 4e 41 52 59 22 2c  mes("VARBINARY",
8470: 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79 29 2c   DbType.Binary),
8480: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8490: 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61  new SQLiteTypeNa
84a0: 6d 65 73 28 22 49 4d 41 47 45 22 2c 20 44 62 54  mes("IMAGE", DbT
84b0: 79 70 65 2e 42 69 6e 61 72 79 29 2c 0d 0a 20 20  ype.Binary),..  
84c0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
84d0: 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28  SQLiteTypeNames(
84e0: 22 47 45 4e 45 52 41 4c 22 2c 20 44 62 54 79 70  "GENERAL", DbTyp
84f0: 65 2e 42 69 6e 61 72 79 29 2c 0d 0a 20 20 20 20  e.Binary),..    
8500: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51            new SQ
8510: 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 4f  LiteTypeNames("O
8520: 4c 45 4f 42 4a 45 43 54 22 2c 20 44 62 54 79 70  LEOBJECT", DbTyp
8530: 65 2e 42 69 6e 61 72 79 29 2c 0d 0a 20 20 20 20  e.Binary),..    
8540: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51            new SQ
8550: 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 47  LiteTypeNames("G
8560: 55 49 44 22 2c 20 44 62 54 79 70 65 2e 47 75 69  UID", DbType.Gui
8570: 64 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d),..           
8580: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
8590: 65 4e 61 6d 65 73 28 22 55 4e 49 51 55 45 49 44  eNames("UNIQUEID
85a0: 45 4e 54 49 46 49 45 52 22 2c 20 44 62 54 79 70  ENTIFIER", DbTyp
85b0: 65 2e 47 75 69 64 29 2c 0d 0a 20 20 20 20 20 20  e.Guid),..      
85c0: 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69          new SQLi
85d0: 74 65 54 79 70 65 4e 61 6d 65 73 28 22 4d 45 4d  teTypeNames("MEM
85e0: 4f 22 2c 20 44 62 54 79 70 65 2e 53 74 72 69 6e  O", DbType.Strin
85f0: 67 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g),..           
8600: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
8610: 65 4e 61 6d 65 73 28 22 4e 4f 54 45 22 2c 20 44  eNames("NOTE", D
8620: 62 54 79 70 65 2e 53 74 72 69 6e 67 29 2c 0d 0a  bType.String),..
8630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
8640: 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  w SQLiteTypeName
8650: 73 28 22 53 4d 41 4c 4c 49 4e 54 22 2c 20 44 62  s("SMALLINT", Db
8660: 54 79 70 65 2e 49 6e 74 31 36 29 2c 0d 0a 20 20  Type.Int16),..  
8670: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
8680: 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28  SQLiteTypeNames(
8690: 22 42 49 47 49 4e 54 22 2c 20 44 62 54 79 70 65  "BIGINT", DbType
86a0: 2e 49 6e 74 36 34 29 0d 0a 20 20 20 20 20 20 20  .Int64)..       
86b0: 20 20 20 20 20 7d 29 0d 0a 20 20 20 20 20 20 20       })..       
86c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
86d0: 20 20 5f 74 79 70 65 4e 61 6d 65 73 2e 41 64 64    _typeNames.Add
86e0: 28 74 79 70 65 4e 61 6d 65 2e 74 79 70 65 4e 61  (typeName.typeNa
86f0: 6d 65 2c 20 74 79 70 65 4e 61 6d 65 29 3b 0d 0a  me, typeName);..
8700: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
8710: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
8720: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 53 74 72  ...      if (Str
8730: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
8740: 79 28 4e 61 6d 65 29 29 20 72 65 74 75 72 6e 20  y(Name)) return 
8750: 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 3b 0d 0a  DbType.Object;..
8760: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 54 79  ..      SQLiteTy
8770: 70 65 4e 61 6d 65 73 20 76 61 6c 75 65 3b 0d 0a  peNames value;..
8780: 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 74 79 70  ..      if (_typ
8790: 65 4e 61 6d 65 73 2e 54 72 79 47 65 74 56 61 6c  eNames.TryGetVal
87a0: 75 65 28 4e 61 6d 65 2c 20 6f 75 74 20 76 61 6c  ue(Name, out val
87b0: 75 65 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  ue))..      {.. 
87c0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61         return va
87d0: 6c 75 65 2e 64 61 74 61 54 79 70 65 3b 0d 0a 20  lue.dataType;.. 
87e0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c       }..      el
87f0: 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  se..      {..   
8800: 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78 20 3d       int index =
8810: 20 4e 61 6d 65 2e 49 6e 64 65 78 4f 66 28 27 28   Name.IndexOf('(
8820: 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ');....        i
8830: 66 20 28 28 69 6e 64 65 78 20 3e 20 30 29 20 26  f ((index > 0) &
8840: 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  &..            _
8850: 74 79 70 65 4e 61 6d 65 73 2e 54 72 79 47 65 74  typeNames.TryGet
8860: 56 61 6c 75 65 28 4e 61 6d 65 2e 53 75 62 73 74  Value(Name.Subst
8870: 72 69 6e 67 28 30 2c 20 69 6e 64 65 78 29 2e 54  ring(0, index).T
8880: 72 69 6d 45 6e 64 28 29 2c 20 6f 75 74 20 76 61  rimEnd(), out va
8890: 6c 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 7b  lue))..        {
88a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
88b0: 72 6e 20 76 61 6c 75 65 2e 64 61 74 61 54 79 70  rn value.dataTyp
88c0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
88d0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
88e0: 44 62 54 79 70 65 20 64 65 66 61 75 6c 74 44 62  DbType defaultDb
88f0: 54 79 70 65 20 3d 20 44 62 54 79 70 65 2e 4f 62  Type = DbType.Ob
8900: 6a 65 63 74 3b 0d 0a 0d 0a 23 69 66 20 44 45 42  ject;....#if DEB
8910: 55 47 20 26 26 20 21 4e 45 54 5f 43 4f 4d 50 41  UG && !NET_COMPA
8920: 43 54 5f 32 30 0d 0a 20 20 20 20 20 20 54 72 61  CT_20..      Tra
8930: 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72  ce.WriteLine(Str
8940: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
8950: 20 20 20 20 20 20 20 22 57 41 52 4e 49 4e 47 3a         "WARNING:
8960: 20 54 79 70 65 20 6d 61 70 70 69 6e 67 20 66 61   Type mapping fa
8970: 69 6c 65 64 2c 20 72 65 74 75 72 6e 69 6e 67 20  iled, returning 
8980: 64 65 66 61 75 6c 74 20 74 79 70 65 20 7b 30 7d  default type {0}
8990: 20 66 6f 72 20 6e 61 6d 65 20 5c 22 7b 31 7d 5c   for name \"{1}\
89a0: 22 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ".",..          
89b0: 64 65 66 61 75 6c 74 44 62 54 79 70 65 2c 20 4e  defaultDbType, N
89c0: 61 6d 65 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ame));..#endif..
89d0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 64  ..      return d
89e0: 65 66 61 75 6c 74 44 62 54 79 70 65 3b 0d 0a 20  efaultDbType;.. 
89f0: 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
8a00: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 70 72 69 76  gion....    priv
8a10: 61 74 65 20 73 74 61 74 69 63 20 6f 62 6a 65 63  ate static objec
8a20: 74 20 5f 73 79 6e 63 52 6f 6f 74 20 3d 20 6e 65  t _syncRoot = ne
8a30: 77 20 6f 62 6a 65 63 74 28 29 3b 0d 0a 20 20 20  w object();..   
8a40: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
8a50: 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e  Dictionary<strin
8a60: 67 2c 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d  g, SQLiteTypeNam
8a70: 65 73 3e 20 5f 74 79 70 65 4e 61 6d 65 73 20 3d  es> _typeNames =
8a80: 20 6e 75 6c 6c 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20   null;..  }.... 
8a90: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
8aa0: 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 68 61 73    /// SQLite has
8ab0: 20 76 65 72 79 20 6c 69 6d 69 74 65 64 20 74 79   very limited ty
8ac0: 70 65 73 2c 20 61 6e 64 20 69 73 20 69 6e 68 65  pes, and is inhe
8ad0: 72 65 6e 74 6c 79 20 74 65 78 74 2d 62 61 73 65  rently text-base
8ae0: 64 2e 20 20 54 68 65 20 66 69 72 73 74 20 35 20  d.  The first 5 
8af0: 74 79 70 65 73 20 62 65 6c 6f 77 20 72 65 70 72  types below repr
8b00: 65 73 65 6e 74 20 74 68 65 20 73 75 6d 20 6f 66  esent the sum of
8b10: 20 61 6c 6c 20 74 79 70 65 73 20 53 51 4c 69 74   all types SQLit
8b20: 65 0d 0a 20 20 2f 2f 2f 20 75 6e 64 65 72 73 74  e..  /// underst
8b30: 61 6e 64 73 2e 20 20 54 68 65 20 44 61 74 65 54  ands.  The DateT
8b40: 69 6d 65 20 65 78 74 65 6e 73 69 6f 6e 20 74 6f  ime extension to
8b50: 20 74 68 65 20 73 70 65 63 20 69 73 20 66 6f 72   the spec is for
8b60: 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 20 6f 6e   internal use on
8b70: 6c 79 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ly...  /// </sum
8b80: 6d 61 72 79 3e 0d 0a 20 20 70 75 62 6c 69 63 20  mary>..  public 
8b90: 65 6e 75 6d 20 54 79 70 65 41 66 66 69 6e 69 74  enum TypeAffinit
8ba0: 79 0d 0a 20 20 7b 0d 0a 20 20 20 20 2f 2f 2f 20  y..  {..    /// 
8bb0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
8bc0: 2f 2f 20 4e 6f 74 20 75 73 65 64 0d 0a 20 20 20  // Not used..   
8bd0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
8be0: 0a 20 20 20 20 55 6e 69 6e 69 74 69 61 6c 69 7a  .    Uninitializ
8bf0: 65 64 20 3d 20 30 2c 0d 0a 20 20 20 20 2f 2f 2f  ed = 0,..    ///
8c00: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
8c10: 2f 2f 2f 20 41 6c 6c 20 69 6e 74 65 67 65 72 73  /// All integers
8c20: 20 69 6e 20 53 51 4c 69 74 65 20 64 65 66 61 75   in SQLite defau
8c30: 6c 74 20 74 6f 20 49 6e 74 36 34 0d 0a 20 20 20  lt to Int64..   
8c40: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
8c50: 0a 20 20 20 20 49 6e 74 36 34 20 3d 20 31 2c 0d  .    Int64 = 1,.
8c60: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
8c70: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6c 6c 20  y>..    /// All 
8c80: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e  floating point n
8c90: 75 6d 62 65 72 73 20 69 6e 20 53 51 4c 69 74 65  umbers in SQLite
8ca0: 20 64 65 66 61 75 6c 74 20 74 6f 20 64 6f 75 62   default to doub
8cb0: 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  le..    /// </su
8cc0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 44 6f 75 62  mmary>..    Doub
8cd0: 6c 65 20 3d 20 32 2c 0d 0a 20 20 20 20 2f 2f 2f  le = 2,..    ///
8ce0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
8cf0: 2f 2f 2f 20 54 68 65 20 64 65 66 61 75 6c 74 20  /// The default 
8d00: 64 61 74 61 20 74 79 70 65 20 6f 66 20 53 51 4c  data type of SQL
8d10: 69 74 65 20 69 73 20 74 65 78 74 0d 0a 20 20 20  ite is text..   
8d20: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
8d30: 0a 20 20 20 20 54 65 78 74 20 3d 20 33 2c 0d 0a  .    Text = 3,..
8d40: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
8d50: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 79 70 69 63  >..    /// Typic
8d60: 61 6c 6c 79 20 62 6c 6f 62 20 74 79 70 65 73 20  ally blob types 
8d70: 61 72 65 20 6f 6e 6c 79 20 73 65 65 6e 20 77 68  are only seen wh
8d80: 65 6e 20 72 65 74 75 72 6e 65 64 20 66 72 6f 6d  en returned from
8d90: 20 61 20 66 75 6e 63 74 69 6f 6e 0d 0a 20 20 20   a function..   
8da0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
8db0: 0a 20 20 20 20 42 6c 6f 62 20 3d 20 34 2c 0d 0a  .    Blob = 4,..
8dc0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
8dd0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 75 6c 6c 20  >..    /// Null 
8de0: 74 79 70 65 73 20 63 61 6e 20 62 65 20 72 65 74  types can be ret
8df0: 75 72 6e 65 64 20 66 72 6f 6d 20 66 75 6e 63 74  urned from funct
8e00: 69 6f 6e 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ions..    /// </
8e10: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 4e 75  summary>..    Nu
8e20: 6c 6c 20 3d 20 35 2c 0d 0a 20 20 20 20 2f 2f 2f  ll = 5,..    ///
8e30: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
8e40: 2f 2f 2f 20 55 73 65 64 20 69 6e 74 65 72 6e 61  /// Used interna
8e50: 6c 6c 79 20 62 79 20 74 68 69 73 20 70 72 6f 76  lly by this prov
8e60: 69 64 65 72 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ider..    /// </
8e70: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 44 61  summary>..    Da
8e80: 74 65 54 69 6d 65 20 3d 20 31 30 2c 0d 0a 20 20  teTime = 10,..  
8e90: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
8ea0: 0a 20 20 20 20 2f 2f 2f 20 55 73 65 64 20 69 6e  .    /// Used in
8eb0: 74 65 72 6e 61 6c 6c 79 0d 0a 20 20 20 20 2f 2f  ternally..    //
8ec0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
8ed0: 20 20 4e 6f 6e 65 20 3d 20 31 31 2c 0d 0a 20 20    None = 11,..  
8ee0: 7d 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d  }....  /// <summ
8ef0: 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73  ary>..  /// This
8f00: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
8f10: 6f 66 20 53 51 4c 69 74 65 20 66 6f 72 20 41 44  of SQLite for AD
8f20: 4f 2e 4e 45 54 20 63 61 6e 20 70 72 6f 63 65 73  O.NET can proces
8f30: 73 20 64 61 74 65 2f 74 69 6d 65 20 66 69 65 6c  s date/time fiel
8f40: 64 73 20 69 6e 20 64 61 74 61 62 61 73 65 73 20  ds in databases 
8f50: 69 6e 20 6f 6e 6c 79 20 6f 6e 65 20 6f 66 20 74  in only one of t
8f60: 68 72 65 65 20 66 6f 72 6d 61 74 73 2e 20 20 54  hree formats.  T
8f70: 69 63 6b 73 2c 20 49 53 4f 38 36 30 31 0d 0a 20  icks, ISO8601.. 
8f80: 20 2f 2f 2f 20 61 6e 64 20 4a 75 6c 69 61 6e 44   /// and JulianD
8f90: 61 79 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ay...  /// </sum
8fa0: 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 3c 72 65  mary>..  /// <re
8fb0: 6d 61 72 6b 73 3e 0d 0a 20 20 2f 2f 2f 20 49 53  marks>..  /// IS
8fc0: 4f 38 36 30 31 20 69 73 20 6d 6f 72 65 20 63 6f  O8601 is more co
8fd0: 6d 70 61 74 69 62 6c 65 2c 20 72 65 61 64 61 62  mpatible, readab
8fe0: 6c 65 2c 20 66 75 6c 6c 79 2d 70 72 6f 63 65 73  le, fully-proces
8ff0: 73 61 62 6c 65 2c 20 62 75 74 20 6c 65 73 73 20  sable, but less 
9000: 61 63 63 75 72 61 74 65 20 61 73 20 69 74 20 64  accurate as it d
9010: 6f 65 73 6e 27 74 20 70 72 6f 76 69 64 65 20 74  oesn't provide t
9020: 69 6d 65 20 64 6f 77 6e 20 74 6f 20 66 72 61 63  ime down to frac
9030: 74 69 6f 6e 73 20 6f 66 20 61 20 73 65 63 6f 6e  tions of a secon
9040: 64 2e 0d 0a 20 20 2f 2f 2f 20 4a 75 6c 69 61 6e  d...  /// Julian
9050: 44 61 79 20 69 73 20 74 68 65 20 6e 75 6d 65 72  Day is the numer
9060: 69 63 20 66 6f 72 6d 61 74 20 74 68 65 20 53 51  ic format the SQ
9070: 4c 69 74 65 20 75 73 65 73 20 69 6e 74 65 72 6e  Lite uses intern
9080: 61 6c 6c 79 20 61 6e 64 20 69 73 20 61 72 67 75  ally and is argu
9090: 61 62 6c 79 20 74 68 65 20 6d 6f 73 74 20 63 6f  ably the most co
90a0: 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20 33 72  mpatible with 3r
90b0: 64 20 70 61 72 74 79 20 74 6f 6f 6c 73 2e 20 20  d party tools.  
90c0: 49 74 20 69 73 0d 0a 20 20 2f 2f 2f 20 6e 6f 74  It is..  /// not
90d0: 20 72 65 61 64 61 62 6c 65 20 61 73 20 74 65 78   readable as tex
90e0: 74 20 77 69 74 68 6f 75 74 20 70 6f 73 74 2d 70  t without post-p
90f0: 72 6f 63 65 73 73 69 6e 67 2e 0d 0a 20 20 2f 2f  rocessing...  //
9100: 2f 20 54 69 63 6b 73 20 6c 65 73 73 20 63 6f 6d  / Ticks less com
9110: 70 61 74 69 62 6c 65 20 77 69 74 68 20 33 72 64  patible with 3rd
9120: 20 70 61 72 74 79 20 74 6f 6f 6c 73 20 74 68 61   party tools tha
9130: 74 20 71 75 65 72 79 20 74 68 65 20 64 61 74 61  t query the data
9140: 62 61 73 65 2c 20 61 6e 64 20 72 65 6e 64 65 72  base, and render
9150: 73 20 74 68 65 20 44 61 74 65 54 69 6d 65 20 66  s the DateTime f
9160: 69 65 6c 64 20 75 6e 72 65 61 64 61 62 6c 65 20  ield unreadable 
9170: 61 73 20 74 65 78 74 20 77 69 74 68 6f 75 74 20  as text without 
9180: 70 6f 73 74 2d 70 72 6f 63 65 73 73 69 6e 67 2e  post-processing.
9190: 0d 0a 20 20 2f 2f 2f 20 0d 0a 20 20 2f 2f 2f 20  ..  /// ..  /// 
91a0: 54 68 65 20 70 72 65 66 65 72 72 65 64 20 6f 72  The preferred or
91b0: 64 65 72 20 6f 66 20 63 68 6f 6f 73 69 6e 67 20  der of choosing 
91c0: 61 20 64 61 74 65 74 69 6d 65 20 66 6f 72 6d 61  a datetime forma
91d0: 74 20 69 73 20 4a 75 6c 69 61 6e 44 61 79 2c 20  t is JulianDay, 
91e0: 49 53 4f 38 36 30 31 2c 20 61 6e 64 20 74 68 65  ISO8601, and the
91f0: 6e 20 54 69 63 6b 73 2e 20 20 54 69 63 6b 73 20  n Ticks.  Ticks 
9200: 69 73 20 6d 61 69 6e 6c 79 20 70 72 65 73 65 6e  is mainly presen
9210: 74 20 66 6f 72 20 6c 65 67 61 63 79 20 0d 0a 20  t for legacy .. 
9220: 20 2f 2f 2f 20 63 6f 64 65 20 73 75 70 70 6f 72   /// code suppor
9230: 74 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61  t...  /// </rema
9240: 72 6b 73 3e 0d 0a 20 20 70 75 62 6c 69 63 20 65  rks>..  public e
9250: 6e 75 6d 20 53 51 4c 69 74 65 44 61 74 65 46 6f  num SQLiteDateFo
9260: 72 6d 61 74 73 0d 0a 20 20 7b 0d 0a 20 20 20 20  rmats..  {..    
9270: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
9280: 20 20 20 2f 2f 2f 20 55 73 69 6e 67 20 74 69 63     /// Using tic
9290: 6b 73 20 69 73 20 6e 6f 74 20 72 65 63 6f 6d 6d  ks is not recomm
92a0: 65 6e 64 65 64 20 61 6e 64 20 69 73 20 6e 6f 74  ended and is not
92b0: 20 77 65 6c 6c 20 73 75 70 70 6f 72 74 65 64 20   well supported 
92c0: 77 69 74 68 20 4c 49 4e 51 2e 0d 0a 20 20 20 20  with LINQ...    
92d0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
92e0: 20 20 20 20 54 69 63 6b 73 20 3d 20 30 2c 0d 0a      Ticks = 0,..
92f0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
9300: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 49  >..    /// The I
9310: 53 4f 38 36 30 31 20 66 6f 72 6d 61 74 0d 0a 20  SO8601 format.. 
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 49 53 4f 38 36 30 31 20 3d  >..    ISO8601 =
9340: 20 31 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75   1,..    /// <su
9350: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
9360: 4a 75 6c 69 61 6e 44 61 79 20 66 6f 72 6d 61 74  JulianDay format
9370: 2c 20 77 68 69 63 68 20 69 73 20 77 68 61 74 20  , which is what 
9380: 53 51 4c 69 74 65 20 75 73 65 73 20 69 6e 74 65  SQLite uses inte
9390: 72 6e 61 6c 6c 79 0d 0a 20 20 20 20 2f 2f 2f 20  rnally..    /// 
93a0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
93b0: 4a 75 6c 69 61 6e 44 61 79 20 3d 20 32 2c 0d 0a  JulianDay = 2,..
93c0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
93d0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 77  >..    /// The w
93e0: 68 6f 6c 65 20 6e 75 6d 62 65 72 20 6f 66 20 73  hole number of s
93f0: 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 74 68 65  econds since the
9400: 20 55 6e 69 78 20 65 70 6f 63 68 20 28 4a 61 6e   Unix epoch (Jan
9410: 75 61 72 79 20 31 2c 20 31 39 37 30 29 2e 0d 0a  uary 1, 1970)...
9420: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
9430: 79 3e 0d 0a 20 20 20 20 55 6e 69 78 45 70 6f 63  y>..    UnixEpoc
9440: 68 20 3d 20 33 2c 0d 0a 20 20 20 20 2f 2f 2f 20  h = 3,..    /// 
9450: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
9460: 2f 2f 20 41 6e 79 20 63 75 6c 74 75 72 65 2d 69  // Any culture-i
9470: 6e 64 65 70 65 6e 64 65 6e 74 20 73 74 72 69 6e  ndependent strin
9480: 67 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65  g value that the
9490: 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
94a0: 63 61 6e 20 69 6e 74 65 72 70 72 65 74 20 61 73  can interpret as
94b0: 20 61 20 76 61 6c 69 64 20 44 61 74 65 54 69 6d   a valid DateTim
94c0: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
94d0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 49 6e 76 61  mmary>..    Inva
94e0: 72 69 61 6e 74 43 75 6c 74 75 72 65 20 3d 20 34  riantCulture = 4
94f0: 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ,..    /// <summ
9500: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6e  ary>..    /// An
9510: 79 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 74  y string value t
9520: 68 61 74 20 74 68 65 20 2e 4e 45 54 20 46 72 61  hat the .NET Fra
9530: 6d 65 77 6f 72 6b 20 63 61 6e 20 69 6e 74 65 72  mework can inter
9540: 70 72 65 74 20 61 73 20 61 20 76 61 6c 69 64 20  pret as a valid 
9550: 44 61 74 65 54 69 6d 65 20 75 73 69 6e 67 20 74  DateTime using t
9560: 68 65 20 63 75 72 72 65 6e 74 20 63 75 6c 74 75  he current cultu
9570: 72 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  re...    /// </s
9580: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 43 75 72  ummary>..    Cur
9590: 72 65 6e 74 43 75 6c 74 75 72 65 20 3d 20 35 2c  rentCulture = 5,
95a0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
95b0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ry>..    /// The
95c0: 20 64 65 66 61 75 6c 74 20 66 6f 72 6d 61 74 20   default format 
95d0: 66 6f 72 20 74 68 69 73 20 70 72 6f 76 69 64 65  for this provide
95e0: 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  r...    /// </su
95f0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 44 65 66 61  mmary>..    Defa
9600: 75 6c 74 20 3d 20 49 53 4f 38 36 30 31 0d 0a 20  ult = ISO8601.. 
9610: 20 7d 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d   }....  /// <sum
9620: 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69  mary>..  /// Thi
9630: 73 20 65 6e 75 6d 20 64 65 74 65 72 6d 69 6e 65  s enum determine
9640: 73 20 68 6f 77 20 53 51 4c 69 74 65 20 74 72 65  s how SQLite tre
9650: 61 74 73 20 69 74 73 20 6a 6f 75 72 6e 61 6c 20  ats its journal 
9660: 66 69 6c 65 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73  file...  /// </s
9670: 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 3c  ummary>..  /// <
9680: 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 2f 2f 2f 20  remarks>..  /// 
9690: 42 79 20 64 65 66 61 75 6c 74 20 53 51 4c 69 74  By default SQLit
96a0: 65 20 77 69 6c 6c 20 63 72 65 61 74 65 20 61 6e  e will create an
96b0: 64 20 64 65 6c 65 74 65 20 74 68 65 20 6a 6f 75  d delete the jou
96c0: 72 6e 61 6c 20 66 69 6c 65 20 77 68 65 6e 20 6e  rnal file when n
96d0: 65 65 64 65 64 20 64 75 72 69 6e 67 20 61 20 74  eeded during a t
96e0: 72 61 6e 73 61 63 74 69 6f 6e 2e 0d 0a 20 20 2f  ransaction...  /
96f0: 2f 2f 20 48 6f 77 65 76 65 72 2c 20 66 6f 72 20  // However, for 
9700: 73 6f 6d 65 20 63 6f 6d 70 75 74 65 72 73 20 72  some computers r
9710: 75 6e 6e 69 6e 67 20 63 65 72 74 61 69 6e 20 66  unning certain f
9720: 69 6c 65 73 79 73 74 65 6d 20 6d 6f 6e 69 74 6f  ilesystem monito
9730: 72 69 6e 67 20 74 6f 6f 6c 73 2c 20 74 68 65 20  ring tools, the 
9740: 72 61 70 69 64 0d 0a 20 20 2f 2f 2f 20 63 72 65  rapid..  /// cre
9750: 61 74 69 6f 6e 20 61 6e 64 20 64 65 6c 65 74 69  ation and deleti
9760: 6f 6e 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61  on of the journa
9770: 6c 20 66 69 6c 65 20 63 61 6e 20 63 61 75 73 65  l file can cause
9780: 20 74 68 6f 73 65 20 70 72 6f 67 72 61 6d 73 20   those programs 
9790: 74 6f 20 66 61 69 6c 2c 20 6f 72 20 74 6f 20 69  to fail, or to i
97a0: 6e 74 65 72 66 65 72 65 20 77 69 74 68 20 53 51  nterfere with SQ
97b0: 4c 69 74 65 2e 0d 0a 20 20 2f 2f 2f 20 0d 0a 20  Lite...  /// .. 
97c0: 20 2f 2f 2f 20 49 66 20 61 20 70 72 6f 67 72 61   /// If a progra
97d0: 6d 20 6f 72 20 76 69 72 75 73 20 73 63 61 6e 6e  m or virus scann
97e0: 65 72 20 69 73 20 69 6e 74 65 72 66 65 72 69 6e  er is interferin
97f0: 67 20 77 69 74 68 20 53 51 4c 69 74 65 27 73 20  g with SQLite's 
9800: 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 2c 20 79 6f  journal file, yo
9810: 75 20 6d 61 79 20 72 65 63 65 69 76 65 20 65 72  u may receive er
9820: 72 6f 72 73 20 6c 69 6b 65 20 22 75 6e 61 62 6c  rors like "unabl
9830: 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61  e to open databa
9840: 73 65 20 66 69 6c 65 22 0d 0a 20 20 2f 2f 2f 20  se file"..  /// 
9850: 77 68 65 6e 20 73 74 61 72 74 69 6e 67 20 61 20  when starting a 
9860: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 49 66  transaction.  If
9870: 20 74 68 69 73 20 69 73 20 68 61 70 70 65 6e 69   this is happeni
9880: 6e 67 2c 20 79 6f 75 20 6d 61 79 20 77 61 6e 74  ng, you may want
9890: 20 74 6f 20 63 68 61 6e 67 65 20 74 68 65 20 64   to change the d
98a0: 65 66 61 75 6c 74 20 6a 6f 75 72 6e 61 6c 20 6d  efault journal m
98b0: 6f 64 65 20 74 6f 20 50 65 72 73 69 73 74 2e 0d  ode to Persist..
98c0: 0a 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73  .  /// </remarks
98d0: 3e 0d 0a 20 20 70 75 62 6c 69 63 20 65 6e 75 6d  >..  public enum
98e0: 20 53 51 4c 69 74 65 4a 6f 75 72 6e 61 6c 4d 6f   SQLiteJournalMo
98f0: 64 65 45 6e 75 6d 0d 0a 20 20 7b 0d 0a 20 20 20  deEnum..  {..   
9900: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
9910: 20 20 20 20 2f 2f 2f 20 54 68 65 20 64 65 66 61      /// The defa
9920: 75 6c 74 20 6d 6f 64 65 2c 20 74 68 69 73 20 63  ult mode, this c
9930: 61 75 73 65 73 20 53 51 4c 69 74 65 20 74 6f 20  auses SQLite to 
9940: 75 73 65 20 74 68 65 20 65 78 69 73 74 69 6e 67  use the existing
9950: 20 6a 6f 75 72 6e 61 6c 69 6e 67 20 6d 6f 64 65   journaling mode
9960: 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
9970: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
9980: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 44 65 66 61  mmary>..    Defa
9990: 75 6c 74 20 3d 20 2d 31 2c 0d 0a 20 20 20 20 2f  ult = -1,..    /
99a0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
99b0: 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 77 69 6c    /// SQLite wil
99c0: 6c 20 63 72 65 61 74 65 20 61 6e 64 20 64 65 73  l create and des
99d0: 74 72 6f 79 20 74 68 65 20 6a 6f 75 72 6e 61 6c  troy the journal
99e0: 20 66 69 6c 65 20 61 73 2d 6e 65 65 64 65 64 2e   file as-needed.
99f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
9a00: 61 72 79 3e 0d 0a 20 20 20 20 44 65 6c 65 74 65  ary>..    Delete
9a10: 20 3d 20 30 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c   = 0,..    /// <
9a20: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
9a30: 2f 20 57 68 65 6e 20 74 68 69 73 20 69 73 20 73  / When this is s
9a40: 65 74 2c 20 53 51 4c 69 74 65 20 77 69 6c 6c 20  et, SQLite will 
9a50: 6b 65 65 70 20 74 68 65 20 6a 6f 75 72 6e 61 6c  keep the journal
9a60: 20 66 69 6c 65 20 65 76 65 6e 20 61 66 74 65 72   file even after
9a70: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 68   a transaction h
9a80: 61 73 20 63 6f 6d 70 6c 65 74 65 64 2e 20 20 49  as completed.  I
9a90: 74 27 73 20 63 6f 6e 74 65 6e 74 73 20 77 69 6c  t's contents wil
9aa0: 6c 20 62 65 20 65 72 61 73 65 64 2c 0d 0a 20 20  l be erased,..  
9ab0: 20 20 2f 2f 2f 20 61 6e 64 20 74 68 65 20 6a 6f    /// and the jo
9ac0: 75 72 6e 61 6c 20 72 65 2d 75 73 65 64 20 61 73  urnal re-used as
9ad0: 20 6f 66 74 65 6e 20 61 73 20 6e 65 65 64 65 64   often as needed
9ae0: 2e 20 20 49 66 20 69 74 20 69 73 20 64 65 6c 65  .  If it is dele
9af0: 74 65 64 2c 20 69 74 20 77 69 6c 6c 20 62 65 20  ted, it will be 
9b00: 72 65 63 72 65 61 74 65 64 20 74 68 65 20 6e 65  recreated the ne
9b10: 78 74 20 74 69 6d 65 20 69 74 20 69 73 20 6e 65  xt time it is ne
9b20: 65 64 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  eded...    /// <
9b30: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 50  /summary>..    P
9b40: 65 72 73 69 73 74 20 3d 20 31 2c 0d 0a 20 20 20  ersist = 1,..   
9b50: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
9b60: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6f 70 74      /// This opt
9b70: 69 6f 6e 20 64 69 73 61 62 6c 65 73 20 74 68 65  ion disables the
9b80: 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
9b90: 6c 20 65 6e 74 69 72 65 6c 79 2e 20 20 49 6e 74  l entirely.  Int
9ba0: 65 72 72 75 70 74 65 64 20 74 72 61 6e 73 61 63  errupted transac
9bb0: 74 69 6f 6e 73 20 6f 72 20 61 20 70 72 6f 67 72  tions or a progr
9bc0: 61 6d 20 63 72 61 73 68 20 63 61 6e 20 63 61 75  am crash can cau
9bd0: 73 65 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20  se database..   
9be0: 20 2f 2f 2f 20 63 6f 72 72 75 70 74 69 6f 6e 20   /// corruption 
9bf0: 69 6e 20 74 68 69 73 20 6d 6f 64 65 21 0d 0a 20  in this mode!.. 
9c00: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
9c10: 3e 0d 0a 20 20 20 20 4f 66 66 20 3d 20 32 2c 0d  >..    Off = 2,.
9c20: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
9c30: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 51 4c 69  y>..    /// SQLi
9c40: 74 65 20 77 69 6c 6c 20 74 72 75 6e 63 61 74 65  te will truncate
9c50: 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c   the journal fil
9c60: 65 20 74 6f 20 7a 65 72 6f 2d 6c 65 6e 67 74 68  e to zero-length
9c70: 20 69 6e 73 74 65 61 64 20 6f 66 20 64 65 6c 65   instead of dele
9c80: 74 69 6e 67 20 69 74 2e 0d 0a 20 20 20 20 2f 2f  ting it...    //
9c90: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
9ca0: 20 20 54 72 75 6e 63 61 74 65 20 3d 20 33 2c 0d    Truncate = 3,.
9cb0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
9cc0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 51 4c 69  y>..    /// SQLi
9cd0: 74 65 20 77 69 6c 6c 20 73 74 6f 72 65 20 74 68  te will store th
9ce0: 65 20 6a 6f 75 72 6e 61 6c 20 69 6e 20 76 6f 6c  e journal in vol
9cf0: 61 74 69 6c 65 20 52 41 4d 2e 20 20 54 68 69 73  atile RAM.  This
9d00: 20 73 61 76 65 73 20 64 69 73 6b 20 49 2f 4f 20   saves disk I/O 
9d10: 62 75 74 20 61 74 20 74 68 65 20 65 78 70 65 6e  but at the expen
9d20: 73 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 73  se of database s
9d30: 61 66 65 74 79 20 61 6e 64 20 69 6e 74 65 67 72  afety and integr
9d40: 69 74 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66  ity...    /// If
9d50: 20 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e   the application
9d60: 20 75 73 69 6e 67 20 53 51 4c 69 74 65 20 63 72   using SQLite cr
9d70: 61 73 68 65 73 20 69 6e 20 74 68 65 20 6d 69 64  ashes in the mid
9d80: 64 6c 65 20 6f 66 20 61 20 74 72 61 6e 73 61 63  dle of a transac
9d90: 74 69 6f 6e 20 77 68 65 6e 20 74 68 65 20 4d 45  tion when the ME
9da0: 4d 4f 52 59 20 6a 6f 75 72 6e 61 6c 69 6e 67 20  MORY journaling 
9db0: 6d 6f 64 65 20 69 73 20 73 65 74 2c 20 74 68 65  mode is set, the
9dc0: 6e 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 64  n the..    /// d
9dd0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 69 6c  atabase file wil
9de0: 6c 20 76 65 72 79 20 6c 69 6b 65 6c 79 20 67 6f  l very likely go
9df0: 20 63 6f 72 72 75 70 74 2e 0d 0a 20 20 20 20 2f   corrupt...    /
9e00: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
9e10: 20 20 20 4d 65 6d 6f 72 79 20 3d 20 34 2c 0d 0a     Memory = 4,..
9e20: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
9e30: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 51 4c 69 74  >..    /// SQLit
9e40: 65 20 75 73 65 73 20 61 20 77 72 69 74 65 2d 61  e uses a write-a
9e50: 68 65 61 64 20 6c 6f 67 20 69 6e 73 74 65 61 64  head log instead
9e60: 20 6f 66 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a   of a rollback j
9e70: 6f 75 72 6e 61 6c 20 74 6f 20 69 6d 70 6c 65 6d  ournal to implem
9e80: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ent transactions
9e90: 2e 20 20 54 68 65 20 57 41 4c 20 6a 6f 75 72 6e  .  The WAL journ
9ea0: 61 6c 69 6e 67 20 6d 6f 64 65 20 69 73 20 70 65  aling mode is pe
9eb0: 72 73 69 73 74 65 6e 74 3b 0d 0a 20 20 20 20 2f  rsistent;..    /
9ec0: 2f 2f 20 61 66 74 65 72 20 62 65 69 6e 67 20 73  // after being s
9ed0: 65 74 20 69 74 20 73 74 61 79 73 20 69 6e 20 65  et it stays in e
9ee0: 66 66 65 63 74 20 61 63 72 6f 73 73 20 6d 75 6c  ffect across mul
9ef0: 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 63  tiple database c
9f00: 6f 6e 6e 65 63 74 69 6f 6e 73 20 61 6e 64 20 61  onnections and a
9f10: 66 74 65 72 20 63 6c 6f 73 69 6e 67 20 61 6e 64  fter closing and
9f20: 20 72 65 6f 70 65 6e 69 6e 67 20 74 68 65 20 64   reopening the d
9f30: 61 74 61 62 61 73 65 2e 20 41 20 64 61 74 61 62  atabase. A datab
9f40: 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 20  ase..    /// in 
9f50: 57 41 4c 20 6a 6f 75 72 6e 61 6c 69 6e 67 20 6d  WAL journaling m
9f60: 6f 64 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20  ode can only be 
9f70: 61 63 63 65 73 73 65 64 20 62 79 20 53 51 4c 69  accessed by SQLi
9f80: 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e 30  te version 3.7.0
9f90: 20 6f 72 20 6c 61 74 65 72 2e 0d 0a 20 20 20 20   or later...    
9fa0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
9fb0: 20 20 20 20 57 61 6c 20 3d 20 35 0d 0a 20 20 7d      Wal = 5..  }
9fc0: 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ....  /// <summa
9fd0: 72 79 3e 0d 0a 20 20 2f 2f 2f 20 53 74 72 75 63  ry>..  /// Struc
9fe0: 74 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c  t used internall
9ff0: 79 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  y to determine t
a000: 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 61  he datatype of a
a010: 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 72 65 73   column in a res
a020: 75 6c 74 73 65 74 0d 0a 20 20 2f 2f 2f 20 3c 2f  ultset..  /// </
a030: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 69 6e 74 65  summary>..  inte
a040: 72 6e 61 6c 20 63 6c 61 73 73 20 53 51 4c 69 74  rnal class SQLit
a050: 65 54 79 70 65 0d 0a 20 20 7b 0d 0a 20 20 20 20  eType..  {..    
a060: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
a070: 20 20 20 2f 2f 2f 20 54 68 65 20 44 62 54 79 70     /// The DbTyp
a080: 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2c  e of the column,
a090: 20 6f 72 20 44 62 54 79 70 65 2e 4f 62 6a 65 63   or DbType.Objec
a0a0: 74 20 69 66 20 69 74 20 63 61 6e 6e 6f 74 20 62  t if it cannot b
a0b0: 65 20 64 65 74 65 72 6d 69 6e 65 64 0d 0a 20 20  e determined..  
a0c0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
a0d0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 44  ..    internal D
a0e0: 62 54 79 70 65 20 54 79 70 65 3b 0d 0a 20 20 20  bType Type;..   
a0f0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
a100: 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 66 66 69      /// The affi
a110: 6e 69 74 79 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  nity of a column
a120: 2c 20 75 73 65 64 20 66 6f 72 20 65 78 70 72 65  , used for expre
a130: 73 73 69 6f 6e 73 20 6f 72 20 77 68 65 6e 20 54  ssions or when T
a140: 79 70 65 20 69 73 20 44 62 54 79 70 65 2e 4f 62  ype is DbType.Ob
a150: 6a 65 63 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ject..    /// </
a160: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e  summary>..    in
a170: 74 65 72 6e 61 6c 20 54 79 70 65 41 66 66 69 6e  ternal TypeAffin
a180: 69 74 79 20 41 66 66 69 6e 69 74 79 3b 0d 0a 20  ity Affinity;.. 
a190: 20 7d 0d 0a 0d 0a 20 20 69 6e 74 65 72 6e 61 6c   }....  internal
a1a0: 20 73 74 72 75 63 74 20 53 51 4c 69 74 65 54 79   struct SQLiteTy
a1b0: 70 65 4e 61 6d 65 73 0d 0a 20 20 7b 0d 0a 20 20  peNames..  {..  
a1c0: 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74    internal SQLit
a1d0: 65 54 79 70 65 4e 61 6d 65 73 28 73 74 72 69 6e  eTypeNames(strin
a1e0: 67 20 6e 65 77 74 79 70 65 4e 61 6d 65 2c 20 44  g newtypeName, D
a1f0: 62 54 79 70 65 20 6e 65 77 64 61 74 61 54 79 70  bType newdataTyp
a200: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
a210: 20 74 79 70 65 4e 61 6d 65 20 3d 20 6e 65 77 74   typeName = newt
a220: 79 70 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ypeName;..      
a230: 64 61 74 61 54 79 70 65 20 3d 20 6e 65 77 64 61  dataType = newda
a240: 74 61 54 79 70 65 3b 0d 0a 20 20 20 20 7d 0d 0a  taType;..    }..
a250: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
a260: 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 3b 0d  tring typeName;.
a270: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 44 62  .    internal Db
a280: 54 79 70 65 20 64 61 74 61 54 79 70 65 3b 0d 0a  Type dataType;..
a290: 20 20 7d 0d 0a 0d 0a 20 20 69 6e 74 65 72 6e 61    }....  interna
a2a0: 6c 20 63 6c 61 73 73 20 54 79 70 65 4e 61 6d 65  l class TypeName
a2b0: 53 74 72 69 6e 67 43 6f 6d 70 61 72 65 72 20 3a  StringComparer :
a2c0: 20 49 45 71 75 61 6c 69 74 79 43 6f 6d 70 61 72   IEqualityCompar
a2d0: 65 72 3c 73 74 72 69 6e 67 3e 0d 0a 20 20 7b 0d  er<string>..  {.
a2e0: 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49 45 71  .    #region IEq
a2f0: 75 61 6c 69 74 79 43 6f 6d 70 61 72 65 72 3c 73  ualityComparer<s
a300: 74 72 69 6e 67 3e 20 4d 65 6d 62 65 72 73 0d 0a  tring> Members..
a310: 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
a320: 45 71 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 73  Equals(..      s
a330: 74 72 69 6e 67 20 6c 65 66 74 2c 0d 0a 20 20 20  tring left,..   
a340: 20 20 20 73 74 72 69 6e 67 20 72 69 67 68 74 0d     string right.
a350: 0a 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d  .      )..    {.
a360: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74  .      return St
a370: 72 69 6e 67 2e 45 71 75 61 6c 73 28 6c 65 66 74  ring.Equals(left
a380: 2c 20 72 69 67 68 74 2c 20 53 74 72 69 6e 67 43  , right, StringC
a390: 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
a3a0: 6c 49 67 6e 6f 72 65 43 61 73 65 29 3b 0d 0a 20  lIgnoreCase);.. 
a3b0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
a3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a400: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 70  ///////....    p
a410: 75 62 6c 69 63 20 69 6e 74 20 47 65 74 48 61 73  ublic int GetHas
a420: 68 43 6f 64 65 28 0d 0a 20 20 20 20 20 20 73 74  hCode(..      st
a430: 72 69 6e 67 20 76 61 6c 75 65 0d 0a 20 20 20 20  ring value..    
a440: 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
a450: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e    //..      // N
a460: 4f 54 45 3a 20 54 68 65 20 6f 6e 6c 79 20 74 68  OTE: The only th
a470: 69 6e 67 20 74 68 61 74 20 77 65 20 6d 75 73 74  ing that we must
a480: 20 67 75 61 72 61 6e 74 65 65 20 68 65 72 65 2c   guarantee here,
a490: 20 61 63 63 6f 72 64 69 6e 67 0d 0a 20 20 20 20   according..    
a4a0: 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 74 68    //       to th
a4b0: 65 20 4d 53 44 4e 20 64 6f 63 75 6d 65 6e 74 61  e MSDN documenta
a4c0: 74 69 6f 6e 20 66 6f 72 20 49 45 71 75 61 6c 69  tion for IEquali
a4d0: 74 79 43 6f 6d 70 61 72 65 72 2c 20 69 73 20 0d  tyComparer, is .
a4e0: 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20  .      //       
a4f0: 74 68 61 74 20 66 6f 72 20 74 77 6f 20 67 69 76  that for two giv
a500: 65 6e 20 73 74 72 69 6e 67 73 2c 20 69 66 20 45  en strings, if E
a510: 71 75 61 6c 73 20 72 65 74 75 72 6e 20 74 72 75  quals return tru
a520: 65 20 74 68 65 6e 20 0d 0a 20 20 20 20 20 20 2f  e then ..      /
a530: 2f 20 20 20 20 20 20 20 74 68 65 20 74 77 6f 20  /       the two 
a540: 73 74 72 69 6e 67 73 20 6d 75 73 74 20 68 61 73  strings must has
a550: 68 20 74 6f 20 74 68 65 20 73 61 6d 65 20 76 61  h to the same va
a560: 6c 75 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a  lue...      //..
a570: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
a580: 21 3d 20 6e 75 6c 6c 29 0d 0a 23 69 66 20 21 50  != null)..#if !P
a590: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
a5a0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
a5b0: 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 2e 54    return value.T
a5c0: 6f 4c 6f 77 65 72 49 6e 76 61 72 69 61 6e 74 28  oLowerInvariant(
a5d0: 29 2e 47 65 74 48 61 73 68 43 6f 64 65 28 29 3b  ).GetHashCode();
a5e0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
a5f0: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 2e 54 6f   return value.To
a600: 4c 6f 77 65 72 28 29 2e 47 65 74 48 61 73 68 43  Lower().GetHashC
a610: 6f 64 65 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ode();..#endif..
a620: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
a630: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
a640: 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
a650: 69 6f 6e 28 22 76 61 6c 75 65 22 29 3b 0d 0a 20  ion("value");.. 
a660: 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
a670: 67 69 6f 6e 0d 0a 20 20 7d 0d 0a 7d 0d 0a        gion..  }..}..