System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 97af3f3526366b49132a8f228c404efb84afbada:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 0d 0a 20  soft.com).. *.. 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a 2a   risk!.. *******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65 20  */....namespace 
0130: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
0140: 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20 53  te..{..  using S
0150: 79 73 74 65 6d 3b 0d 0a 0d 0a 23 69 66 20 21 4e  ystem;....#if !N
0160: 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
0170: 20 54 52 41 43 45 5f 57 41 52 4e 49 4e 47 0d 0a   TRACE_WARNING..
0180: 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44    using System.D
0190: 69 61 67 6e 6f 73 74 69 63 73 3b 0d 0a 23 65 6e  iagnostics;..#en
01a0: 64 69 66 0d 0a 0d 0a 20 20 75 73 69 6e 67 20 53  dif....  using S
01b0: 79 73 74 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e  ystem.Runtime.In
01c0: 74 65 72 6f 70 53 65 72 76 69 63 65 73 3b 0d 0a  teropServices;..
01d0: 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 43    using System.C
01e0: 6f 6c 6c 65 63 74 69 6f 6e 73 2e 47 65 6e 65 72  ollections.Gener
01f0: 69 63 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79 73  ic;..  using Sys
0200: 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74 69 6f  tem.Globalizatio
0210: 6e 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74  n;..  using Syst
0220: 65 6d 2e 54 65 78 74 3b 0d 0a 0d 0a 20 20 2f 2f  em.Text;....  //
0230: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f  / <summary>..  /
0240: 2f 2f 20 54 68 69 73 20 62 61 73 65 20 63 6c 61  // This base cla
0250: 73 73 20 70 72 6f 76 69 64 65 73 20 64 61 74 61  ss provides data
0260: 74 79 70 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20  type conversion 
0270: 73 65 72 76 69 63 65 73 20 66 6f 72 20 74 68 65  services for the
0280: 20 53 51 4c 69 74 65 20 70 72 6f 76 69 64 65 72   SQLite provider
0290: 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  ...  /// </summa
02a0: 72 79 3e 0d 0a 20 20 70 75 62 6c 69 63 20 61 62  ry>..  public ab
02b0: 73 74 72 61 63 74 20 63 6c 61 73 73 20 53 51 4c  stract class SQL
02c0: 69 74 65 43 6f 6e 76 65 72 74 0d 0a 20 20 7b 0d  iteConvert..  {.
02d0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
02e0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  y>..    /// The 
02f0: 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 55 6e  value for the Un
0300: 69 78 20 65 70 6f 63 68 20 28 65 2e 67 2e 20 4a  ix epoch (e.g. J
0310: 61 6e 75 61 72 79 20 31 2c 20 31 39 37 30 20 61  anuary 1, 1970 a
0320: 74 20 6d 69 64 6e 69 67 68 74 2c 20 69 6e 20 55  t midnight, in U
0330: 54 43 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  TC)...    /// </
0340: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72  summary>..    pr
0350: 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20 72  otected static r
0360: 65 61 64 6f 6e 6c 79 20 44 61 74 65 54 69 6d 65  eadonly DateTime
0370: 20 55 6e 69 78 45 70 6f 63 68 20 3d 0d 0a 20 20   UnixEpoch =..  
0380: 20 20 20 20 20 20 6e 65 77 20 44 61 74 65 54 69        new DateTi
0390: 6d 65 28 31 39 37 30 2c 20 31 2c 20 31 2c 20 30  me(1970, 1, 1, 0
03a0: 2c 20 30 2c 20 30 2c 20 44 61 74 65 54 69 6d 65  , 0, 0, DateTime
03b0: 4b 69 6e 64 2e 55 74 63 29 3b 0d 0a 0d 0a 20 20  Kind.Utc);....  
03c0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
03d0: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c  .    /// The val
03e0: 75 65 20 6f 66 20 74 68 65 20 4f 4c 45 20 41 75  ue of the OLE Au
03f0: 74 6f 6d 61 74 69 6f 6e 20 65 70 6f 63 68 20 72  tomation epoch r
0400: 65 70 72 65 73 65 6e 74 65 64 20 61 73 20 61 20  epresented as a 
0410: 4a 75 6c 69 61 6e 20 64 61 79 2e 0d 0a 20 20 20  Julian day...   
0420: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0430: 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61  .    private sta
0440: 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 64 6f 75  tic readonly dou
0450: 62 6c 65 20 4f 6c 65 41 75 74 6f 6d 61 74 69 6f  ble OleAutomatio
0460: 6e 45 70 6f 63 68 41 73 4a 75 6c 69 61 6e 44 61  nEpochAsJulianDa
0470: 79 20 3d 20 32 34 31 35 30 31 38 2e 35 3b 0d 0a  y = 2415018.5;..
0480: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
0490: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ry>..    /// The
04a0: 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 66   format string f
04b0: 6f 72 20 44 61 74 65 54 69 6d 65 20 76 61 6c 75  or DateTime valu
04c0: 65 73 20 77 68 65 6e 20 75 73 69 6e 67 20 74 68  es when using th
04d0: 65 20 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  e InvariantCultu
04e0: 72 65 20 6f 72 20 43 75 72 72 65 6e 74 43 75 6c  re or CurrentCul
04f0: 74 75 72 65 20 66 6f 72 6d 61 74 73 2e 0d 0a 20  ture formats... 
0500: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0510: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 63  >..    private c
0520: 6f 6e 73 74 20 73 74 72 69 6e 67 20 46 75 6c 6c  onst string Full
0530: 46 6f 72 6d 61 74 20 3d 20 22 79 79 79 79 2d 4d  Format = "yyyy-M
0540: 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 66 66  M-ddTHH:mm:ss.ff
0550: 66 66 66 66 66 4b 22 3b 0d 0a 0d 0a 20 20 20 20  fffffK";....    
0560: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
0570: 20 20 20 2f 2f 2f 20 41 6e 20 61 72 72 61 79 20     /// An array 
0580: 6f 66 20 49 53 4f 38 36 30 31 20 64 61 74 65 74  of ISO8601 datet
0590: 69 6d 65 20 66 6f 72 6d 61 74 73 20 77 65 20 73  ime formats we s
05a0: 75 70 70 6f 72 74 20 63 6f 6e 76 65 72 73 69 6f  upport conversio
05b0: 6e 20 66 72 6f 6d 0d 0a 20 20 20 20 2f 2f 2f 20  n from..    /// 
05c0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
05d0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
05e0: 74 72 69 6e 67 5b 5d 20 5f 64 61 74 65 74 69 6d  tring[] _datetim
05f0: 65 46 6f 72 6d 61 74 73 20 3d 20 6e 65 77 20 73  eFormats = new s
0600: 74 72 69 6e 67 5b 5d 20 7b 0d 0a 20 20 20 20 20  tring[] {..     
0610: 20 22 54 48 48 6d 6d 73 73 4b 22 2c 0d 0a 20 20   "THHmmssK",..  
0620: 20 20 20 20 22 54 48 48 6d 6d 4b 22 2c 0d 0a 20      "THHmmK",.. 
0630: 20 20 20 20 20 22 48 48 3a 6d 6d 3a 73 73 2e 46       "HH:mm:ss.F
0640: 46 46 46 46 46 46 4b 22 2c 0d 0a 20 20 20 20 20  FFFFFFK",..     
0650: 20 22 48 48 3a 6d 6d 3a 73 73 4b 22 2c 0d 0a 20   "HH:mm:ssK",.. 
0660: 20 20 20 20 20 22 48 48 3a 6d 6d 4b 22 2c 0d 0a       "HH:mmK",..
0670: 20 20 20 20 20 20 22 79 79 79 79 2d 4d 4d 2d 64        "yyyy-MM-d
0680: 64 20 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46  d HH:mm:ss.FFFFF
0690: 46 46 4b 22 2c 20 2f 2a 20 4e 4f 54 45 3a 20 55  FFK", /* NOTE: U
06a0: 54 43 20 64 65 66 61 75 6c 74 20 28 35 29 2e 20  TC default (5). 
06b0: 2a 2f 0d 0a 20 20 20 20 20 20 22 79 79 79 79 2d  */..      "yyyy-
06c0: 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 4b 22  MM-dd HH:mm:ssK"
06d0: 2c 0d 0a 20 20 20 20 20 20 22 79 79 79 79 2d 4d  ,..      "yyyy-M
06e0: 4d 2d 64 64 20 48 48 3a 6d 6d 4b 22 2c 0d 0a 20  M-dd HH:mmK",.. 
06f0: 20 20 20 20 20 22 79 79 79 79 2d 4d 4d 2d 64 64       "yyyy-MM-dd
0700: 54 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46  THH:mm:ss.FFFFFF
0710: 46 4b 22 2c 0d 0a 20 20 20 20 20 20 22 79 79 79  FK",..      "yyy
0720: 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 4b 22 2c  y-MM-ddTHH:mmK",
0730: 0d 0a 20 20 20 20 20 20 22 79 79 79 79 2d 4d 4d  ..      "yyyy-MM
0740: 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 4b 22 2c 0d  -ddTHH:mm:ssK",.
0750: 0a 20 20 20 20 20 20 22 79 79 79 79 4d 4d 64 64  .      "yyyyMMdd
0760: 48 48 6d 6d 73 73 4b 22 2c 0d 0a 20 20 20 20 20  HHmmssK",..     
0770: 20 22 79 79 79 79 4d 4d 64 64 48 48 6d 6d 4b 22   "yyyyMMddHHmmK"
0780: 2c 0d 0a 20 20 20 20 20 20 22 79 79 79 79 4d 4d  ,..      "yyyyMM
0790: 64 64 54 48 48 6d 6d 73 73 46 46 46 46 46 46 46  ddTHHmmssFFFFFFF
07a0: 4b 22 2c 0d 0a 20 20 20 20 20 20 22 54 48 48 6d  K",..      "THHm
07b0: 6d 73 73 22 2c 0d 0a 20 20 20 20 20 20 22 54 48  mss",..      "TH
07c0: 48 6d 6d 22 2c 0d 0a 20 20 20 20 20 20 22 48 48  Hmm",..      "HH
07d0: 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 22 2c  :mm:ss.FFFFFFF",
07e0: 0d 0a 20 20 20 20 20 20 22 48 48 3a 6d 6d 3a 73  ..      "HH:mm:s
07f0: 73 22 2c 0d 0a 20 20 20 20 20 20 22 48 48 3a 6d  s",..      "HH:m
0800: 6d 22 2c 0d 0a 20 20 20 20 20 20 22 79 79 79 79  m",..      "yyyy
0810: 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 2e  -MM-dd HH:mm:ss.
0820: 46 46 46 46 46 46 46 22 2c 20 2f 2a 20 4e 4f 54  FFFFFFF", /* NOT
0830: 45 3a 20 4e 6f 6e 2d 55 54 43 20 64 65 66 61 75  E: Non-UTC defau
0840: 6c 74 20 28 31 39 29 2e 20 2a 2f 0d 0a 20 20 20  lt (19). */..   
0850: 20 20 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 48     "yyyy-MM-dd H
0860: 48 3a 6d 6d 3a 73 73 22 2c 0d 0a 20 20 20 20 20  H:mm:ss",..     
0870: 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a   "yyyy-MM-dd HH:
0880: 6d 6d 22 2c 0d 0a 20 20 20 20 20 20 22 79 79 79  mm",..      "yyy
0890: 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73  y-MM-ddTHH:mm:ss
08a0: 2e 46 46 46 46 46 46 46 22 2c 0d 0a 20 20 20 20  .FFFFFFF",..    
08b0: 20 20 22 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48    "yyyy-MM-ddTHH
08c0: 3a 6d 6d 22 2c 0d 0a 20 20 20 20 20 20 22 79 79  :mm",..      "yy
08d0: 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73  yy-MM-ddTHH:mm:s
08e0: 73 22 2c 0d 0a 20 20 20 20 20 20 22 79 79 79 79  s",..      "yyyy
08f0: 4d 4d 64 64 48 48 6d 6d 73 73 22 2c 0d 0a 20 20  MMddHHmmss",..  
0900: 20 20 20 20 22 79 79 79 79 4d 4d 64 64 48 48 6d      "yyyyMMddHHm
0910: 6d 22 2c 0d 0a 20 20 20 20 20 20 22 79 79 79 79  m",..      "yyyy
0920: 4d 4d 64 64 54 48 48 6d 6d 73 73 46 46 46 46 46  MMddTHHmmssFFFFF
0930: 46 46 22 2c 0d 0a 20 20 20 20 20 20 22 79 79 79  FF",..      "yyy
0940: 79 2d 4d 4d 2d 64 64 22 2c 0d 0a 20 20 20 20 20  y-MM-dd",..     
0950: 20 22 79 79 79 79 4d 4d 64 64 22 2c 0d 0a 20 20   "yyyyMMdd",..  
0960: 20 20 20 20 22 79 79 2d 4d 4d 2d 64 64 22 0d 0a      "yy-MM-dd"..
0970: 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 2f 2f      };....    //
0980: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0990: 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65 72 6e 61   /// The interna
09a0: 6c 20 64 65 66 61 75 6c 74 20 66 6f 72 6d 61 74  l default format
09b0: 20 66 6f 72 20 55 54 43 20 44 61 74 65 54 69 6d   for UTC DateTim
09c0: 65 20 76 61 6c 75 65 73 20 77 68 65 6e 20 63 6f  e values when co
09d0: 6e 76 65 72 74 69 6e 67 0d 0a 20 20 20 20 2f 2f  nverting..    //
09e0: 2f 20 74 6f 20 61 20 73 74 72 69 6e 67 2e 0d 0a  / to a string...
09f0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0a00: 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  y>..    private 
0a10: 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20  static readonly 
0a20: 73 74 72 69 6e 67 20 5f 64 61 74 65 74 69 6d 65  string _datetime
0a30: 46 6f 72 6d 61 74 55 74 63 20 3d 20 5f 64 61 74  FormatUtc = _dat
0a40: 65 74 69 6d 65 46 6f 72 6d 61 74 73 5b 35 5d 3b  etimeFormats[5];
0a50: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
0a60: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
0a70: 68 65 20 69 6e 74 65 72 6e 61 6c 20 64 65 66 61  he internal defa
0a80: 75 6c 74 20 66 6f 72 6d 61 74 20 66 6f 72 20 6c  ult format for l
0a90: 6f 63 61 6c 20 44 61 74 65 54 69 6d 65 20 76 61  ocal DateTime va
0aa0: 6c 75 65 73 20 77 68 65 6e 20 63 6f 6e 76 65 72  lues when conver
0ab0: 74 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 74 6f  ting..    /// to
0ac0: 20 61 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20   a string...    
0ad0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
0ae0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
0af0: 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69  ic readonly stri
0b00: 6e 67 20 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d  ng _datetimeForm
0b10: 61 74 4c 6f 63 61 6c 20 3d 20 5f 64 61 74 65 74  atLocal = _datet
0b20: 69 6d 65 46 6f 72 6d 61 74 73 5b 31 39 5d 3b 0d  imeFormats[19];.
0b30: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
0b40: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6e  ary>..    /// An
0b50: 20 55 54 46 2d 38 20 45 6e 63 6f 64 69 6e 67 20   UTF-8 Encoding 
0b60: 69 6e 73 74 61 6e 63 65 2c 20 73 6f 20 77 65 20  instance, so we 
0b70: 63 61 6e 20 63 6f 6e 76 65 72 74 20 73 74 72 69  can convert stri
0b80: 6e 67 73 20 74 6f 20 61 6e 64 20 66 72 6f 6d 20  ngs to and from 
0b90: 55 54 46 2d 38 0d 0a 20 20 20 20 2f 2f 2f 20 3c  UTF-8..    /// <
0ba0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
0bb0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 45 6e  rivate static En
0bc0: 63 6f 64 69 6e 67 20 5f 75 74 66 38 20 3d 20 6e  coding _utf8 = n
0bd0: 65 77 20 55 54 46 38 45 6e 63 6f 64 69 6e 67 28  ew UTF8Encoding(
0be0: 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  );..    /// <sum
0bf0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
0c00: 68 65 20 64 65 66 61 75 6c 74 20 44 61 74 65 54  he default DateT
0c10: 69 6d 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 74  ime format for t
0c20: 68 69 73 20 69 6e 73 74 61 6e 63 65 0d 0a 20 20  his instance..  
0c30: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0c40: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53  ..    internal S
0c50: 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73  QLiteDateFormats
0c60: 20 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74   _datetimeFormat
0c70: 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ;..    /// <summ
0c80: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
0c90: 65 20 64 65 66 61 75 6c 74 20 44 61 74 65 54 69  e default DateTi
0ca0: 6d 65 4b 69 6e 64 20 66 6f 72 20 74 68 69 73 20  meKind for this 
0cb0: 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f  instance...    /
0cc0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0cd0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 44 61 74 65     internal Date
0ce0: 54 69 6d 65 4b 69 6e 64 20 5f 64 61 74 65 74 69  TimeKind _dateti
0cf0: 6d 65 4b 69 6e 64 3b 0d 0a 20 20 20 20 2f 2f 2f  meKind;..    ///
0d00: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
0d10: 2f 2f 2f 20 49 6e 69 74 69 61 6c 69 7a 65 73 20  /// Initializes 
0d20: 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 63  the conversion c
0d30: 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  lass..    /// </
0d40: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0d50: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
0d60: 6d 74 22 3e 54 68 65 20 64 65 66 61 75 6c 74 20  mt">The default 
0d70: 64 61 74 65 2f 74 69 6d 65 20 66 6f 72 6d 61 74  date/time format
0d80: 20 74 6f 20 75 73 65 20 66 6f 72 20 74 68 69 73   to use for this
0d90: 20 69 6e 73 74 61 6e 63 65 3c 2f 70 61 72 61 6d   instance</param
0da0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
0db0: 6d 20 6e 61 6d 65 3d 22 6b 69 6e 64 22 3e 54 68  m name="kind">Th
0dc0: 65 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20 74  e DateTimeKind t
0dd0: 6f 20 75 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  o use.</param>..
0de0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c      internal SQL
0df0: 69 74 65 43 6f 6e 76 65 72 74 28 53 51 4c 69 74  iteConvert(SQLit
0e00: 65 44 61 74 65 46 6f 72 6d 61 74 73 20 66 6d 74  eDateFormats fmt
0e10: 2c 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20 6b  , DateTimeKind k
0e20: 69 6e 64 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ind)..    {..   
0e30: 20 20 20 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d     _datetimeForm
0e40: 61 74 20 3d 20 66 6d 74 3b 0d 0a 20 20 20 20 20  at = fmt;..     
0e50: 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 20 3d   _datetimeKind =
0e60: 20 6b 69 6e 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d   kind;..    }...
0e70: 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 55 54 46  .    #region UTF
0e80: 2d 38 20 43 6f 6e 76 65 72 73 69 6f 6e 20 46 75  -8 Conversion Fu
0e90: 6e 63 74 69 6f 6e 73 0d 0a 20 20 20 20 2f 2f 2f  nctions..    ///
0ea0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
0eb0: 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 73  /// Converts a s
0ec0: 74 72 69 6e 67 20 74 6f 20 61 20 55 54 46 2d 38  tring to a UTF-8
0ed0: 20 65 6e 63 6f 64 65 64 20 62 79 74 65 20 61 72   encoded byte ar
0ee0: 72 61 79 20 73 69 7a 65 64 20 74 6f 20 69 6e 63  ray sized to inc
0ef0: 6c 75 64 65 20 61 20 6e 75 6c 6c 2d 74 65 72 6d  lude a null-term
0f00: 69 6e 61 74 69 6e 67 20 63 68 61 72 61 63 74 65  inating characte
0f10: 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  r...    /// </su
0f20: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
0f30: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 6f 75  <param name="sou
0f40: 72 63 65 54 65 78 74 22 3e 54 68 65 20 73 74 72  rceText">The str
0f50: 69 6e 67 20 74 6f 20 63 6f 6e 76 65 72 74 20 74  ing to convert t
0f60: 6f 20 55 54 46 2d 38 3c 2f 70 61 72 61 6d 3e 0d  o UTF-8</param>.
0f70: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
0f80: 73 3e 41 20 62 79 74 65 20 61 72 72 61 79 20 63  s>A byte array c
0f90: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 63 6f  ontaining the co
0fa0: 6e 76 65 72 74 65 64 20 73 74 72 69 6e 67 20 70  nverted string p
0fb0: 6c 75 73 20 61 6e 20 65 78 74 72 61 20 30 20 74  lus an extra 0 t
0fc0: 65 72 6d 69 6e 61 74 69 6e 67 20 62 79 74 65 20  erminating byte 
0fd0: 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
0fe0: 65 20 61 72 72 61 79 2e 3c 2f 72 65 74 75 72 6e  e array.</return
0ff0: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73  s>..    public s
1000: 74 61 74 69 63 20 62 79 74 65 5b 5d 20 54 6f 55  tatic byte[] ToU
1010: 54 46 38 28 73 74 72 69 6e 67 20 73 6f 75 72 63  TF8(string sourc
1020: 65 54 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20  eText)..    {.. 
1030: 20 20 20 20 20 42 79 74 65 5b 5d 20 62 79 74 65       Byte[] byte
1040: 41 72 72 61 79 3b 0d 0a 20 20 20 20 20 20 69 6e  Array;..      in
1050: 74 20 6e 6c 65 6e 20 3d 20 5f 75 74 66 38 2e 47  t nlen = _utf8.G
1060: 65 74 42 79 74 65 43 6f 75 6e 74 28 73 6f 75 72  etByteCount(sour
1070: 63 65 54 65 78 74 29 20 2b 20 31 3b 0d 0a 0d 0a  ceText) + 1;....
1080: 20 20 20 20 20 20 62 79 74 65 41 72 72 61 79 20        byteArray 
1090: 3d 20 6e 65 77 20 62 79 74 65 5b 6e 6c 65 6e 5d  = new byte[nlen]
10a0: 3b 0d 0a 20 20 20 20 20 20 6e 6c 65 6e 20 3d 20  ;..      nlen = 
10b0: 5f 75 74 66 38 2e 47 65 74 42 79 74 65 73 28 73  _utf8.GetBytes(s
10c0: 6f 75 72 63 65 54 65 78 74 2c 20 30 2c 20 73 6f  ourceText, 0, so
10d0: 75 72 63 65 54 65 78 74 2e 4c 65 6e 67 74 68 2c  urceText.Length,
10e0: 20 62 79 74 65 41 72 72 61 79 2c 20 30 29 3b 0d   byteArray, 0);.
10f0: 0a 20 20 20 20 20 20 62 79 74 65 41 72 72 61 79  .      byteArray
1100: 5b 6e 6c 65 6e 5d 20 3d 20 30 3b 0d 0a 0d 0a 20  [nlen] = 0;.... 
1110: 20 20 20 20 20 72 65 74 75 72 6e 20 62 79 74 65       return byte
1120: 41 72 72 61 79 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Array;..    }...
1130: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
1140: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76  y>..    /// Conv
1150: 65 72 74 20 61 20 44 61 74 65 54 69 6d 65 20 74  ert a DateTime t
1160: 6f 20 61 20 55 54 46 2d 38 20 65 6e 63 6f 64 65  o a UTF-8 encode
1170: 64 2c 20 7a 65 72 6f 2d 74 65 72 6d 69 6e 61 74  d, zero-terminat
1180: 65 64 20 62 79 74 65 20 61 72 72 61 79 2e 0d 0a  ed byte array...
1190: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
11a0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d  y>..    /// <rem
11b0: 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  arks>..    /// T
11c0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
11d0: 61 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 66 75  a convenience fu
11e0: 6e 63 74 69 6f 6e 2c 20 77 68 69 63 68 20 66 69  nction, which fi
11f0: 72 73 74 20 63 61 6c 6c 73 20 54 6f 53 74 72 69  rst calls ToStri
1200: 6e 67 28 29 20 6f 6e 20 74 68 65 20 44 61 74 65  ng() on the Date
1210: 54 69 6d 65 2c 20 61 6e 64 20 74 68 65 6e 20 63  Time, and then c
1220: 61 6c 6c 73 20 54 6f 55 54 46 38 28 29 20 77 69  alls ToUTF8() wi
1230: 74 68 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20  th the..    /// 
1240: 73 74 72 69 6e 67 20 72 65 73 75 6c 74 2e 0d 0a  string result...
1250: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b      /// </remark
1260: 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  s>..    /// <par
1270: 61 6d 20 6e 61 6d 65 3d 22 64 61 74 65 54 69 6d  am name="dateTim
1280: 65 56 61 6c 75 65 22 3e 54 68 65 20 44 61 74 65  eValue">The Date
1290: 54 69 6d 65 20 74 6f 20 63 6f 6e 76 65 72 74 2e  Time to convert.
12a0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
12b0: 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 55  / <returns>The U
12c0: 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 73 74 72  TF-8 encoded str
12d0: 69 6e 67 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61  ing, including a
12e0: 20 30 20 74 65 72 6d 69 6e 61 74 69 6e 67 20 62   0 terminating b
12f0: 79 74 65 20 61 74 20 74 68 65 20 65 6e 64 20 6f  yte at the end o
1300: 66 20 74 68 65 20 61 72 72 61 79 2e 3c 2f 72 65  f the array.</re
1310: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
1320: 69 63 20 62 79 74 65 5b 5d 20 54 6f 55 54 46 38  ic byte[] ToUTF8
1330: 28 44 61 74 65 54 69 6d 65 20 64 61 74 65 54 69  (DateTime dateTi
1340: 6d 65 56 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  meValue)..    {.
1350: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f  .      return To
1360: 55 54 46 38 28 54 6f 53 74 72 69 6e 67 28 64 61  UTF8(ToString(da
1370: 74 65 54 69 6d 65 56 61 6c 75 65 29 29 3b 0d 0a  teTimeValue));..
1380: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
1390: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
13a0: 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 55  /// Converts a U
13b0: 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 49 6e 74  TF-8 encoded Int
13c0: 50 74 72 20 6f 66 20 74 68 65 20 73 70 65 63 69  Ptr of the speci
13d0: 66 69 65 64 20 6c 65 6e 67 74 68 20 69 6e 74 6f  fied length into
13e0: 20 61 20 2e 4e 45 54 20 73 74 72 69 6e 67 0d 0a   a .NET string..
13f0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1400: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
1410: 61 6d 20 6e 61 6d 65 3d 22 6e 61 74 69 76 65 73  am name="natives
1420: 74 72 69 6e 67 22 3e 54 68 65 20 70 6f 69 6e 74  tring">The point
1430: 65 72 20 74 6f 20 74 68 65 20 6d 65 6d 6f 72 79  er to the memory
1440: 20 77 68 65 72 65 20 74 68 65 20 55 54 46 2d 38   where the UTF-8
1450: 20 73 74 72 69 6e 67 20 69 73 20 65 6e 63 6f 64   string is encod
1460: 65 64 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  ed</param>..    
1470: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1480: 22 6e 61 74 69 76 65 73 74 72 69 6e 67 6c 65 6e  "nativestringlen
1490: 22 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  ">The number of 
14a0: 62 79 74 65 73 20 74 6f 20 64 65 63 6f 64 65 3c  bytes to decode<
14b0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
14c0: 20 3c 72 65 74 75 72 6e 73 3e 41 20 73 74 72 69   <returns>A stri
14d0: 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ng containing th
14e0: 65 20 74 72 61 6e 73 6c 61 74 65 64 20 63 68 61  e translated cha
14f0: 72 61 63 74 65 72 28 73 29 3c 2f 72 65 74 75 72  racter(s)</retur
1500: 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
1510: 76 69 72 74 75 61 6c 20 73 74 72 69 6e 67 20 54  virtual string T
1520: 6f 53 74 72 69 6e 67 28 49 6e 74 50 74 72 20 6e  oString(IntPtr n
1530: 61 74 69 76 65 73 74 72 69 6e 67 2c 20 69 6e 74  ativestring, int
1540: 20 6e 61 74 69 76 65 73 74 72 69 6e 67 6c 65 6e   nativestringlen
1550: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
1560: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
1570: 69 6e 67 28 6e 61 74 69 76 65 73 74 72 69 6e 67  ing(nativestring
1580: 2c 20 6e 61 74 69 76 65 73 74 72 69 6e 67 6c 65  , nativestringle
1590: 6e 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  n);..    }....  
15a0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
15b0: 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74  .    /// Convert
15c0: 73 20 61 20 55 54 46 2d 38 20 65 6e 63 6f 64 65  s a UTF-8 encode
15d0: 64 20 49 6e 74 50 74 72 20 6f 66 20 74 68 65 20  d IntPtr of the 
15e0: 73 70 65 63 69 66 69 65 64 20 6c 65 6e 67 74 68  specified length
15f0: 20 69 6e 74 6f 20 61 20 2e 4e 45 54 20 73 74 72   into a .NET str
1600: 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ing..    /// </s
1610: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
1620: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61   <param name="na
1630: 74 69 76 65 73 74 72 69 6e 67 22 3e 54 68 65 20  tivestring">The 
1640: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6d  pointer to the m
1650: 65 6d 6f 72 79 20 77 68 65 72 65 20 74 68 65 20  emory where the 
1660: 55 54 46 2d 38 20 73 74 72 69 6e 67 20 69 73 20  UTF-8 string is 
1670: 65 6e 63 6f 64 65 64 3c 2f 70 61 72 61 6d 3e 0d  encoded</param>.
1680: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1690: 6e 61 6d 65 3d 22 6e 61 74 69 76 65 73 74 72 69  name="nativestri
16a0: 6e 67 6c 65 6e 22 3e 54 68 65 20 6e 75 6d 62 65  nglen">The numbe
16b0: 72 20 6f 66 20 62 79 74 65 73 20 74 6f 20 64 65  r of bytes to de
16c0: 63 6f 64 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  code</param>..  
16d0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41    /// <returns>A
16e0: 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69   string containi
16f0: 6e 67 20 74 68 65 20 74 72 61 6e 73 6c 61 74 65  ng the translate
1700: 64 20 63 68 61 72 61 63 74 65 72 28 73 29 3c 2f  d character(s)</
1710: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75  returns>..    pu
1720: 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69  blic static stri
1730: 6e 67 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  ng UTF8ToString(
1740: 49 6e 74 50 74 72 20 6e 61 74 69 76 65 73 74 72  IntPtr nativestr
1750: 69 6e 67 2c 20 69 6e 74 20 6e 61 74 69 76 65 73  ing, int natives
1760: 74 72 69 6e 67 6c 65 6e 29 0d 0a 20 20 20 20 7b  tringlen)..    {
1770: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 61 74 69  ..      if (nati
1780: 76 65 73 74 72 69 6e 67 20 3d 3d 20 49 6e 74 50  vestring == IntP
1790: 74 72 2e 5a 65 72 6f 20 7c 7c 20 6e 61 74 69 76  tr.Zero || nativ
17a0: 65 73 74 72 69 6e 67 6c 65 6e 20 3d 3d 20 30 29  estringlen == 0)
17b0: 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 45   return String.E
17c0: 6d 70 74 79 3b 0d 0a 20 20 20 20 20 20 69 66 20  mpty;..      if 
17d0: 28 6e 61 74 69 76 65 73 74 72 69 6e 67 6c 65 6e  (nativestringlen
17e0: 20 3c 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a   < 0)..      {..
17f0: 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 73 74          nativest
1800: 72 69 6e 67 6c 65 6e 20 3d 20 30 3b 0d 0a 0d 0a  ringlen = 0;....
1810: 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 4d          while (M
1820: 61 72 73 68 61 6c 2e 52 65 61 64 42 79 74 65 28  arshal.ReadByte(
1830: 6e 61 74 69 76 65 73 74 72 69 6e 67 2c 20 6e 61  nativestring, na
1840: 74 69 76 65 73 74 72 69 6e 67 6c 65 6e 29 20 21  tivestringlen) !
1850: 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
1860: 6e 61 74 69 76 65 73 74 72 69 6e 67 6c 65 6e 2b  nativestringlen+
1870: 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  +;....        if
1880: 20 28 6e 61 74 69 76 65 73 74 72 69 6e 67 6c 65   (nativestringle
1890: 6e 20 3d 3d 20 30 29 20 72 65 74 75 72 6e 20 53  n == 0) return S
18a0: 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 20 20  tring.Empty;..  
18b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 62      }....      b
18c0: 79 74 65 5b 5d 20 62 79 74 65 41 72 72 61 79 20  yte[] byteArray 
18d0: 3d 20 6e 65 77 20 62 79 74 65 5b 6e 61 74 69 76  = new byte[nativ
18e0: 65 73 74 72 69 6e 67 6c 65 6e 5d 3b 0d 0a 0d 0a  estringlen];....
18f0: 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f        Marshal.Co
1900: 70 79 28 6e 61 74 69 76 65 73 74 72 69 6e 67 2c  py(nativestring,
1910: 20 62 79 74 65 41 72 72 61 79 2c 20 30 2c 20 6e   byteArray, 0, n
1920: 61 74 69 76 65 73 74 72 69 6e 67 6c 65 6e 29 3b  ativestringlen);
1930: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
1940: 20 5f 75 74 66 38 2e 47 65 74 53 74 72 69 6e 67   _utf8.GetString
1950: 28 62 79 74 65 41 72 72 61 79 2c 20 30 2c 20 6e  (byteArray, 0, n
1960: 61 74 69 76 65 73 74 72 69 6e 67 6c 65 6e 29 3b  ativestringlen);
1970: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 0d 0a 20 20 20  ..    }......   
1980: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1990: 20 20 20 23 72 65 67 69 6f 6e 20 44 61 74 65 54     #region DateT
19a0: 69 6d 65 20 43 6f 6e 76 65 72 73 69 6f 6e 20 46  ime Conversion F
19b0: 75 6e 63 74 69 6f 6e 73 0d 0a 20 20 20 20 2f 2f  unctions..    //
19c0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
19d0: 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20   /// Converts a 
19e0: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 44 61  string into a Da
19f0: 74 65 54 69 6d 65 2c 20 75 73 69 6e 67 20 74 68  teTime, using th
1a00: 65 20 63 75 72 72 65 6e 74 20 44 61 74 65 54 69  e current DateTi
1a10: 6d 65 46 6f 72 6d 61 74 20 73 70 65 63 69 66 69  meFormat specifi
1a20: 65 64 20 66 6f 72 20 74 68 65 20 63 6f 6e 6e 65  ed for the conne
1a30: 63 74 69 6f 6e 20 77 68 65 6e 20 69 74 20 77 61  ction when it wa
1a40: 73 20 6f 70 65 6e 65 64 2e 0d 0a 20 20 20 20 2f  s opened...    /
1a50: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1a60: 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e     /// <remarks>
1a70: 0d 0a 20 20 20 20 2f 2f 2f 20 41 63 63 65 70 74  ..    /// Accept
1a80: 61 62 6c 65 20 49 53 4f 38 36 30 31 20 44 61 74  able ISO8601 Dat
1a90: 65 54 69 6d 65 20 66 6f 72 6d 61 74 73 20 61 72  eTime formats ar
1aa0: 65 3a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 6c 69 73  e:..    /// <lis
1ab0: 74 20 74 79 70 65 3d 22 62 75 6c 6c 65 74 22 3e  t type="bullet">
1ac0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e  ..    /// <item>
1ad0: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 54 48 48  <description>THH
1ae0: 6d 6d 73 73 4b 3c 2f 64 65 73 63 72 69 70 74 69  mmssK</descripti
1af0: 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20  on></item>..    
1b00: 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72  /// <item><descr
1b10: 69 70 74 69 6f 6e 3e 54 48 48 6d 6d 4b 3c 2f 64  iption>THHmmK</d
1b20: 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65  escription></ite
1b30: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65  m>..    /// <ite
1b40: 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 48  m><description>H
1b50: 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b  H:mm:ss.FFFFFFFK
1b60: 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f  </description></
1b70: 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  item>..    /// <
1b80: 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f  item><descriptio
1b90: 6e 3e 48 48 3a 6d 6d 3a 73 73 4b 3c 2f 64 65 73  n>HH:mm:ssK</des
1ba0: 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e  cription></item>
1bb0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e  ..    /// <item>
1bc0: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 48 48 3a  <description>HH:
1bd0: 6d 6d 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e  mmK</description
1be0: 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f  ></item>..    //
1bf0: 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70  / <item><descrip
1c00: 74 69 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 20  tion>yyyy-MM-dd 
1c10: 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46  HH:mm:ss.FFFFFFF
1c20: 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  K</description><
1c30: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
1c40: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
1c50: 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48  on>yyyy-MM-dd HH
1c60: 3a 6d 6d 3a 73 73 4b 3c 2f 64 65 73 63 72 69 70  :mm:ssK</descrip
1c70: 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20  tion></item>..  
1c80: 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73    /// <item><des
1c90: 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d 4d  cription>yyyy-MM
1ca0: 2d 64 64 20 48 48 3a 6d 6d 4b 3c 2f 64 65 73 63  -dd HH:mmK</desc
1cb0: 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d  ription></item>.
1cc0: 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c  .    /// <item><
1cd0: 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79  description>yyyy
1ce0: 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 2e  -MM-ddTHH:mm:ss.
1cf0: 46 46 46 46 46 46 46 4b 3c 2f 64 65 73 63 72 69  FFFFFFFK</descri
1d00: 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20  ption></item>.. 
1d10: 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65     /// <item><de
1d20: 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d  scription>yyyy-M
1d30: 4d 2d 64 64 54 48 48 3a 6d 6d 4b 3c 2f 64 65 73  M-ddTHH:mmK</des
1d40: 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e  cription></item>
1d50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e  ..    /// <item>
1d60: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79  <description>yyy
1d70: 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73  y-MM-ddTHH:mm:ss
1d80: 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  K</description><
1d90: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
1da0: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
1db0: 6f 6e 3e 79 79 79 79 4d 4d 64 64 48 48 6d 6d 73  on>yyyyMMddHHmms
1dc0: 73 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  sK</description>
1dd0: 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  </item>..    ///
1de0: 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74   <item><descript
1df0: 69 6f 6e 3e 79 79 79 79 4d 4d 64 64 48 48 6d 6d  ion>yyyyMMddHHmm
1e00: 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  K</description><
1e10: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
1e20: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
1e30: 6f 6e 3e 79 79 79 79 4d 4d 64 64 54 48 48 6d 6d  on>yyyyMMddTHHmm
1e40: 73 73 46 46 46 46 46 46 46 4b 3c 2f 64 65 73 63  ssFFFFFFFK</desc
1e50: 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d  ription></item>.
1e60: 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c  .    /// <item><
1e70: 64 65 73 63 72 69 70 74 69 6f 6e 3e 54 48 48 6d  description>THHm
1e80: 6d 73 73 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e  mss</description
1e90: 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f  ></item>..    //
1ea0: 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70  / <item><descrip
1eb0: 74 69 6f 6e 3e 54 48 48 6d 6d 3c 2f 64 65 73 63  tion>THHmm</desc
1ec0: 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d  ription></item>.
1ed0: 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c  .    /// <item><
1ee0: 64 65 73 63 72 69 70 74 69 6f 6e 3e 48 48 3a 6d  description>HH:m
1ef0: 6d 3a 73 73 2e 46 46 46 46 46 46 46 3c 2f 64 65  m:ss.FFFFFFF</de
1f00: 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d  scription></item
1f10: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d  >..    /// <item
1f20: 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 48 48  ><description>HH
1f30: 3a 6d 6d 3a 73 73 3c 2f 64 65 73 63 72 69 70 74  :mm:ss</descript
1f40: 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20  ion></item>..   
1f50: 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63   /// <item><desc
1f60: 72 69 70 74 69 6f 6e 3e 48 48 3a 6d 6d 3c 2f 64  ription>HH:mm</d
1f70: 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65  escription></ite
1f80: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65  m>..    /// <ite
1f90: 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 79  m><description>y
1fa0: 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a  yyy-MM-dd HH:mm:
1fb0: 73 73 2e 46 46 46 46 46 46 46 3c 2f 64 65 73 63  ss.FFFFFFF</desc
1fc0: 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d  ription></item>.
1fd0: 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c  .    /// <item><
1fe0: 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79  description>yyyy
1ff0: 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 3c  -MM-dd HH:mm:ss<
2000: 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69  /description></i
2010: 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69  tem>..    /// <i
2020: 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e  tem><description
2030: 3e 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d  >yyyy-MM-dd HH:m
2040: 6d 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  m</description><
2050: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
2060: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
2070: 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48  on>yyyy-MM-ddTHH
2080: 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 3c 2f  :mm:ss.FFFFFFF</
2090: 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74  description></it
20a0: 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74  em>..    /// <it
20b0: 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e  em><description>
20c0: 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d  yyyy-MM-ddTHH:mm
20d0: 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f  </description></
20e0: 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  item>..    /// <
20f0: 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f  item><descriptio
2100: 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a  n>yyyy-MM-ddTHH:
2110: 6d 6d 3a 73 73 3c 2f 64 65 73 63 72 69 70 74 69  mm:ss</descripti
2120: 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20  on></item>..    
2130: 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72  /// <item><descr
2140: 69 70 74 69 6f 6e 3e 79 79 79 79 4d 4d 64 64 48  iption>yyyyMMddH
2150: 48 6d 6d 73 73 3c 2f 64 65 73 63 72 69 70 74 69  Hmmss</descripti
2160: 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20  on></item>..    
2170: 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72  /// <item><descr
2180: 69 70 74 69 6f 6e 3e 79 79 79 79 4d 4d 64 64 48  iption>yyyyMMddH
2190: 48 6d 6d 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e  Hmm</description
21a0: 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f  ></item>..    //
21b0: 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70  / <item><descrip
21c0: 74 69 6f 6e 3e 79 79 79 79 4d 4d 64 64 54 48 48  tion>yyyyMMddTHH
21d0: 6d 6d 73 73 46 46 46 46 46 46 46 3c 2f 64 65 73  mmssFFFFFFF</des
21e0: 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e  cription></item>
21f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e  ..    /// <item>
2200: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79  <description>yyy
2210: 79 2d 4d 4d 2d 64 64 3c 2f 64 65 73 63 72 69 70  y-MM-dd</descrip
2220: 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20  tion></item>..  
2230: 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73    /// <item><des
2240: 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 4d 4d 64  cription>yyyyMMd
2250: 64 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  d</description><
2260: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
2270: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
2280: 6f 6e 3e 79 79 2d 4d 4d 2d 64 64 3c 2f 64 65 73  on>yy-MM-dd</des
2290: 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e  cription></item>
22a0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 6c 69 73 74  ..    /// </list
22b0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 74 68  >..    /// If th
22c0: 65 20 73 74 72 69 6e 67 20 63 61 6e 6e 6f 74 20  e string cannot 
22d0: 62 65 20 6d 61 74 63 68 65 64 20 74 6f 20 6f 6e  be matched to on
22e0: 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 66  e of the above f
22f0: 6f 72 6d 61 74 73 2c 20 61 6e 20 65 78 63 65 70  ormats, an excep
2300: 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 74 68 72  tion will be thr
2310: 6f 77 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  own...    /// </
2320: 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f  remarks>..    //
2330: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64  / <param name="d
2340: 61 74 65 54 65 78 74 22 3e 54 68 65 20 73 74 72  ateText">The str
2350: 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 65  ing containing e
2360: 69 74 68 65 72 20 61 20 6c 6f 6e 67 20 69 6e 74  ither a long int
2370: 65 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 31  eger number of 1
2380: 30 30 2d 6e 61 6e 6f 73 65 63 6f 6e 64 20 75 6e  00-nanosecond un
2390: 69 74 73 20 73 69 6e 63 65 0d 0a 20 20 20 20 2f  its since..    /
23a0: 2f 2f 20 53 79 73 74 65 6d 2e 44 61 74 65 54 69  // System.DateTi
23b0: 6d 65 2e 4d 69 6e 56 61 6c 75 65 2c 20 61 20 4a  me.MinValue, a J
23c0: 75 6c 69 61 6e 20 64 61 79 20 64 6f 75 62 6c 65  ulian day double
23d0: 2c 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d  , an integer num
23e0: 62 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73  ber of seconds s
23f0: 69 6e 63 65 20 74 68 65 20 55 6e 69 78 20 65 70  ince the Unix ep
2400: 6f 63 68 2c 20 61 0d 0a 20 20 20 20 2f 2f 2f 20  och, a..    /// 
2410: 63 75 6c 74 75 72 65 2d 69 6e 64 65 70 65 6e 64  culture-independ
2420: 65 6e 74 20 66 6f 72 6d 61 74 74 65 64 20 64 61  ent formatted da
2430: 74 65 20 61 6e 64 20 74 69 6d 65 20 73 74 72 69  te and time stri
2440: 6e 67 2c 20 61 20 66 6f 72 6d 61 74 74 65 64 20  ng, a formatted 
2450: 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 73 74  date and time st
2460: 72 69 6e 67 20 69 6e 20 74 68 65 20 63 75 72 72  ring in the curr
2470: 65 6e 74 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 6c  ent..    /// cul
2480: 74 75 72 65 2c 20 6f 72 20 61 6e 20 49 53 4f 38  ture, or an ISO8
2490: 36 30 31 2d 66 6f 72 6d 61 74 20 73 74 72 69 6e  601-format strin
24a0: 67 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  g.</param>..    
24b0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41 20 44  /// <returns>A D
24c0: 61 74 65 54 69 6d 65 20 76 61 6c 75 65 3c 2f 72  ateTime value</r
24d0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
24e0: 6c 69 63 20 44 61 74 65 54 69 6d 65 20 54 6f 44  lic DateTime ToD
24f0: 61 74 65 54 69 6d 65 28 73 74 72 69 6e 67 20 64  ateTime(string d
2500: 61 74 65 54 65 78 74 29 0d 0a 20 20 20 20 7b 0d  ateText)..    {.
2510: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f  .      return To
2520: 44 61 74 65 54 69 6d 65 28 64 61 74 65 54 65 78  DateTime(dateTex
2530: 74 2c 20 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d  t, _datetimeForm
2540: 61 74 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e  at, _datetimeKin
2550: 64 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  d);..    }....  
2560: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2570: 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74  .    /// Convert
2580: 73 20 61 20 73 74 72 69 6e 67 20 69 6e 74 6f 20  s a string into 
2590: 61 20 44 61 74 65 54 69 6d 65 2c 20 75 73 69 6e  a DateTime, usin
25a0: 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  g the specified 
25b0: 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 20 61  DateTimeFormat a
25c0: 6e 64 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e  nd DateTimeKind.
25d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
25e0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
25f0: 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f  emarks>..    ///
2600: 20 41 63 63 65 70 74 61 62 6c 65 20 49 53 4f 38   Acceptable ISO8
2610: 36 30 31 20 44 61 74 65 54 69 6d 65 20 66 6f 72  601 DateTime for
2620: 6d 61 74 73 20 61 72 65 3a 0d 0a 20 20 20 20 2f  mats are:..    /
2630: 2f 2f 20 3c 6c 69 73 74 20 74 79 70 65 3d 22 62  // <list type="b
2640: 75 6c 6c 65 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f  ullet">..    ///
2650: 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74   <item><descript
2660: 69 6f 6e 3e 54 48 48 6d 6d 73 73 4b 3c 2f 64 65  ion>THHmmssK</de
2670: 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d  scription></item
2680: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d  >..    /// <item
2690: 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 54 48  ><description>TH
26a0: 48 6d 6d 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f  HmmK</descriptio
26b0: 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f  n></item>..    /
26c0: 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69  // <item><descri
26d0: 70 74 69 6f 6e 3e 48 48 3a 6d 6d 3a 73 73 2e 46  ption>HH:mm:ss.F
26e0: 46 46 46 46 46 46 4b 3c 2f 64 65 73 63 72 69 70  FFFFFFK</descrip
26f0: 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20  tion></item>..  
2700: 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73    /// <item><des
2710: 63 72 69 70 74 69 6f 6e 3e 48 48 3a 6d 6d 3a 73  cription>HH:mm:s
2720: 73 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  sK</description>
2730: 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  </item>..    ///
2740: 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74   <item><descript
2750: 69 6f 6e 3e 48 48 3a 6d 6d 4b 3c 2f 64 65 73 63  ion>HH:mmK</desc
2760: 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d  ription></item>.
2770: 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c  .    /// <item><
2780: 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79  description>yyyy
2790: 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 2e  -MM-dd HH:mm:ss.
27a0: 46 46 46 46 46 46 46 4b 3c 2f 64 65 73 63 72 69  FFFFFFFK</descri
27b0: 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20  ption></item>.. 
27c0: 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65     /// <item><de
27d0: 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d  scription>yyyy-M
27e0: 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 4b 3c 2f  M-dd HH:mm:ssK</
27f0: 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74  description></it
2800: 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74  em>..    /// <it
2810: 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e  em><description>
2820: 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d  yyyy-MM-dd HH:mm
2830: 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  K</description><
2840: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
2850: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
2860: 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48  on>yyyy-MM-ddTHH
2870: 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b 3c  :mm:ss.FFFFFFFK<
2880: 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69  /description></i
2890: 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69  tem>..    /// <i
28a0: 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e  tem><description
28b0: 3e 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d  >yyyy-MM-ddTHH:m
28c0: 6d 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  mK</description>
28d0: 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  </item>..    ///
28e0: 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74   <item><descript
28f0: 69 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 54 48  ion>yyyy-MM-ddTH
2900: 48 3a 6d 6d 3a 73 73 4b 3c 2f 64 65 73 63 72 69  H:mm:ssK</descri
2910: 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20  ption></item>.. 
2920: 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65     /// <item><de
2930: 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 4d 4d  scription>yyyyMM
2940: 64 64 48 48 6d 6d 73 73 4b 3c 2f 64 65 73 63 72  ddHHmmssK</descr
2950: 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a  iption></item>..
2960: 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64      /// <item><d
2970: 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 4d  escription>yyyyM
2980: 4d 64 64 48 48 6d 6d 4b 3c 2f 64 65 73 63 72 69  MddHHmmK</descri
2990: 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20  ption></item>.. 
29a0: 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65     /// <item><de
29b0: 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 4d 4d  scription>yyyyMM
29c0: 64 64 54 48 48 6d 6d 73 73 46 46 46 46 46 46 46  ddTHHmmssFFFFFFF
29d0: 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  K</description><
29e0: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
29f0: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
2a00: 6f 6e 3e 54 48 48 6d 6d 73 73 3c 2f 64 65 73 63  on>THHmmss</desc
2a10: 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d  ription></item>.
2a20: 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c  .    /// <item><
2a30: 64 65 73 63 72 69 70 74 69 6f 6e 3e 54 48 48 6d  description>THHm
2a40: 6d 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  m</description><
2a50: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
2a60: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
2a70: 6f 6e 3e 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46  on>HH:mm:ss.FFFF
2a80: 46 46 46 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e  FFF</description
2a90: 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f  ></item>..    //
2aa0: 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70  / <item><descrip
2ab0: 74 69 6f 6e 3e 48 48 3a 6d 6d 3a 73 73 3c 2f 64  tion>HH:mm:ss</d
2ac0: 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65  escription></ite
2ad0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65  m>..    /// <ite
2ae0: 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 48  m><description>H
2af0: 48 3a 6d 6d 3c 2f 64 65 73 63 72 69 70 74 69 6f  H:mm</descriptio
2b00: 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f  n></item>..    /
2b10: 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69  // <item><descri
2b20: 70 74 69 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64  ption>yyyy-MM-dd
2b30: 20 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46   HH:mm:ss.FFFFFF
2b40: 46 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  F</description><
2b50: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
2b60: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
2b70: 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48  on>yyyy-MM-dd HH
2b80: 3a 6d 6d 3a 73 73 3c 2f 64 65 73 63 72 69 70 74  :mm:ss</descript
2b90: 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20  ion></item>..   
2ba0: 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63   /// <item><desc
2bb0: 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d 4d 2d  ription>yyyy-MM-
2bc0: 64 64 20 48 48 3a 6d 6d 3c 2f 64 65 73 63 72 69  dd HH:mm</descri
2bd0: 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20  ption></item>.. 
2be0: 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65     /// <item><de
2bf0: 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d  scription>yyyy-M
2c00: 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 46 46  M-ddTHH:mm:ss.FF
2c10: 46 46 46 46 46 3c 2f 64 65 73 63 72 69 70 74 69  FFFFF</descripti
2c20: 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20  on></item>..    
2c30: 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72  /// <item><descr
2c40: 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64  iption>yyyy-MM-d
2c50: 64 54 48 48 3a 6d 6d 3c 2f 64 65 73 63 72 69 70  dTHH:mm</descrip
2c60: 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20  tion></item>..  
2c70: 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73    /// <item><des
2c80: 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d 4d  cription>yyyy-MM
2c90: 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 3c 2f 64 65  -ddTHH:mm:ss</de
2ca0: 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d  scription></item
2cb0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d  >..    /// <item
2cc0: 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79  ><description>yy
2cd0: 79 79 4d 4d 64 64 48 48 6d 6d 73 73 3c 2f 64 65  yyMMddHHmmss</de
2ce0: 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d  scription></item
2cf0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d  >..    /// <item
2d00: 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79  ><description>yy
2d10: 79 79 4d 4d 64 64 48 48 6d 6d 3c 2f 64 65 73 63  yyMMddHHmm</desc
2d20: 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d  ription></item>.
2d30: 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c  .    /// <item><
2d40: 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79  description>yyyy
2d50: 4d 4d 64 64 54 48 48 6d 6d 73 73 46 46 46 46 46  MMddTHHmmssFFFFF
2d60: 46 46 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  FF</description>
2d70: 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  </item>..    ///
2d80: 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74   <item><descript
2d90: 69 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 3c 2f  ion>yyyy-MM-dd</
2da0: 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74  description></it
2db0: 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74  em>..    /// <it
2dc0: 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e  em><description>
2dd0: 79 79 79 79 4d 4d 64 64 3c 2f 64 65 73 63 72 69  yyyyMMdd</descri
2de0: 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20  ption></item>.. 
2df0: 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65     /// <item><de
2e00: 73 63 72 69 70 74 69 6f 6e 3e 79 79 2d 4d 4d 2d  scription>yy-MM-
2e10: 64 64 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  dd</description>
2e20: 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  </item>..    ///
2e30: 20 3c 2f 6c 69 73 74 3e 0d 0a 20 20 20 20 2f 2f   </list>..    //
2e40: 2f 20 49 66 20 74 68 65 20 73 74 72 69 6e 67 20  / If the string 
2e50: 63 61 6e 6e 6f 74 20 62 65 20 6d 61 74 63 68 65  cannot be matche
2e60: 64 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  d to one of the 
2e70: 61 62 6f 76 65 20 66 6f 72 6d 61 74 73 2c 20 61  above formats, a
2e80: 6e 20 65 78 63 65 70 74 69 6f 6e 20 77 69 6c 6c  n exception will
2e90: 20 62 65 20 74 68 72 6f 77 6e 2e 0d 0a 20 20 20   be thrown...   
2ea0: 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d   /// </remarks>.
2eb0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
2ec0: 6e 61 6d 65 3d 22 64 61 74 65 54 65 78 74 22 3e  name="dateText">
2ed0: 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  The string conta
2ee0: 69 6e 69 6e 67 20 65 69 74 68 65 72 20 61 20 6c  ining either a l
2ef0: 6f 6e 67 20 69 6e 74 65 67 65 72 20 6e 75 6d 62  ong integer numb
2f00: 65 72 20 6f 66 20 31 30 30 2d 6e 61 6e 6f 73 65  er of 100-nanose
2f10: 63 6f 6e 64 20 75 6e 69 74 73 20 73 69 6e 63 65  cond units since
2f20: 0d 0a 20 20 20 20 2f 2f 2f 20 53 79 73 74 65 6d  ..    /// System
2f30: 2e 44 61 74 65 54 69 6d 65 2e 4d 69 6e 56 61 6c  .DateTime.MinVal
2f40: 75 65 2c 20 61 20 4a 75 6c 69 61 6e 20 64 61 79  ue, a Julian day
2f50: 20 64 6f 75 62 6c 65 2c 20 61 6e 20 69 6e 74 65   double, an inte
2f60: 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 73 65  ger number of se
2f70: 63 6f 6e 64 73 20 73 69 6e 63 65 20 74 68 65 20  conds since the 
2f80: 55 6e 69 78 20 65 70 6f 63 68 2c 20 61 0d 0a 20  Unix epoch, a.. 
2f90: 20 20 20 2f 2f 2f 20 63 75 6c 74 75 72 65 2d 69     /// culture-i
2fa0: 6e 64 65 70 65 6e 64 65 6e 74 20 66 6f 72 6d 61  ndependent forma
2fb0: 74 74 65 64 20 64 61 74 65 20 61 6e 64 20 74 69  tted date and ti
2fc0: 6d 65 20 73 74 72 69 6e 67 2c 20 61 20 66 6f 72  me string, a for
2fd0: 6d 61 74 74 65 64 20 64 61 74 65 20 61 6e 64 20  matted date and 
2fe0: 74 69 6d 65 20 73 74 72 69 6e 67 20 69 6e 20 74  time string in t
2ff0: 68 65 20 63 75 72 72 65 6e 74 0d 0a 20 20 20 20  he current..    
3000: 2f 2f 2f 20 63 75 6c 74 75 72 65 2c 20 6f 72 20  /// culture, or 
3010: 61 6e 20 49 53 4f 38 36 30 31 2d 66 6f 72 6d 61  an ISO8601-forma
3020: 74 20 73 74 72 69 6e 67 2e 3c 2f 70 61 72 61 6d  t string.</param
3030: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
3040: 6d 20 6e 61 6d 65 3d 22 66 6f 72 6d 61 74 22 3e  m name="format">
3050: 54 68 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f  The SQLiteDateFo
3060: 72 6d 61 74 73 20 74 6f 20 75 73 65 2e 3c 2f 70  rmats to use.</p
3070: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
3080: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6b 69 6e 64  param name="kind
3090: 22 3e 54 68 65 20 44 61 74 65 54 69 6d 65 4b 69  ">The DateTimeKi
30a0: 6e 64 20 74 6f 20 75 73 65 2e 3c 2f 70 61 72 61  nd to use.</para
30b0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
30c0: 75 72 6e 73 3e 41 20 44 61 74 65 54 69 6d 65 20  urns>A DateTime 
30d0: 76 61 6c 75 65 3c 2f 72 65 74 75 72 6e 73 3e 0d  value</returns>.
30e0: 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74  .    public stat
30f0: 69 63 20 44 61 74 65 54 69 6d 65 20 54 6f 44 61  ic DateTime ToDa
3100: 74 65 54 69 6d 65 28 73 74 72 69 6e 67 20 64 61  teTime(string da
3110: 74 65 54 65 78 74 2c 20 53 51 4c 69 74 65 44 61  teText, SQLiteDa
3120: 74 65 46 6f 72 6d 61 74 73 20 66 6f 72 6d 61 74  teFormats format
3130: 2c 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20 6b  , DateTimeKind k
3140: 69 6e 64 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ind)..    {..   
3150: 20 20 20 20 20 73 77 69 74 63 68 20 28 66 6f 72       switch (for
3160: 6d 61 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  mat)..        {.
3170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
3180: 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  e SQLiteDateForm
3190: 61 74 73 2e 54 69 63 6b 73 3a 0d 0a 20 20 20 20  ats.Ticks:..    
31a0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
31b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c0: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 44 61     return new Da
31d0: 74 65 54 69 6d 65 28 43 6f 6e 76 65 72 74 2e 54  teTime(Convert.T
31e0: 6f 49 6e 74 36 34 28 0d 0a 20 20 20 20 20 20 20  oInt64(..       
31f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3200: 20 64 61 74 65 54 65 78 74 2c 20 43 75 6c 74 75   dateText, Cultu
3210: 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74  reInfo.Invariant
3220: 43 75 6c 74 75 72 65 29 2c 20 6b 69 6e 64 29 3b  Culture), kind);
3230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3240: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
3250: 20 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65   case SQLiteDate
3260: 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44 61  Formats.JulianDa
3270: 79 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y:..            
3280: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3290: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
32a0: 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 43 6f 6e  n ToDateTime(Con
32b0: 76 65 72 74 2e 54 6f 44 6f 75 62 6c 65 28 0d 0a  vert.ToDouble(..
32c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d0: 20 20 20 20 20 20 20 20 64 61 74 65 54 65 78 74          dateText
32e0: 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e  , CultureInfo.In
32f0: 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29 2c  variantCulture),
3300: 20 6b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20   kind);..       
3310: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
3320: 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
3330: 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 55  iteDateFormats.U
3340: 6e 69 78 45 70 6f 63 68 3a 0d 0a 20 20 20 20 20  nixEpoch:..     
3350: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
3360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3370: 20 20 72 65 74 75 72 6e 20 44 61 74 65 54 69 6d    return DateTim
3380: 65 2e 53 70 65 63 69 66 79 4b 69 6e 64 28 0d 0a  e.SpecifyKind(..
3390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a0: 20 20 20 20 20 20 20 20 55 6e 69 78 45 70 6f 63          UnixEpoc
33b0: 68 2e 41 64 64 53 65 63 6f 6e 64 73 28 43 6f 6e  h.AddSeconds(Con
33c0: 76 65 72 74 2e 54 6f 49 6e 74 33 32 28 0d 0a 20  vert.ToInt32(.. 
33d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e0: 20 20 20 20 20 20 20 64 61 74 65 54 65 78 74 2c         dateText,
33f0: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76   CultureInfo.Inv
3400: 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29 29 2c  ariantCulture)),
3410: 20 6b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20   kind);..       
3420: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
3430: 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
3440: 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 49  iteDateFormats.I
3450: 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 3a  nvariantCulture:
3460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3470: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3480: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
3490: 44 61 74 65 54 69 6d 65 2e 53 70 65 63 69 66 79  DateTime.Specify
34a0: 4b 69 6e 64 28 44 61 74 65 54 69 6d 65 2e 50 61  Kind(DateTime.Pa
34b0: 72 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rse(..          
34c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
34d0: 74 65 54 65 78 74 2c 20 44 61 74 65 54 69 6d 65  teText, DateTime
34e0: 46 6f 72 6d 61 74 49 6e 66 6f 2e 49 6e 76 61 72  FormatInfo.Invar
34f0: 69 61 6e 74 49 6e 66 6f 2c 0d 0a 20 20 20 20 20  iantInfo,..     
3500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3510: 20 20 20 6b 69 6e 64 20 3d 3d 20 44 61 74 65 54     kind == DateT
3520: 69 6d 65 4b 69 6e 64 2e 55 74 63 20 3f 0d 0a 20  imeKind.Utc ?.. 
3530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3540: 20 20 20 20 20 20 20 20 20 20 20 44 61 74 65 54             DateT
3550: 69 6d 65 53 74 79 6c 65 73 2e 41 64 6a 75 73 74  imeStyles.Adjust
3560: 54 6f 55 6e 69 76 65 72 73 61 6c 20 3a 0d 0a 20  ToUniversal :.. 
3570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3580: 20 20 20 20 20 20 20 20 20 20 20 44 61 74 65 54             DateT
3590: 69 6d 65 53 74 79 6c 65 73 2e 4e 6f 6e 65 29 2c  imeStyles.None),
35a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35b0: 20 20 20 20 20 20 20 20 20 20 6b 69 6e 64 29 3b            kind);
35c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
35e0: 20 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65   case SQLiteDate
35f0: 46 6f 72 6d 61 74 73 2e 43 75 72 72 65 6e 74 43  Formats.CurrentC
3600: 75 6c 74 75 72 65 3a 0d 0a 20 20 20 20 20 20 20  ulture:..       
3610: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3630: 72 65 74 75 72 6e 20 44 61 74 65 54 69 6d 65 2e  return DateTime.
3640: 53 70 65 63 69 66 79 4b 69 6e 64 28 44 61 74 65  SpecifyKind(Date
3650: 54 69 6d 65 2e 50 61 72 73 65 28 0d 0a 20 20 20  Time.Parse(..   
3660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3670: 20 20 20 20 20 64 61 74 65 54 65 78 74 2c 20 44       dateText, D
3680: 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 49 6e 66  ateTimeFormatInf
3690: 6f 2e 43 75 72 72 65 6e 74 49 6e 66 6f 2c 0d 0a  o.CurrentInfo,..
36a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b0: 20 20 20 20 20 20 20 20 6b 69 6e 64 20 3d 3d 20          kind == 
36c0: 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55 74 63  DateTimeKind.Utc
36d0: 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
36e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f0: 44 61 74 65 54 69 6d 65 53 74 79 6c 65 73 2e 41  DateTimeStyles.A
3700: 64 6a 75 73 74 54 6f 55 6e 69 76 65 72 73 61 6c  djustToUniversal
3710: 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   :..            
3720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3730: 44 61 74 65 54 69 6d 65 53 74 79 6c 65 73 2e 4e  DateTimeStyles.N
3740: 6f 6e 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  one),..         
3750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
3760: 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ind);..         
3770: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
3780: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a        default:..
3790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
37b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 61         return Da
37c0: 74 65 54 69 6d 65 2e 53 70 65 63 69 66 79 4b 69  teTime.SpecifyKi
37d0: 6e 64 28 44 61 74 65 54 69 6d 65 2e 50 61 72 73  nd(DateTime.Pars
37e0: 65 45 78 61 63 74 28 0d 0a 20 20 20 20 20 20 20  eExact(..       
37f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3800: 20 64 61 74 65 54 65 78 74 2c 20 5f 64 61 74 65   dateText, _date
3810: 74 69 6d 65 46 6f 72 6d 61 74 73 2c 0d 0a 20 20  timeFormats,..  
3820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3830: 20 20 20 20 20 20 44 61 74 65 54 69 6d 65 46 6f        DateTimeFo
3840: 72 6d 61 74 49 6e 66 6f 2e 49 6e 76 61 72 69 61  rmatInfo.Invaria
3850: 6e 74 49 6e 66 6f 2c 0d 0a 20 20 20 20 20 20 20  ntInfo,..       
3860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3870: 20 6b 69 6e 64 20 3d 3d 20 44 61 74 65 54 69 6d   kind == DateTim
3880: 65 4b 69 6e 64 2e 55 74 63 20 3f 0d 0a 20 20 20  eKind.Utc ?..   
3890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38a0: 20 20 20 20 20 20 20 20 20 44 61 74 65 54 69 6d           DateTim
38b0: 65 53 74 79 6c 65 73 2e 41 64 6a 75 73 74 54 6f  eStyles.AdjustTo
38c0: 55 6e 69 76 65 72 73 61 6c 20 3a 0d 0a 20 20 20  Universal :..   
38d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38e0: 20 20 20 20 20 20 20 20 20 44 61 74 65 54 69 6d           DateTim
38f0: 65 53 74 79 6c 65 73 2e 4e 6f 6e 65 29 2c 0d 0a  eStyles.None),..
3900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3910: 20 20 20 20 20 20 20 20 6b 69 6e 64 29 3b 0d 0a          kind);..
3920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3930: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
3940: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
3950: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
3960: 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 6a 75 6c  / Converts a jul
3970: 69 61 6e 64 61 79 20 76 61 6c 75 65 20 69 6e 74  ianday value int
3980: 6f 20 61 20 44 61 74 65 54 69 6d 65 0d 0a 20 20  o a DateTime..  
3990: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
39a0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
39b0: 20 6e 61 6d 65 3d 22 6a 75 6c 69 61 6e 44 61 79   name="julianDay
39c0: 22 3e 54 68 65 20 76 61 6c 75 65 20 74 6f 20 63  ">The value to c
39d0: 6f 6e 76 65 72 74 3c 2f 70 61 72 61 6d 3e 0d 0a  onvert</param>..
39e0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
39f0: 3e 41 20 2e 4e 45 54 20 44 61 74 65 54 69 6d 65  >A .NET DateTime
3a00: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
3a10: 70 75 62 6c 69 63 20 44 61 74 65 54 69 6d 65 20  public DateTime 
3a20: 54 6f 44 61 74 65 54 69 6d 65 28 64 6f 75 62 6c  ToDateTime(doubl
3a30: 65 20 6a 75 6c 69 61 6e 44 61 79 29 0d 0a 20 20  e julianDay)..  
3a40: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
3a50: 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 6a 75 6c  n ToDateTime(jul
3a60: 69 61 6e 44 61 79 2c 20 5f 64 61 74 65 74 69 6d  ianDay, _datetim
3a70: 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 7d 0d 0a  eKind);..    }..
3a80: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
3a90: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e  ry>..    /// Con
3aa0: 76 65 72 74 73 20 61 20 6a 75 6c 69 61 6e 64 61  verts a julianda
3ab0: 79 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 44  y value into a D
3ac0: 61 74 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f  ateTime..    ///
3ad0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
3ae0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
3af0: 3d 22 6a 75 6c 69 61 6e 44 61 79 22 3e 54 68 65  ="julianDay">The
3b00: 20 76 61 6c 75 65 20 74 6f 20 63 6f 6e 76 65 72   value to conver
3b10: 74 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  t</param>..    /
3b20: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
3b30: 6b 69 6e 64 22 3e 54 68 65 20 44 61 74 65 54 69  kind">The DateTi
3b40: 6d 65 4b 69 6e 64 20 74 6f 20 75 73 65 2e 3c 2f  meKind to use.</
3b50: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
3b60: 3c 72 65 74 75 72 6e 73 3e 41 20 2e 4e 45 54 20  <returns>A .NET 
3b70: 44 61 74 65 54 69 6d 65 3c 2f 72 65 74 75 72 6e  DateTime</return
3b80: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73  s>..    public s
3b90: 74 61 74 69 63 20 44 61 74 65 54 69 6d 65 20 54  tatic DateTime T
3ba0: 6f 44 61 74 65 54 69 6d 65 28 64 6f 75 62 6c 65  oDateTime(double
3bb0: 20 6a 75 6c 69 61 6e 44 61 79 2c 20 44 61 74 65   julianDay, Date
3bc0: 54 69 6d 65 4b 69 6e 64 20 6b 69 6e 64 29 0d 0a  TimeKind kind)..
3bd0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
3be0: 65 74 75 72 6e 20 44 61 74 65 54 69 6d 65 2e 53  eturn DateTime.S
3bf0: 70 65 63 69 66 79 4b 69 6e 64 28 0d 0a 20 20 20  pecifyKind(..   
3c00: 20 20 20 20 20 20 20 20 20 44 61 74 65 54 69 6d           DateTim
3c10: 65 2e 46 72 6f 6d 4f 41 44 61 74 65 28 6a 75 6c  e.FromOADate(jul
3c20: 69 61 6e 44 61 79 20 2d 20 4f 6c 65 41 75 74 6f  ianDay - OleAuto
3c30: 6d 61 74 69 6f 6e 45 70 6f 63 68 41 73 4a 75 6c  mationEpochAsJul
3c40: 69 61 6e 44 61 79 29 2c 20 6b 69 6e 64 29 3b 0d  ianDay), kind);.
3c50: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
3c60: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
3c70: 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20   /// Converts a 
3c80: 44 61 74 65 54 69 6d 65 20 73 74 72 75 63 74 20  DateTime struct 
3c90: 74 6f 20 61 20 4a 75 6c 69 61 6e 44 61 79 20 64  to a JulianDay d
3ca0: 6f 75 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ouble..    /// <
3cb0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
3cc0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
3cd0: 76 61 6c 75 65 22 3e 54 68 65 20 44 61 74 65 54  value">The DateT
3ce0: 69 6d 65 20 74 6f 20 63 6f 6e 76 65 72 74 3c 2f  ime to convert</
3cf0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
3d00: 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 4a 75 6c  <returns>The Jul
3d10: 69 61 6e 44 61 79 20 76 61 6c 75 65 20 74 68 65  ianDay value the
3d20: 20 44 61 74 65 74 69 6d 65 20 72 65 70 72 65 73   Datetime repres
3d30: 65 6e 74 73 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ents</returns>..
3d40: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
3d50: 63 20 64 6f 75 62 6c 65 20 54 6f 4a 75 6c 69 61  c double ToJulia
3d60: 6e 44 61 79 28 44 61 74 65 54 69 6d 65 20 76 61  nDay(DateTime va
3d70: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
3d80: 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 2e     return value.
3d90: 54 6f 4f 41 44 61 74 65 28 29 20 2b 20 4f 6c 65  ToOADate() + Ole
3da0: 41 75 74 6f 6d 61 74 69 6f 6e 45 70 6f 63 68 41  AutomationEpochA
3db0: 73 4a 75 6c 69 61 6e 44 61 79 3b 0d 0a 20 20 20  sJulianDay;..   
3dc0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
3dd0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
3de0: 20 43 6f 6e 76 65 72 74 73 20 61 20 44 61 74 65   Converts a Date
3df0: 54 69 6d 65 20 73 74 72 75 63 74 20 74 6f 20 74  Time struct to t
3e00: 68 65 20 77 68 6f 6c 65 20 6e 75 6d 62 65 72 20  he whole number 
3e10: 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65  of seconds since
3e20: 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 55 6e   the..    /// Un
3e30: 69 78 20 65 70 6f 63 68 2e 0d 0a 20 20 20 20 2f  ix epoch...    /
3e40: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
3e50: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
3e60: 6d 65 3d 22 76 61 6c 75 65 22 3e 54 68 65 20 44  me="value">The D
3e70: 61 74 65 54 69 6d 65 20 74 6f 20 63 6f 6e 76 65  ateTime to conve
3e80: 72 74 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  rt</param>..    
3e90: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65  /// <returns>The
3ea0: 20 77 68 6f 6c 65 20 6e 75 6d 62 65 72 20 6f 66   whole number of
3eb0: 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 74   seconds since t
3ec0: 68 65 20 55 6e 69 78 20 65 70 6f 63 68 3c 2f 72  he Unix epoch</r
3ed0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
3ee0: 6c 69 63 20 73 74 61 74 69 63 20 6c 6f 6e 67 20  lic static long 
3ef0: 54 6f 55 6e 69 78 45 70 6f 63 68 28 44 61 74 65  ToUnixEpoch(Date
3f00: 54 69 6d 65 20 76 61 6c 75 65 29 0d 0a 20 20 20  Time value)..   
3f10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
3f20: 72 6e 20 28 76 61 6c 75 65 2e 53 75 62 74 72 61  rn (value.Subtra
3f30: 63 74 28 55 6e 69 78 45 70 6f 63 68 29 2e 54 69  ct(UnixEpoch).Ti
3f40: 63 6b 73 20 2f 20 54 69 6d 65 53 70 61 6e 2e 54  cks / TimeSpan.T
3f50: 69 63 6b 73 50 65 72 53 65 63 6f 6e 64 29 3b 0d  icksPerSecond);.
3f60: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
3f70: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
3f80: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
3f90: 20 64 65 66 61 75 6c 74 20 44 61 74 65 54 69 6d   default DateTim
3fa0: 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  e format string 
3fb0: 74 6f 20 75 73 65 20 66 6f 72 20 74 68 65 20 73  to use for the s
3fc0: 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20 2f 2f  pecified..    //
3fd0: 2f 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 0d  / DateTimeKind..
3fe0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
3ff0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
4000: 72 61 6d 20 6e 61 6d 65 3d 22 6b 69 6e 64 22 3e  ram name="kind">
4010: 54 68 65 20 44 61 74 65 54 69 6d 65 4b 69 6e 64  The DateTimeKind
4020: 20 74 6f 20 75 73 65 2e 3c 2f 70 61 72 61 6d 3e   to use.</param>
4030: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
4040: 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ns>..    /// The
4050: 20 64 65 66 61 75 6c 74 20 44 61 74 65 54 69 6d   default DateTim
4060: 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  e format string 
4070: 74 6f 20 75 73 65 20 66 6f 72 20 74 68 65 20 73  to use for the s
4080: 70 65 63 69 66 69 65 64 20 44 61 74 65 54 69 6d  pecified DateTim
4090: 65 4b 69 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  eKind...    /// 
40a0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
40b0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
40c0: 74 72 69 6e 67 20 47 65 74 44 61 74 65 54 69 6d  tring GetDateTim
40d0: 65 4b 69 6e 64 46 6f 72 6d 61 74 28 44 61 74 65  eKindFormat(Date
40e0: 54 69 6d 65 4b 69 6e 64 20 6b 69 6e 64 29 0d 0a  TimeKind kind)..
40f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
4100: 65 74 75 72 6e 20 28 6b 69 6e 64 20 3d 3d 20 44  eturn (kind == D
4110: 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55 74 63 29  ateTimeKind.Utc)
4120: 20 3f 20 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d   ? _datetimeForm
4130: 61 74 55 74 63 20 3a 20 5f 64 61 74 65 74 69 6d  atUtc : _datetim
4140: 65 46 6f 72 6d 61 74 4c 6f 63 61 6c 3b 0d 0a 20  eFormatLocal;.. 
4150: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
4160: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
4170: 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 44 61  // Converts a Da
4180: 74 65 54 69 6d 65 20 74 6f 20 61 20 73 74 72 69  teTime to a stri
4190: 6e 67 20 76 61 6c 75 65 2c 20 75 73 69 6e 67 20  ng value, using 
41a0: 74 68 65 20 63 75 72 72 65 6e 74 20 44 61 74 65  the current Date
41b0: 54 69 6d 65 46 6f 72 6d 61 74 20 73 70 65 63 69  TimeFormat speci
41c0: 66 69 65 64 20 66 6f 72 20 74 68 65 20 63 6f 6e  fied for the con
41d0: 6e 65 63 74 69 6f 6e 20 77 68 65 6e 20 69 74 20  nection when it 
41e0: 77 61 73 20 6f 70 65 6e 65 64 2e 0d 0a 20 20 20  was opened...   
41f0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
4200: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
4210: 6e 61 6d 65 3d 22 64 61 74 65 56 61 6c 75 65 22  name="dateValue"
4220: 3e 54 68 65 20 44 61 74 65 54 69 6d 65 20 76 61  >The DateTime va
4230: 6c 75 65 20 74 6f 20 63 6f 6e 76 65 72 74 3c 2f  lue to convert</
4240: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
4250: 3c 72 65 74 75 72 6e 73 3e 45 69 74 68 65 72 20  <returns>Either 
4260: 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  a string contain
4270: 69 6e 67 20 74 68 65 20 6c 6f 6e 67 20 69 6e 74  ing the long int
4280: 65 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 31  eger number of 1
4290: 30 30 2d 6e 61 6e 6f 73 65 63 6f 6e 64 20 75 6e  00-nanosecond un
42a0: 69 74 73 20 73 69 6e 63 65 20 53 79 73 74 65 6d  its since System
42b0: 2e 44 61 74 65 54 69 6d 65 2e 4d 69 6e 56 61 6c  .DateTime.MinVal
42c0: 75 65 2c 20 61 0d 0a 20 20 20 20 2f 2f 2f 20 4a  ue, a..    /// J
42d0: 75 6c 69 61 6e 20 64 61 79 20 64 6f 75 62 6c 65  ulian day double
42e0: 2c 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d  , an integer num
42f0: 62 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73  ber of seconds s
4300: 69 6e 63 65 20 74 68 65 20 55 6e 69 78 20 65 70  ince the Unix ep
4310: 6f 63 68 2c 20 61 20 63 75 6c 74 75 72 65 2d 69  och, a culture-i
4320: 6e 64 65 70 65 6e 64 65 6e 74 20 66 6f 72 6d 61  ndependent forma
4330: 74 74 65 64 20 64 61 74 65 20 61 6e 64 20 74 69  tted date and ti
4340: 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 73 74 72 69  me..    /// stri
4350: 6e 67 2c 20 61 20 66 6f 72 6d 61 74 74 65 64 20  ng, a formatted 
4360: 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 73 74  date and time st
4370: 72 69 6e 67 20 69 6e 20 74 68 65 20 63 75 72 72  ring in the curr
4380: 65 6e 74 20 63 75 6c 74 75 72 65 2c 20 6f 72 20  ent culture, or 
4390: 61 6e 20 49 53 4f 38 36 30 31 2d 66 6f 72 6d 61  an ISO8601-forma
43a0: 74 20 64 61 74 65 2f 74 69 6d 65 20 73 74 72 69  t date/time stri
43b0: 6e 67 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ng.</returns>.. 
43c0: 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
43d0: 20 54 6f 53 74 72 69 6e 67 28 44 61 74 65 54 69   ToString(DateTi
43e0: 6d 65 20 64 61 74 65 56 61 6c 75 65 29 0d 0a 20  me dateValue).. 
43f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 77     {..        sw
4400: 69 74 63 68 20 28 5f 64 61 74 65 74 69 6d 65 46  itch (_datetimeF
4410: 6f 72 6d 61 74 29 0d 0a 20 20 20 20 20 20 20 20  ormat)..        
4420: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {..            c
4430: 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f  ase SQLiteDateFo
4440: 72 6d 61 74 73 2e 54 69 63 6b 73 3a 0d 0a 20 20  rmats.Ticks:..  
4450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
4460: 74 75 72 6e 20 64 61 74 65 56 61 6c 75 65 2e 54  turn dateValue.T
4470: 69 63 6b 73 2e 54 6f 53 74 72 69 6e 67 28 43 75  icks.ToString(Cu
4480: 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69  ltureInfo.Invari
4490: 61 6e 74 43 75 6c 74 75 72 65 29 3b 0d 0a 20 20  antCulture);..  
44a0: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53            case S
44b0: 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73  QLiteDateFormats
44c0: 2e 4a 75 6c 69 61 6e 44 61 79 3a 0d 0a 20 20 20  .JulianDay:..   
44d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
44e0: 75 72 6e 20 54 6f 4a 75 6c 69 61 6e 44 61 79 28  urn ToJulianDay(
44f0: 64 61 74 65 56 61 6c 75 65 29 2e 54 6f 53 74 72  dateValue).ToStr
4500: 69 6e 67 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e  ing(CultureInfo.
4510: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
4520: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4530: 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46  case SQLiteDateF
4540: 6f 72 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63 68  ormats.UnixEpoch
4550: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
4560: 20 20 20 72 65 74 75 72 6e 20 28 28 6c 6f 6e 67     return ((long
4570: 29 28 64 61 74 65 56 61 6c 75 65 2e 53 75 62 74  )(dateValue.Subt
4580: 72 61 63 74 28 55 6e 69 78 45 70 6f 63 68 29 2e  ract(UnixEpoch).
4590: 54 69 63 6b 73 20 2f 20 54 69 6d 65 53 70 61 6e  Ticks / TimeSpan
45a0: 2e 54 69 63 6b 73 50 65 72 53 65 63 6f 6e 64 29  .TicksPerSecond)
45b0: 29 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20  ).ToString();.. 
45c0: 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
45d0: 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74  SQLiteDateFormat
45e0: 73 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  s.InvariantCultu
45f0: 72 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re:..           
4600: 20 20 20 20 20 72 65 74 75 72 6e 20 64 61 74 65       return date
4610: 56 61 6c 75 65 2e 54 6f 53 74 72 69 6e 67 28 46  Value.ToString(F
4620: 75 6c 6c 46 6f 72 6d 61 74 2c 20 43 75 6c 74 75  ullFormat, Cultu
4630: 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74  reInfo.Invariant
4640: 43 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20 20  Culture);..     
4650: 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 69         case SQLi
4660: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 43 75  teDateFormats.Cu
4670: 72 72 65 6e 74 43 75 6c 74 75 72 65 3a 0d 0a 20  rrentCulture:.. 
4680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
4690: 65 74 75 72 6e 20 64 61 74 65 56 61 6c 75 65 2e  eturn dateValue.
46a0: 54 6f 53 74 72 69 6e 67 28 46 75 6c 6c 46 6f 72  ToString(FullFor
46b0: 6d 61 74 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f  mat, CultureInfo
46c0: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 29  .CurrentCulture)
46d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  ;..            d
46e0: 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20  efault:..       
46f0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4700: 28 64 61 74 65 56 61 6c 75 65 2e 4b 69 6e 64 20  (dateValue.Kind 
4710: 3d 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e  == DateTimeKind.
4720: 55 6e 73 70 65 63 69 66 69 65 64 29 20 3f 0d 0a  Unspecified) ?..
4730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4740: 20 20 20 20 44 61 74 65 54 69 6d 65 2e 53 70 65      DateTime.Spe
4750: 63 69 66 79 4b 69 6e 64 28 64 61 74 65 56 61 6c  cifyKind(dateVal
4760: 75 65 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e  ue, _datetimeKin
4770: 64 29 2e 54 6f 53 74 72 69 6e 67 28 0d 0a 20 20  d).ToString(..  
4780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4790: 20 20 20 20 20 20 47 65 74 44 61 74 65 54 69 6d        GetDateTim
47a0: 65 4b 69 6e 64 46 6f 72 6d 61 74 28 5f 64 61 74  eKindFormat(_dat
47b0: 65 74 69 6d 65 4b 69 6e 64 29 2c 20 43 75 6c 74  etimeKind), Cult
47c0: 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e  ureInfo.Invarian
47d0: 74 43 75 6c 74 75 72 65 29 20 3a 0d 0a 20 20 20  tCulture) :..   
47e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47f0: 20 64 61 74 65 56 61 6c 75 65 2e 54 6f 53 74 72   dateValue.ToStr
4800: 69 6e 67 28 47 65 74 44 61 74 65 54 69 6d 65 4b  ing(GetDateTimeK
4810: 69 6e 64 46 6f 72 6d 61 74 28 64 61 74 65 56 61  indFormat(dateVa
4820: 6c 75 65 2e 4b 69 6e 64 29 2c 20 43 75 6c 74 75  lue.Kind), Cultu
4830: 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74  reInfo.Invariant
4840: 43 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20 20  Culture);..     
4850: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
4860: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
4870: 0d 0a 20 20 20 20 2f 2f 2f 20 49 6e 74 65 72 6e  ..    /// Intern
4880: 61 6c 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 63  al function to c
4890: 6f 6e 76 65 72 74 20 61 20 55 54 46 2d 38 20 65  onvert a UTF-8 e
48a0: 6e 63 6f 64 65 64 20 49 6e 74 50 74 72 20 6f 66  ncoded IntPtr of
48b0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6c   the specified l
48c0: 65 6e 67 74 68 20 74 6f 20 61 20 44 61 74 65 54  ength to a DateT
48d0: 69 6d 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ime...    /// </
48e0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
48f0: 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20  / <remarks>..   
4900: 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 61 20 63   /// This is a c
4910: 6f 6e 76 65 6e 69 65 6e 63 65 20 66 75 6e 63 74  onvenience funct
4920: 69 6f 6e 2c 20 77 68 69 63 68 20 66 69 72 73 74  ion, which first
4930: 20 63 61 6c 6c 73 20 54 6f 53 74 72 69 6e 67 28   calls ToString(
4940: 29 20 6f 6e 20 74 68 65 20 49 6e 74 50 74 72 20  ) on the IntPtr 
4950: 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  to convert it to
4960: 20 61 20 73 74 72 69 6e 67 2c 20 74 68 65 6e 20   a string, then 
4970: 63 61 6c 6c 73 0d 0a 20 20 20 20 2f 2f 2f 20 54  calls..    /// T
4980: 6f 44 61 74 65 54 69 6d 65 28 29 20 6f 6e 20 74  oDateTime() on t
4990: 68 65 20 73 74 72 69 6e 67 20 74 6f 20 72 65 74  he string to ret
49a0: 75 72 6e 20 61 20 44 61 74 65 54 69 6d 65 2e 0d  urn a DateTime..
49b0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72  .    /// </remar
49c0: 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ks>..    /// <pa
49d0: 72 61 6d 20 6e 61 6d 65 3d 22 70 74 72 22 3e 41  ram name="ptr">A
49e0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
49f0: 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 73 74  UTF-8 encoded st
4a00: 72 69 6e 67 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ring</param>..  
4a10: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
4a20: 65 3d 22 6c 65 6e 22 3e 54 68 65 20 6c 65 6e 67  e="len">The leng
4a30: 74 68 20 69 6e 20 62 79 74 65 73 20 6f 66 20 74  th in bytes of t
4a40: 68 65 20 73 74 72 69 6e 67 3c 2f 70 61 72 61 6d  he string</param
4a50: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
4a60: 72 6e 73 3e 54 68 65 20 70 61 72 73 65 64 20 44  rns>The parsed D
4a70: 61 74 65 54 69 6d 65 20 76 61 6c 75 65 3c 2f 72  ateTime value</r
4a80: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
4a90: 65 72 6e 61 6c 20 44 61 74 65 54 69 6d 65 20 54  ernal DateTime T
4aa0: 6f 44 61 74 65 54 69 6d 65 28 49 6e 74 50 74 72  oDateTime(IntPtr
4ab0: 20 70 74 72 2c 20 69 6e 74 20 6c 65 6e 29 0d 0a   ptr, int len)..
4ac0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
4ad0: 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 54  urn ToDateTime(T
4ae0: 6f 53 74 72 69 6e 67 28 70 74 72 2c 20 6c 65 6e  oString(ptr, len
4af0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
4b00: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
4b10: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
4b20: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 6d 61 72 74  >..    /// Smart
4b30: 20 6d 65 74 68 6f 64 20 6f 66 20 73 70 6c 69 74   method of split
4b40: 74 69 6e 67 20 61 20 73 74 72 69 6e 67 2e 20 20  ting a string.  
4b50: 53 6b 69 70 73 20 71 75 6f 74 65 64 20 65 6c 65  Skips quoted ele
4b60: 6d 65 6e 74 73 2c 20 72 65 6d 6f 76 65 73 20 74  ments, removes t
4b70: 68 65 20 71 75 6f 74 65 73 2e 0d 0a 20 20 20 20  he quotes...    
4b80: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
4b90: 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73      /// <remarks
4ba0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
4bb0: 73 70 6c 69 74 20 66 75 6e 63 74 69 6f 6e 20 77  split function w
4bc0: 6f 72 6b 73 20 73 6f 6d 65 77 68 61 74 20 6c 69  orks somewhat li
4bd0: 6b 65 20 74 68 65 20 53 74 72 69 6e 67 2e 53 70  ke the String.Sp
4be0: 6c 69 74 28 29 20 66 75 6e 63 74 69 6f 6e 20 69  lit() function i
4bf0: 6e 20 74 68 61 74 20 69 74 20 62 72 65 61 6b 73  n that it breaks
4c00: 20 61 70 61 72 74 20 61 20 73 74 72 69 6e 67 20   apart a string 
4c10: 69 6e 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20 70 69  into..    /// pi
4c20: 65 63 65 73 20 61 6e 64 20 72 65 74 75 72 6e 73  eces and returns
4c30: 20 74 68 65 20 70 69 65 63 65 73 20 61 73 20 61   the pieces as a
4c40: 6e 20 61 72 72 61 79 2e 20 20 54 68 65 20 70 72  n array.  The pr
4c50: 69 6d 61 72 79 20 64 69 66 66 65 72 65 6e 63 65  imary difference
4c60: 73 20 61 72 65 3a 0d 0a 20 20 20 20 2f 2f 2f 20  s are:..    /// 
4c70: 3c 6c 69 73 74 20 74 79 70 65 3d 22 62 75 6c 6c  <list type="bull
4c80: 65 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69  et">..    /// <i
4c90: 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e  tem><description
4ca0: 3e 4f 6e 6c 79 20 6f 6e 65 20 63 68 61 72 61 63  >Only one charac
4cb0: 74 65 72 20 63 61 6e 20 62 65 20 70 72 6f 76 69  ter can be provi
4cc0: 64 65 64 20 61 73 20 61 20 73 65 70 61 72 61 74  ded as a separat
4cd0: 6f 72 20 63 68 61 72 61 63 74 65 72 3c 2f 64 65  or character</de
4ce0: 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d  scription></item
4cf0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d  >..    /// <item
4d00: 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 51 75  ><description>Qu
4d10: 6f 74 65 64 20 74 65 78 74 20 69 6e 73 69 64 65  oted text inside
4d20: 20 74 68 65 20 73 74 72 69 6e 67 20 69 73 20 73   the string is s
4d30: 6b 69 70 70 65 64 20 6f 76 65 72 20 77 68 65 6e  kipped over when
4d40: 20 73 65 61 72 63 68 69 6e 67 20 66 6f 72 20 74   searching for t
4d50: 68 65 20 73 65 70 61 72 61 74 6f 72 2c 20 61 6e  he separator, an
4d60: 64 20 74 68 65 20 71 75 6f 74 65 73 20 61 72 65  d the quotes are
4d70: 20 72 65 6d 6f 76 65 64 2e 3c 2f 64 65 73 63 72   removed.</descr
4d80: 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a  iption></item>..
4d90: 20 20 20 20 2f 2f 2f 20 3c 2f 6c 69 73 74 3e 0d      /// </list>.
4da0: 0a 20 20 20 20 2f 2f 2f 20 54 68 75 73 2c 20 69  .    /// Thus, i
4db0: 66 20 73 70 6c 69 74 74 69 6e 67 20 74 68 65 20  f splitting the 
4dc0: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 69 6e 67  following string
4dd0: 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 63   looking for a c
4de0: 6f 6d 6d 61 3a 3c 62 72 2f 3e 0d 0a 20 20 20 20  omma:<br/>..    
4df0: 2f 2f 2f 20 4f 6e 65 2c 54 77 6f 2c 20 22 54 68  /// One,Two, "Th
4e00: 72 65 65 2c 20 46 6f 75 72 22 2c 20 46 69 76 65  ree, Four", Five
4e10: 3c 62 72 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  <br/>..    /// <
4e20: 62 72 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  br/>..    /// Th
4e30: 65 20 72 65 73 75 6c 74 69 6e 67 20 61 72 72 61  e resulting arra
4e40: 79 20 77 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 3c  y would contain<
4e50: 62 72 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 5b 30  br/>..    /// [0
4e60: 5d 20 4f 6e 65 3c 62 72 2f 3e 0d 0a 20 20 20 20  ] One<br/>..    
4e70: 2f 2f 2f 20 5b 31 5d 20 54 77 6f 3c 62 72 2f 3e  /// [1] Two<br/>
4e80: 0d 0a 20 20 20 20 2f 2f 2f 20 5b 32 5d 20 54 68  ..    /// [2] Th
4e90: 72 65 65 2c 20 46 6f 75 72 3c 62 72 2f 3e 0d 0a  ree, Four<br/>..
4ea0: 20 20 20 20 2f 2f 2f 20 5b 33 5d 20 46 69 76 65      /// [3] Five
4eb0: 3c 62 72 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  <br/>..    /// <
4ec0: 62 72 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f  br/>..    /// No
4ed0: 74 65 20 74 68 61 74 20 74 68 65 20 6c 65 61 64  te that the lead
4ee0: 69 6e 67 20 61 6e 64 20 74 72 61 69 6c 69 6e 67  ing and trailing
4ef0: 20 73 70 61 63 65 73 20 77 65 72 65 20 72 65 6d   spaces were rem
4f00: 6f 76 65 64 20 66 72 6f 6d 20 65 61 63 68 20 69  oved from each i
4f10: 74 65 6d 20 64 75 72 69 6e 67 20 74 68 65 20 73  tem during the s
4f20: 70 6c 69 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  plit...    /// <
4f30: 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f  /remarks>..    /
4f40: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
4f50: 73 6f 75 72 63 65 22 3e 53 6f 75 72 63 65 20 73  source">Source s
4f60: 74 72 69 6e 67 20 74 6f 20 73 70 6c 69 74 20 61  tring to split a
4f70: 70 61 72 74 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  part</param>..  
4f80: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
4f90: 65 3d 22 73 65 70 61 72 61 74 6f 72 22 3e 53 65  e="separator">Se
4fa0: 70 61 72 61 74 6f 72 20 63 68 61 72 61 63 74 65  parator characte
4fb0: 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  r</param>..    /
4fc0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41 20 73 74  // <returns>A st
4fd0: 72 69 6e 67 20 61 72 72 61 79 20 6f 66 20 74 68  ring array of th
4fe0: 65 20 73 70 6c 69 74 20 75 70 20 65 6c 65 6d 65  e split up eleme
4ff0: 6e 74 73 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  nts</returns>.. 
5000: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
5010: 20 73 74 72 69 6e 67 5b 5d 20 53 70 6c 69 74 28   string[] Split(
5020: 73 74 72 69 6e 67 20 73 6f 75 72 63 65 2c 20 63  string source, c
5030: 68 61 72 20 73 65 70 61 72 61 74 6f 72 29 0d 0a  har separator)..
5040: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 63 68 61      {..      cha
5050: 72 5b 5d 20 74 6f 6b 73 20 3d 20 6e 65 77 20 63  r[] toks = new c
5060: 68 61 72 5b 32 5d 20 7b 20 27 5c 22 27 2c 20 73  har[2] { '\"', s
5070: 65 70 61 72 61 74 6f 72 20 7d 3b 0d 0a 20 20 20  eparator };..   
5080: 20 20 20 63 68 61 72 5b 5d 20 71 75 6f 74 20 3d     char[] quot =
5090: 20 6e 65 77 20 63 68 61 72 5b 31 5d 20 7b 20 27   new char[1] { '
50a0: 5c 22 27 20 7d 3b 0d 0a 20 20 20 20 20 20 69 6e  \"' };..      in
50b0: 74 20 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  t n = 0;..      
50c0: 4c 69 73 74 3c 73 74 72 69 6e 67 3e 20 6c 73 20  List<string> ls 
50d0: 3d 20 6e 65 77 20 4c 69 73 74 3c 73 74 72 69 6e  = new List<strin
50e0: 67 3e 28 29 3b 0d 0a 20 20 20 20 20 20 73 74 72  g>();..      str
50f0: 69 6e 67 20 73 3b 0d 0a 0d 0a 20 20 20 20 20 20  ing s;....      
5100: 77 68 69 6c 65 20 28 73 6f 75 72 63 65 2e 4c 65  while (source.Le
5110: 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20  ngth > 0)..     
5120: 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e 20 3d 20   {..        n = 
5130: 73 6f 75 72 63 65 2e 49 6e 64 65 78 4f 66 41 6e  source.IndexOfAn
5140: 79 28 74 6f 6b 73 2c 20 6e 29 3b 0d 0a 20 20 20  y(toks, n);..   
5150: 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 2d 31       if (n == -1
5160: 29 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20  ) break;..      
5170: 20 20 69 66 20 28 73 6f 75 72 63 65 5b 6e 5d 20    if (source[n] 
5180: 3d 3d 20 74 6f 6b 73 5b 30 5d 29 0d 0a 20 20 20  == toks[0])..   
5190: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
51a0: 20 20 2f 2f 73 6f 75 72 63 65 20 3d 20 73 6f 75    //source = sou
51b0: 72 63 65 2e 52 65 6d 6f 76 65 28 6e 2c 20 31 29  rce.Remove(n, 1)
51c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 6e 20 3d  ;..          n =
51d0: 20 73 6f 75 72 63 65 2e 49 6e 64 65 78 4f 66 41   source.IndexOfA
51e0: 6e 79 28 71 75 6f 74 2c 20 6e 20 2b 20 31 29 3b  ny(quot, n + 1);
51f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
5200: 6e 20 3d 3d 20 2d 31 29 0d 0a 20 20 20 20 20 20  n == -1)..      
5210: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5220: 20 20 20 2f 2f 73 6f 75 72 63 65 20 3d 20 22 5c     //source = "\
5230: 22 22 20 2b 20 73 6f 75 72 63 65 3b 0d 0a 20 20  "" + source;..  
5240: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
5250: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
5260: 20 20 20 20 20 20 20 20 20 6e 2b 2b 3b 0d 0a 20           n++;.. 
5270: 20 20 20 20 20 20 20 20 20 2f 2f 73 6f 75 72 63           //sourc
5280: 65 20 3d 20 73 6f 75 72 63 65 2e 52 65 6d 6f 76  e = source.Remov
5290: 65 28 6e 2c 20 31 29 3b 0d 0a 20 20 20 20 20 20  e(n, 1);..      
52a0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73    }..        els
52b0: 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  e..        {..  
52c0: 20 20 20 20 20 20 20 20 73 20 3d 20 73 6f 75 72          s = sour
52d0: 63 65 2e 53 75 62 73 74 72 69 6e 67 28 30 2c 20  ce.Substring(0, 
52e0: 6e 29 2e 54 72 69 6d 28 29 3b 0d 0a 20 20 20 20  n).Trim();..    
52f0: 20 20 20 20 20 20 69 66 20 28 73 2e 4c 65 6e 67        if (s.Leng
5300: 74 68 20 3e 20 31 20 26 26 20 73 5b 30 5d 20 3d  th > 1 && s[0] =
5310: 3d 20 71 75 6f 74 5b 30 5d 20 26 26 20 73 5b 73  = quot[0] && s[s
5320: 2e 4c 65 6e 67 74 68 20 2d 20 31 5d 20 3d 3d 20  .Length - 1] == 
5330: 73 5b 30 5d 29 0d 0a 20 20 20 20 20 20 20 20 20  s[0])..         
5340: 20 20 20 73 20 3d 20 73 2e 53 75 62 73 74 72 69     s = s.Substri
5350: 6e 67 28 31 2c 20 73 2e 4c 65 6e 67 74 68 20 2d  ng(1, s.Length -
5360: 20 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   2);....        
5370: 20 20 73 6f 75 72 63 65 20 3d 20 73 6f 75 72 63    source = sourc
5380: 65 2e 53 75 62 73 74 72 69 6e 67 28 6e 20 2b 20  e.Substring(n + 
5390: 31 29 2e 54 72 69 6d 28 29 3b 0d 0a 20 20 20 20  1).Trim();..    
53a0: 20 20 20 20 20 20 69 66 20 28 73 2e 4c 65 6e 67        if (s.Leng
53b0: 74 68 20 3e 20 30 29 20 6c 73 2e 41 64 64 28 73  th > 0) ls.Add(s
53c0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 6e 20  );..          n 
53d0: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  = 0;..        }.
53e0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
53f0: 69 66 20 28 73 6f 75 72 63 65 2e 4c 65 6e 67 74  if (source.Lengt
5400: 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d  h > 0)..      {.
5410: 0a 20 20 20 20 20 20 20 20 73 20 3d 20 73 6f 75  .        s = sou
5420: 72 63 65 2e 54 72 69 6d 28 29 3b 0d 0a 20 20 20  rce.Trim();..   
5430: 20 20 20 20 20 69 66 20 28 73 2e 4c 65 6e 67 74       if (s.Lengt
5440: 68 20 3e 20 31 20 26 26 20 73 5b 30 5d 20 3d 3d  h > 1 && s[0] ==
5450: 20 71 75 6f 74 5b 30 5d 20 26 26 20 73 5b 73 2e   quot[0] && s[s.
5460: 4c 65 6e 67 74 68 20 2d 20 31 5d 20 3d 3d 20 73  Length - 1] == s
5470: 5b 30 5d 29 0d 0a 20 20 20 20 20 20 20 20 20 20  [0])..          
5480: 73 20 3d 20 73 2e 53 75 62 73 74 72 69 6e 67 28  s = s.Substring(
5490: 31 2c 20 73 2e 4c 65 6e 67 74 68 20 2d 20 32 29  1, s.Length - 2)
54a0: 3b 0d 0a 20 20 20 20 20 20 20 20 6c 73 2e 41 64  ;..        ls.Ad
54b0: 64 28 73 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  d(s);..      }..
54c0: 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d  ..      string[]
54d0: 20 61 72 20 3d 20 6e 65 77 20 73 74 72 69 6e 67   ar = new string
54e0: 5b 6c 73 2e 43 6f 75 6e 74 5d 3b 0d 0a 20 20 20  [ls.Count];..   
54f0: 20 20 20 6c 73 2e 43 6f 70 79 54 6f 28 61 72 2c     ls.CopyTo(ar,
5500: 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65   0);....      re
5510: 74 75 72 6e 20 61 72 3b 0d 0a 20 20 20 20 7d 0d  turn ar;..    }.
5520: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
5530: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f  ary>..    /// Co
5540: 6e 76 65 72 74 20 61 20 76 61 6c 75 65 20 74 6f  nvert a value to
5550: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2e 0d   true or false..
5560: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
5570: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
5580: 72 61 6d 20 6e 61 6d 65 3d 22 73 6f 75 72 63 65  ram name="source
5590: 22 3e 41 20 73 74 72 69 6e 67 20 6f 72 20 6e 75  ">A string or nu
55a0: 6d 62 65 72 20 72 65 70 72 65 73 65 6e 74 69 6e  mber representin
55b0: 67 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 3c  g true or false<
55c0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
55d0: 20 3c 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75   <returns></retu
55e0: 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  rns>..    public
55f0: 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 54 6f 42   static bool ToB
5600: 6f 6f 6c 65 61 6e 28 6f 62 6a 65 63 74 20 73 6f  oolean(object so
5610: 75 72 63 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  urce)..    {..  
5620: 20 20 20 20 69 66 20 28 73 6f 75 72 63 65 20 69      if (source i
5630: 73 20 62 6f 6f 6c 29 20 72 65 74 75 72 6e 20 28  s bool) return (
5640: 62 6f 6f 6c 29 73 6f 75 72 63 65 3b 0d 0a 0d 0a  bool)source;....
5650: 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 42        return ToB
5660: 6f 6f 6c 65 61 6e 28 73 6f 75 72 63 65 2e 54 6f  oolean(source.To
5670: 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20  String());..    
5680: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
5690: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
56a0: 43 6f 6e 76 65 72 74 20 61 20 73 74 72 69 6e 67  Convert a string
56b0: 20 74 6f 20 74 72 75 65 20 6f 72 20 66 61 6c 73   to true or fals
56c0: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
56d0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
56e0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 6f 75  <param name="sou
56f0: 72 63 65 22 3e 41 20 73 74 72 69 6e 67 20 72 65  rce">A string re
5700: 70 72 65 73 65 6e 74 69 6e 67 20 74 72 75 65 20  presenting true 
5710: 6f 72 20 66 61 6c 73 65 3c 2f 70 61 72 61 6d 3e  or false</param>
5720: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
5730: 6e 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ns></returns>.. 
5740: 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e     /// <remarks>
5750: 0d 0a 20 20 20 20 2f 2f 2f 20 22 79 65 73 22 2c  ..    /// "yes",
5760: 20 22 6e 6f 22 2c 20 22 79 22 2c 20 22 6e 22 2c   "no", "y", "n",
5770: 20 22 30 22 2c 20 22 31 22 2c 20 22 6f 6e 22 2c   "0", "1", "on",
5780: 20 22 6f 66 66 22 20 61 73 20 77 65 6c 6c 20 61   "off" as well a
5790: 73 20 42 6f 6f 6c 65 61 6e 2e 46 61 6c 73 65 53  s Boolean.FalseS
57a0: 74 72 69 6e 67 20 61 6e 64 20 42 6f 6f 6c 65 61  tring and Boolea
57b0: 6e 2e 54 72 75 65 53 74 72 69 6e 67 20 77 69 6c  n.TrueString wil
57c0: 6c 20 61 6c 6c 20 62 65 0d 0a 20 20 20 20 2f 2f  l all be..    //
57d0: 2f 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61  / converted to a
57e0: 20 70 72 6f 70 65 72 20 62 6f 6f 6c 65 61 6e 20   proper boolean 
57f0: 76 61 6c 75 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  value...    /// 
5800: 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20  </remarks>..    
5810: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f  public static bo
5820: 6f 6c 20 54 6f 42 6f 6f 6c 65 61 6e 28 73 74 72  ol ToBoolean(str
5830: 69 6e 67 20 73 6f 75 72 63 65 29 0d 0a 20 20 20  ing source)..   
5840: 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 53 74   {..      if (St
5850: 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 73 6f 75  ring.Compare(sou
5860: 72 63 65 2c 20 62 6f 6f 6c 2e 54 72 75 65 53 74  rce, bool.TrueSt
5870: 72 69 6e 67 2c 20 53 74 72 69 6e 67 43 6f 6d 70  ring, StringComp
5880: 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
5890: 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 20  noreCase) == 0) 
58a0: 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
58b0: 20 20 20 20 65 6c 73 65 20 69 66 20 28 53 74 72      else if (Str
58c0: 69 6e 67 2e 43 6f 6d 70 61 72 65 28 73 6f 75 72  ing.Compare(sour
58d0: 63 65 2c 20 62 6f 6f 6c 2e 46 61 6c 73 65 53 74  ce, bool.FalseSt
58e0: 72 69 6e 67 2c 20 53 74 72 69 6e 67 43 6f 6d 70  ring, StringComp
58f0: 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
5900: 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 20  noreCase) == 0) 
5910: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
5920: 0a 20 20 20 20 20 20 73 77 69 74 63 68 28 73 6f  .      switch(so
5930: 75 72 63 65 2e 54 6f 4c 6f 77 65 72 28 43 75 6c  urce.ToLower(Cul
5940: 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
5950: 6e 74 43 75 6c 74 75 72 65 29 29 0d 0a 20 20 20  ntCulture))..   
5960: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61     {..        ca
5970: 73 65 20 22 79 65 73 22 3a 0d 0a 20 20 20 20 20  se "yes":..     
5980: 20 20 20 63 61 73 65 20 22 79 22 3a 0d 0a 20 20     case "y":..  
5990: 20 20 20 20 20 20 63 61 73 65 20 22 31 22 3a 0d        case "1":.
59a0: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 22 6f  .        case "o
59b0: 6e 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72  n":..          r
59c0: 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
59d0: 20 20 20 20 20 63 61 73 65 20 22 6e 6f 22 3a 0d       case "no":.
59e0: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 22 6e  .        case "n
59f0: 22 3a 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65  ":..        case
5a00: 20 22 30 22 3a 0d 0a 20 20 20 20 20 20 20 20 63   "0":..        c
5a10: 61 73 65 20 22 6f 66 66 22 3a 0d 0a 20 20 20 20  ase "off":..    
5a20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
5a30: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 64 65 66  se;..        def
5a40: 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 20  ault:..         
5a50: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
5a60: 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 22 73 6f  entException("so
5a70: 75 72 63 65 22 29 3b 0d 0a 20 20 20 20 20 20 7d  urce");..      }
5a80: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 23  ..    }....    #
5a90: 72 65 67 69 6f 6e 20 54 79 70 65 20 43 6f 6e 76  region Type Conv
5aa0: 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20 2f 2f 2f  ersions..    ///
5ab0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
5ac0: 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 74  /// Determines t
5ad0: 68 65 20 64 61 74 61 20 74 79 70 65 20 6f 66 20  he data type of 
5ae0: 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 73 74  a column in a st
5af0: 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20 2f 2f 2f  atement..    ///
5b00: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
5b10: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
5b20: 3d 22 73 74 6d 74 22 3e 54 68 65 20 73 74 61 74  ="stmt">The stat
5b30: 65 6d 65 6e 74 20 74 6f 20 72 65 74 72 69 65 76  ement to retriev
5b40: 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f  e information fo
5b50: 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  r</param>..    /
5b60: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
5b70: 69 22 3e 54 68 65 20 63 6f 6c 75 6d 6e 20 74 6f  i">The column to
5b80: 20 72 65 74 72 69 65 76 65 20 74 79 70 65 20 69   retrieve type i
5b90: 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 3c 2f 70  nformation on</p
5ba0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
5bb0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22  param name="typ"
5bc0: 3e 54 68 65 20 53 51 4c 69 74 65 54 79 70 65 20  >The SQLiteType 
5bd0: 74 6f 20 72 65 63 65 69 76 65 20 74 68 65 20 61  to receive the a
5be0: 66 66 69 6e 69 74 79 20 66 6f 72 20 74 68 65 20  ffinity for the 
5bf0: 67 69 76 65 6e 20 63 6f 6c 75 6d 6e 3c 2f 70 61  given column</pa
5c00: 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ram>..    intern
5c10: 61 6c 20 73 74 61 74 69 63 20 76 6f 69 64 20 43  al static void C
5c20: 6f 6c 75 6d 6e 54 6f 54 79 70 65 28 53 51 4c 69  olumnToType(SQLi
5c30: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
5c40: 2c 20 69 6e 74 20 69 2c 20 53 51 4c 69 74 65 54  , int i, SQLiteT
5c50: 79 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d  ype typ)..    {.
5c60: 0a 20 20 20 20 20 20 74 79 70 2e 54 79 70 65 20  .      typ.Type 
5c70: 3d 20 54 79 70 65 4e 61 6d 65 54 6f 44 62 54 79  = TypeNameToDbTy
5c80: 70 65 28 73 74 6d 74 2e 5f 73 71 6c 2e 43 6f 6c  pe(stmt._sql.Col
5c90: 75 6d 6e 54 79 70 65 28 73 74 6d 74 2c 20 69 2c  umnType(stmt, i,
5ca0: 20 6f 75 74 20 74 79 70 2e 41 66 66 69 6e 69 74   out typ.Affinit
5cb0: 79 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  y));..    }.... 
5cc0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
5cd0: 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72  ..    /// Conver
5ce0: 74 73 20 61 20 53 51 4c 69 74 65 54 79 70 65 20  ts a SQLiteType 
5cf0: 74 6f 20 61 20 2e 4e 45 54 20 54 79 70 65 20 6f  to a .NET Type o
5d00: 62 6a 65 63 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c  bject..    /// <
5d10: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
5d20: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
5d30: 74 22 3e 54 68 65 20 53 51 4c 69 74 65 54 79 70  t">The SQLiteTyp
5d40: 65 20 74 6f 20 63 6f 6e 76 65 72 74 3c 2f 70 61  e to convert</pa
5d50: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
5d60: 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61  eturns>Returns a
5d70: 20 2e 4e 45 54 20 54 79 70 65 20 6f 62 6a 65 63   .NET Type objec
5d80: 74 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  t</returns>..   
5d90: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
5da0: 20 54 79 70 65 20 53 51 4c 69 74 65 54 79 70 65   Type SQLiteType
5db0: 54 6f 54 79 70 65 28 53 51 4c 69 74 65 54 79 70  ToType(SQLiteTyp
5dc0: 65 20 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  e t)..    {..   
5dd0: 20 20 20 69 66 20 28 74 2e 54 79 70 65 20 3d 3d     if (t.Type ==
5de0: 20 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 29 0d   DbType.Object).
5df0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
5e00: 5f 61 66 66 69 6e 69 74 79 74 6f 74 79 70 65 5b  _affinitytotype[
5e10: 28 69 6e 74 29 74 2e 41 66 66 69 6e 69 74 79 5d  (int)t.Affinity]
5e20: 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20  ;..      else.. 
5e30: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
5e40: 4c 69 74 65 43 6f 6e 76 65 72 74 2e 44 62 54 79  LiteConvert.DbTy
5e50: 70 65 54 6f 54 79 70 65 28 74 2e 54 79 70 65 29  peToType(t.Type)
5e60: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
5e70: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 54  private static T
5e80: 79 70 65 5b 5d 20 5f 61 66 66 69 6e 69 74 79 74  ype[] _affinityt
5e90: 6f 74 79 70 65 20 3d 20 7b 0d 0a 20 20 20 20 20  otype = {..     
5ea0: 20 74 79 70 65 6f 66 28 6f 62 6a 65 63 74 29 2c   typeof(object),
5eb0: 20 20 20 2f 2f 20 55 6e 69 6e 69 74 69 61 6c 69     // Uninitiali
5ec0: 7a 65 64 20 28 30 29 0d 0a 20 20 20 20 20 20 74  zed (0)..      t
5ed0: 79 70 65 6f 66 28 49 6e 74 36 34 29 2c 20 20 20  ypeof(Int64),   
5ee0: 20 2f 2f 20 49 6e 74 36 34 20 28 31 29 0d 0a 20   // Int64 (1).. 
5ef0: 20 20 20 20 20 74 79 70 65 6f 66 28 44 6f 75 62       typeof(Doub
5f00: 6c 65 29 2c 20 20 20 2f 2f 20 44 6f 75 62 6c 65  le),   // Double
5f10: 20 28 32 29 0d 0a 20 20 20 20 20 20 74 79 70 65   (2)..      type
5f20: 6f 66 28 73 74 72 69 6e 67 29 2c 20 20 20 2f 2f  of(string),   //
5f30: 20 54 65 78 74 20 28 33 29 0d 0a 20 20 20 20 20   Text (3)..     
5f40: 20 74 79 70 65 6f 66 28 62 79 74 65 5b 5d 29 2c   typeof(byte[]),
5f50: 20 20 20 2f 2f 20 42 6c 6f 62 20 28 34 29 0d 0a     // Blob (4)..
5f60: 20 20 20 20 20 20 74 79 70 65 6f 66 28 6f 62 6a        typeof(obj
5f70: 65 63 74 29 2c 20 20 20 2f 2f 20 4e 75 6c 6c 20  ect),   // Null 
5f80: 28 35 29 0d 0a 20 20 20 20 20 20 74 79 70 65 6f  (5)..      typeo
5f90: 66 28 44 61 74 65 54 69 6d 65 29 2c 20 2f 2f 20  f(DateTime), // 
5fa0: 44 61 74 65 54 69 6d 65 20 28 31 30 29 0d 0a 20  DateTime (10).. 
5fb0: 20 20 20 20 20 74 79 70 65 6f 66 28 6f 62 6a 65       typeof(obje
5fc0: 63 74 29 20 20 20 20 2f 2f 20 4e 6f 6e 65 20 28  ct)    // None (
5fd0: 31 31 29 0d 0a 20 20 20 20 7d 3b 0d 0a 0d 0a 20  11)..    };.... 
5fe0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
5ff0: 0d 0a 20 20 20 20 2f 2f 2f 20 46 6f 72 20 61 20  ..    /// For a 
6000: 67 69 76 65 6e 20 69 6e 74 72 69 6e 73 69 63 20  given intrinsic 
6010: 74 79 70 65 2c 20 72 65 74 75 72 6e 20 61 20 44  type, return a D
6020: 62 54 79 70 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c  bType..    /// <
6030: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
6040: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
6050: 74 79 70 22 3e 54 68 65 20 6e 61 74 69 76 65 20  typ">The native 
6060: 74 79 70 65 20 74 6f 20 63 6f 6e 76 65 72 74 3c  type to convert<
6070: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
6080: 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 63 6f   <returns>The co
6090: 72 72 65 73 70 6f 6e 64 69 6e 67 20 28 63 6c 6f  rresponding (clo
60a0: 73 65 73 74 20 6d 61 74 63 68 29 20 44 62 54 79  sest match) DbTy
60b0: 70 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  pe</returns>..  
60c0: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
60d0: 63 20 44 62 54 79 70 65 20 54 79 70 65 54 6f 44  c DbType TypeToD
60e0: 62 54 79 70 65 28 54 79 70 65 20 74 79 70 29 0d  bType(Type typ).
60f0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 54 79  .    {..      Ty
6100: 70 65 43 6f 64 65 20 74 63 20 3d 20 54 79 70 65  peCode tc = Type
6110: 2e 47 65 74 54 79 70 65 43 6f 64 65 28 74 79 70  .GetTypeCode(typ
6120: 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 74 63  );..      if (tc
6130: 20 3d 3d 20 54 79 70 65 43 6f 64 65 2e 4f 62 6a   == TypeCode.Obj
6140: 65 63 74 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  ect)..      {.. 
6150: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
6160: 3d 20 74 79 70 65 6f 66 28 62 79 74 65 5b 5d 29  = typeof(byte[])
6170: 29 20 72 65 74 75 72 6e 20 44 62 54 79 70 65 2e  ) return DbType.
6180: 42 69 6e 61 72 79 3b 0d 0a 20 20 20 20 20 20 20  Binary;..       
6190: 20 69 66 20 28 74 79 70 20 3d 3d 20 74 79 70 65   if (typ == type
61a0: 6f 66 28 47 75 69 64 29 29 20 72 65 74 75 72 6e  of(Guid)) return
61b0: 20 44 62 54 79 70 65 2e 47 75 69 64 3b 0d 0a 20   DbType.Guid;.. 
61c0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 62         return Db
61d0: 54 79 70 65 2e 53 74 72 69 6e 67 3b 0d 0a 20 20  Type.String;..  
61e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 72 65 74      }..      ret
61f0: 75 72 6e 20 5f 74 79 70 65 74 6f 64 62 74 79 70  urn _typetodbtyp
6200: 65 5b 28 69 6e 74 29 74 63 5d 3b 0d 0a 20 20 20  e[(int)tc];..   
6210: 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74   }....    privat
6220: 65 20 73 74 61 74 69 63 20 44 62 54 79 70 65 5b  e static DbType[
6230: 5d 20 5f 74 79 70 65 74 6f 64 62 74 79 70 65 20  ] _typetodbtype 
6240: 3d 20 7b 0d 0a 20 20 20 20 20 20 44 62 54 79 70  = {..      DbTyp
6250: 65 2e 4f 62 6a 65 63 74 2c 20 20 20 2f 2f 20 45  e.Object,   // E
6260: 6d 70 74 79 20 28 30 29 0d 0a 20 20 20 20 20 20  mpty (0)..      
6270: 44 62 54 79 70 65 2e 42 69 6e 61 72 79 2c 20 20  DbType.Binary,  
6280: 20 2f 2f 20 4f 62 6a 65 63 74 20 28 31 29 0d 0a   // Object (1)..
6290: 20 20 20 20 20 20 44 62 54 79 70 65 2e 4f 62 6a        DbType.Obj
62a0: 65 63 74 2c 20 20 20 2f 2f 20 44 42 4e 75 6c 6c  ect,   // DBNull
62b0: 20 28 32 29 0d 0a 20 20 20 20 20 20 44 62 54 79   (2)..      DbTy
62c0: 70 65 2e 42 6f 6f 6c 65 61 6e 2c 20 20 2f 2f 20  pe.Boolean,  // 
62d0: 42 6f 6f 6c 65 61 6e 20 28 33 29 0d 0a 20 20 20  Boolean (3)..   
62e0: 20 20 20 44 62 54 79 70 65 2e 53 42 79 74 65 2c     DbType.SByte,
62f0: 20 20 20 20 2f 2f 20 43 68 61 72 20 28 34 29 0d      // Char (4).
6300: 0a 20 20 20 20 20 20 44 62 54 79 70 65 2e 53 42  .      DbType.SB
6310: 79 74 65 2c 20 20 20 20 2f 2f 20 53 42 79 74 65  yte,    // SByte
6320: 20 28 35 29 0d 0a 20 20 20 20 20 20 44 62 54 79   (5)..      DbTy
6330: 70 65 2e 42 79 74 65 2c 20 20 20 20 20 2f 2f 20  pe.Byte,     // 
6340: 42 79 74 65 20 28 36 29 0d 0a 20 20 20 20 20 20  Byte (6)..      
6350: 44 62 54 79 70 65 2e 49 6e 74 31 36 2c 20 20 20  DbType.Int16,   
6360: 20 2f 2f 20 49 6e 74 31 36 20 28 37 29 0d 0a 20   // Int16 (7).. 
6370: 20 20 20 20 20 44 62 54 79 70 65 2e 55 49 6e 74       DbType.UInt
6380: 31 36 2c 20 20 20 2f 2f 20 55 49 6e 74 31 36 20  16,   // UInt16 
6390: 28 38 29 0d 0a 20 20 20 20 20 20 44 62 54 79 70  (8)..      DbTyp
63a0: 65 2e 49 6e 74 33 32 2c 20 20 20 20 2f 2f 20 49  e.Int32,    // I
63b0: 6e 74 33 32 20 28 39 29 0d 0a 20 20 20 20 20 20  nt32 (9)..      
63c0: 44 62 54 79 70 65 2e 55 49 6e 74 33 32 2c 20 20  DbType.UInt32,  
63d0: 20 2f 2f 20 55 49 6e 74 33 32 20 28 31 30 29 0d   // UInt32 (10).
63e0: 0a 20 20 20 20 20 20 44 62 54 79 70 65 2e 49 6e  .      DbType.In
63f0: 74 36 34 2c 20 20 20 20 2f 2f 20 49 6e 74 36 34  t64,    // Int64
6400: 20 28 31 31 29 0d 0a 20 20 20 20 20 20 44 62 54   (11)..      DbT
6410: 79 70 65 2e 55 49 6e 74 36 34 2c 20 20 20 2f 2f  ype.UInt64,   //
6420: 20 55 49 6e 74 36 34 20 28 31 32 29 0d 0a 20 20   UInt64 (12)..  
6430: 20 20 20 20 44 62 54 79 70 65 2e 53 69 6e 67 6c      DbType.Singl
6440: 65 2c 20 20 20 2f 2f 20 53 69 6e 67 6c 65 20 28  e,   // Single (
6450: 31 33 29 0d 0a 20 20 20 20 20 20 44 62 54 79 70  13)..      DbTyp
6460: 65 2e 44 6f 75 62 6c 65 2c 20 20 20 2f 2f 20 44  e.Double,   // D
6470: 6f 75 62 6c 65 20 28 31 34 29 0d 0a 20 20 20 20  ouble (14)..    
6480: 20 20 44 62 54 79 70 65 2e 44 65 63 69 6d 61 6c    DbType.Decimal
6490: 2c 20 20 2f 2f 20 44 65 63 69 6d 61 6c 20 28 31  ,  // Decimal (1
64a0: 35 29 0d 0a 20 20 20 20 20 20 44 62 54 79 70 65  5)..      DbType
64b0: 2e 44 61 74 65 54 69 6d 65 2c 20 2f 2f 20 44 61  .DateTime, // Da
64c0: 74 65 54 69 6d 65 20 28 31 36 29 0d 0a 20 20 20  teTime (16)..   
64d0: 20 20 20 44 62 54 79 70 65 2e 4f 62 6a 65 63 74     DbType.Object
64e0: 2c 20 20 20 2f 2f 20 3f 3f 20 28 31 37 29 0d 0a  ,   // ?? (17)..
64f0: 20 20 20 20 20 20 44 62 54 79 70 65 2e 53 74 72        DbType.Str
6500: 69 6e 67 20 20 20 20 2f 2f 20 53 74 72 69 6e 67  ing    // String
6510: 20 28 31 38 29 0d 0a 20 20 20 20 7d 3b 0d 0a 0d   (18)..    };...
6520: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
6530: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
6540: 72 6e 73 20 74 68 65 20 43 6f 6c 75 6d 6e 53 69  rns the ColumnSi
6550: 7a 65 20 66 6f 72 20 74 68 65 20 67 69 76 65 6e  ze for the given
6560: 20 44 62 54 79 70 65 0d 0a 20 20 20 20 2f 2f 2f   DbType..    ///
6570: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
6580: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
6590: 3d 22 74 79 70 22 3e 54 68 65 20 44 62 54 79 70  ="typ">The DbTyp
65a0: 65 20 74 6f 20 67 65 74 20 74 68 65 20 73 69 7a  e to get the siz
65b0: 65 20 6f 66 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  e of</param>..  
65c0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 3c    /// <returns><
65d0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
65e0: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 69  nternal static i
65f0: 6e 74 20 44 62 54 79 70 65 54 6f 43 6f 6c 75 6d  nt DbTypeToColum
6600: 6e 53 69 7a 65 28 44 62 54 79 70 65 20 74 79 70  nSize(DbType typ
6610: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
6620: 72 65 74 75 72 6e 20 5f 64 62 74 79 70 65 74 6f  return _dbtypeto
6630: 63 6f 6c 75 6d 6e 73 69 7a 65 5b 28 69 6e 74 29  columnsize[(int)
6640: 74 79 70 5d 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  typ];..    }....
6650: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
6660: 69 63 20 69 6e 74 5b 5d 20 5f 64 62 74 79 70 65  ic int[] _dbtype
6670: 74 6f 63 6f 6c 75 6d 6e 73 69 7a 65 20 3d 20 7b  tocolumnsize = {
6680: 0d 0a 20 20 20 20 20 20 69 6e 74 2e 4d 61 78 56  ..      int.MaxV
6690: 61 6c 75 65 2c 20 2f 2f 20 41 6e 73 69 53 74 72  alue, // AnsiStr
66a0: 69 6e 67 20 28 30 29 0d 0a 20 20 20 20 20 20 69  ing (0)..      i
66b0: 6e 74 2e 4d 61 78 56 61 6c 75 65 2c 20 2f 2f 20  nt.MaxValue, // 
66c0: 42 69 6e 61 72 79 20 28 31 29 0d 0a 20 20 20 20  Binary (1)..    
66d0: 20 20 31 2c 20 20 20 20 20 20 20 20 20 20 20 20    1,            
66e0: 2f 2f 20 42 79 74 65 20 28 32 29 0d 0a 20 20 20  // Byte (2)..   
66f0: 20 20 20 31 2c 20 20 20 20 20 20 20 20 20 20 20     1,           
6700: 20 2f 2f 20 42 6f 6f 6c 65 61 6e 20 28 33 29 0d   // Boolean (3).
6710: 0a 20 20 20 20 20 20 38 2c 20 20 20 20 20 20 20  .      8,       
6720: 20 20 20 20 20 2f 2f 20 43 75 72 72 65 6e 63 79       // Currency
6730: 20 28 34 29 0d 0a 20 20 20 20 20 20 38 2c 20 20   (4)..      8,  
6740: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44 61 74            // Dat
6750: 65 20 28 35 29 0d 0a 20 20 20 20 20 20 38 2c 20  e (5)..      8, 
6760: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44 61             // Da
6770: 74 65 54 69 6d 65 20 28 36 29 0d 0a 20 20 20 20  teTime (6)..    
6780: 20 20 38 2c 20 20 20 20 20 20 20 20 20 20 20 20    8,            
6790: 2f 2f 20 44 65 63 69 6d 61 6c 20 28 37 29 0d 0a  // Decimal (7)..
67a0: 20 20 20 20 20 20 38 2c 20 20 20 20 20 20 20 20        8,        
67b0: 20 20 20 20 2f 2f 20 44 6f 75 62 6c 65 20 28 38      // Double (8
67c0: 29 0d 0a 20 20 20 20 20 20 31 36 2c 20 20 20 20  )..      16,    
67d0: 20 20 20 20 20 20 20 2f 2f 20 47 75 69 64 20 28         // Guid (
67e0: 39 29 0d 0a 20 20 20 20 20 20 32 2c 20 20 20 20  9)..      2,    
67f0: 20 20 20 20 20 20 20 20 2f 2f 20 49 6e 74 31 36          // Int16
6800: 20 28 31 30 29 0d 0a 20 20 20 20 20 20 34 2c 20   (10)..      4, 
6810: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49 6e             // In
6820: 74 33 32 20 28 31 31 29 0d 0a 20 20 20 20 20 20  t32 (11)..      
6830: 38 2c 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  8,            //
6840: 20 49 6e 74 36 34 20 28 31 32 29 0d 0a 20 20 20   Int64 (12)..   
6850: 20 20 20 69 6e 74 2e 4d 61 78 56 61 6c 75 65 2c     int.MaxValue,
6860: 20 2f 2f 20 4f 62 6a 65 63 74 20 28 31 33 29 0d   // Object (13).
6870: 0a 20 20 20 20 20 20 31 2c 20 20 20 20 20 20 20  .      1,       
6880: 20 20 20 20 20 2f 2f 20 53 42 79 74 65 20 28 31       // SByte (1
6890: 34 29 0d 0a 20 20 20 20 20 20 34 2c 20 20 20 20  4)..      4,    
68a0: 20 20 20 20 20 20 20 20 2f 2f 20 53 69 6e 67 6c          // Singl
68b0: 65 20 28 31 35 29 0d 0a 20 20 20 20 20 20 69 6e  e (15)..      in
68c0: 74 2e 4d 61 78 56 61 6c 75 65 2c 20 2f 2f 20 53  t.MaxValue, // S
68d0: 74 72 69 6e 67 20 28 31 36 29 0d 0a 20 20 20 20  tring (16)..    
68e0: 20 20 38 2c 20 20 20 20 20 20 20 20 20 20 20 20    8,            
68f0: 2f 2f 20 54 69 6d 65 20 28 31 37 29 0d 0a 20 20  // Time (17)..  
6900: 20 20 20 20 32 2c 20 20 20 20 20 20 20 20 20 20      2,          
6910: 20 20 2f 2f 20 55 49 6e 74 31 36 20 28 31 38 29    // UInt16 (18)
6920: 0d 0a 20 20 20 20 20 20 34 2c 20 20 20 20 20 20  ..      4,      
6930: 20 20 20 20 20 20 2f 2f 20 55 49 6e 74 33 32 20        // UInt32 
6940: 28 31 39 29 0d 0a 20 20 20 20 20 20 38 2c 20 20  (19)..      8,  
6950: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 49 6e            // UIn
6960: 74 36 34 20 28 32 30 29 0d 0a 20 20 20 20 20 20  t64 (20)..      
6970: 38 2c 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  8,            //
6980: 20 56 61 72 4e 75 6d 65 72 69 63 20 28 32 31 29   VarNumeric (21)
6990: 0d 0a 20 20 20 20 20 20 69 6e 74 2e 4d 61 78 56  ..      int.MaxV
69a0: 61 6c 75 65 2c 20 2f 2f 20 41 6e 73 69 53 74 72  alue, // AnsiStr
69b0: 69 6e 67 46 69 78 65 64 4c 65 6e 67 74 68 20 28  ingFixedLength (
69c0: 32 32 29 0d 0a 20 20 20 20 20 20 69 6e 74 2e 4d  22)..      int.M
69d0: 61 78 56 61 6c 75 65 2c 20 2f 2f 20 53 74 72 69  axValue, // Stri
69e0: 6e 67 46 69 78 65 64 4c 65 6e 67 74 68 20 28 32  ngFixedLength (2
69f0: 33 29 0d 0a 20 20 20 20 20 20 69 6e 74 2e 4d 61  3)..      int.Ma
6a00: 78 56 61 6c 75 65 2c 20 2f 2f 20 3f 3f 20 28 32  xValue, // ?? (2
6a10: 34 29 0d 0a 20 20 20 20 20 20 69 6e 74 2e 4d 61  4)..      int.Ma
6a20: 78 56 61 6c 75 65 20 20 2f 2f 20 58 6d 6c 20 28  xValue  // Xml (
6a30: 32 35 29 0d 0a 20 20 20 20 7d 3b 0d 0a 0d 0a 20  25)..    };.... 
6a40: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
6a50: 69 63 20 6f 62 6a 65 63 74 20 44 62 54 79 70 65  ic object DbType
6a60: 54 6f 4e 75 6d 65 72 69 63 50 72 65 63 69 73 69  ToNumericPrecisi
6a70: 6f 6e 28 44 62 54 79 70 65 20 74 79 70 29 0d 0a  on(DbType typ)..
6a80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
6a90: 75 72 6e 20 5f 64 62 74 79 70 65 74 6f 6e 75 6d  urn _dbtypetonum
6aa0: 65 72 69 63 70 72 65 63 69 73 69 6f 6e 5b 28 69  ericprecision[(i
6ab0: 6e 74 29 74 79 70 5d 3b 0d 0a 20 20 20 20 7d 0d  nt)typ];..    }.
6ac0: 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  ...    private s
6ad0: 74 61 74 69 63 20 6f 62 6a 65 63 74 5b 5d 20 5f  tatic object[] _
6ae0: 64 62 74 79 70 65 74 6f 6e 75 6d 65 72 69 63 70  dbtypetonumericp
6af0: 72 65 63 69 73 69 6f 6e 20 3d 20 7b 0d 0a 20 20  recision = {..  
6b00: 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65      DBNull.Value
6b10: 2c 20 2f 2f 20 41 6e 73 69 53 74 72 69 6e 67 20  , // AnsiString 
6b20: 28 30 29 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c  (0)..      DBNul
6b30: 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20 42 69 6e 61  l.Value, // Bina
6b40: 72 79 20 28 31 29 0d 0a 20 20 20 20 20 20 33 2c  ry (1)..      3,
6b50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 42              // B
6b60: 79 74 65 20 28 32 29 0d 0a 20 20 20 20 20 20 44  yte (2)..      D
6b70: 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20  BNull.Value, // 
6b80: 42 6f 6f 6c 65 61 6e 20 28 33 29 0d 0a 20 20 20  Boolean (3)..   
6b90: 20 20 20 31 39 2c 20 20 20 20 20 20 20 20 20 20     19,          
6ba0: 20 2f 2f 20 43 75 72 72 65 6e 63 79 20 28 34 29   // Currency (4)
6bb0: 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56  ..      DBNull.V
6bc0: 61 6c 75 65 2c 20 2f 2f 20 44 61 74 65 20 28 35  alue, // Date (5
6bd0: 29 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e  )..      DBNull.
6be0: 56 61 6c 75 65 2c 20 2f 2f 20 44 61 74 65 54 69  Value, // DateTi
6bf0: 6d 65 20 28 36 29 0d 0a 20 20 20 20 20 20 35 33  me (6)..      53
6c00: 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44  ,           // D
6c10: 65 63 69 6d 61 6c 20 28 37 29 0d 0a 20 20 20 20  ecimal (7)..    
6c20: 20 20 35 33 2c 20 20 20 20 20 20 20 20 20 20 20    53,           
6c30: 2f 2f 20 44 6f 75 62 6c 65 20 28 38 29 0d 0a 20  // Double (8).. 
6c40: 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75       DBNull.Valu
6c50: 65 2c 20 2f 2f 20 47 75 69 64 20 28 39 29 0d 0a  e, // Guid (9)..
6c60: 20 20 20 20 20 20 35 2c 20 20 20 20 20 20 20 20        5,        
6c70: 20 20 20 20 2f 2f 20 49 6e 74 31 36 20 28 31 30      // Int16 (10
6c80: 29 0d 0a 20 20 20 20 20 20 31 30 2c 20 20 20 20  )..      10,    
6c90: 20 20 20 20 20 20 20 2f 2f 20 49 6e 74 33 32 20         // Int32 
6ca0: 28 31 31 29 0d 0a 20 20 20 20 20 20 31 39 2c 20  (11)..      19, 
6cb0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49 6e 74            // Int
6cc0: 36 34 20 28 31 32 29 0d 0a 20 20 20 20 20 20 44  64 (12)..      D
6cd0: 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20  BNull.Value, // 
6ce0: 4f 62 6a 65 63 74 20 28 31 33 29 0d 0a 20 20 20  Object (13)..   
6cf0: 20 20 20 33 2c 20 20 20 20 20 20 20 20 20 20 20     3,           
6d00: 20 2f 2f 20 53 42 79 74 65 20 28 31 34 29 0d 0a   // SByte (14)..
6d10: 20 20 20 20 20 20 32 34 2c 20 20 20 20 20 20 20        24,       
6d20: 20 20 20 20 2f 2f 20 53 69 6e 67 6c 65 20 28 31      // Single (1
6d30: 35 29 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c  5)..      DBNull
6d40: 2e 56 61 6c 75 65 2c 20 2f 2f 20 53 74 72 69 6e  .Value, // Strin
6d50: 67 20 28 31 36 29 0d 0a 20 20 20 20 20 20 44 42  g (16)..      DB
6d60: 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20 54  Null.Value, // T
6d70: 69 6d 65 20 28 31 37 29 0d 0a 20 20 20 20 20 20  ime (17)..      
6d80: 35 2c 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  5,            //
6d90: 20 55 49 6e 74 31 36 20 28 31 38 29 0d 0a 20 20   UInt16 (18)..  
6da0: 20 20 20 20 31 30 2c 20 20 20 20 20 20 20 20 20      10,         
6db0: 20 20 2f 2f 20 55 49 6e 74 33 32 20 28 31 39 29    // UInt32 (19)
6dc0: 0d 0a 20 20 20 20 20 20 31 39 2c 20 20 20 20 20  ..      19,     
6dd0: 20 20 20 20 20 20 2f 2f 20 55 49 6e 74 36 34 20        // UInt64 
6de0: 28 32 30 29 0d 0a 20 20 20 20 20 20 35 33 2c 20  (20)..      53, 
6df0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 56 61 72            // Var
6e00: 4e 75 6d 65 72 69 63 20 28 32 31 29 0d 0a 20 20  Numeric (21)..  
6e10: 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65      DBNull.Value
6e20: 2c 20 2f 2f 20 41 6e 73 69 53 74 72 69 6e 67 46  , // AnsiStringF
6e30: 69 78 65 64 4c 65 6e 67 74 68 20 28 32 32 29 0d  ixedLength (22).
6e40: 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61  .      DBNull.Va
6e50: 6c 75 65 2c 20 2f 2f 20 53 74 72 69 6e 67 46 69  lue, // StringFi
6e60: 78 65 64 4c 65 6e 67 74 68 20 28 32 33 29 0d 0a  xedLength (23)..
6e70: 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c        DBNull.Val
6e80: 75 65 2c 20 2f 2f 20 3f 3f 20 28 32 34 29 0d 0a  ue, // ?? (24)..
6e90: 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c        DBNull.Val
6ea0: 75 65 20 20 2f 2f 20 58 6d 6c 20 28 32 35 29 0d  ue  // Xml (25).
6eb0: 0a 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 69  .    };....    i
6ec0: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 6f  nternal static o
6ed0: 62 6a 65 63 74 20 44 62 54 79 70 65 54 6f 4e 75  bject DbTypeToNu
6ee0: 6d 65 72 69 63 53 63 61 6c 65 28 44 62 54 79 70  mericScale(DbTyp
6ef0: 65 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a 20  e typ)..    {.. 
6f00: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 64 62 74       return _dbt
6f10: 79 70 65 74 6f 6e 75 6d 65 72 69 63 73 63 61 6c  ypetonumericscal
6f20: 65 5b 28 69 6e 74 29 74 79 70 5d 3b 0d 0a 20 20  e[(int)typ];..  
6f30: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61    }....    priva
6f40: 74 65 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74  te static object
6f50: 5b 5d 20 5f 64 62 74 79 70 65 74 6f 6e 75 6d 65  [] _dbtypetonume
6f60: 72 69 63 73 63 61 6c 65 20 3d 20 7b 0d 0a 20 20  ricscale = {..  
6f70: 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65      DBNull.Value
6f80: 2c 20 2f 2f 20 41 6e 73 69 53 74 72 69 6e 67 20  , // AnsiString 
6f90: 28 30 29 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c  (0)..      DBNul
6fa0: 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20 42 69 6e 61  l.Value, // Bina
6fb0: 72 79 20 28 31 29 0d 0a 20 20 20 20 20 20 30 2c  ry (1)..      0,
6fc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 42              // B
6fd0: 79 74 65 20 28 32 29 0d 0a 20 20 20 20 20 20 44  yte (2)..      D
6fe0: 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20  BNull.Value, // 
6ff0: 42 6f 6f 6c 65 61 6e 20 28 33 29 0d 0a 20 20 20  Boolean (3)..   
7000: 20 20 20 34 2c 20 20 20 20 20 20 20 20 20 20 20     4,           
7010: 20 2f 2f 20 43 75 72 72 65 6e 63 79 20 28 34 29   // Currency (4)
7020: 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56  ..      DBNull.V
7030: 61 6c 75 65 2c 20 2f 2f 20 44 61 74 65 20 28 35  alue, // Date (5
7040: 29 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e  )..      DBNull.
7050: 56 61 6c 75 65 2c 20 2f 2f 20 44 61 74 65 54 69  Value, // DateTi
7060: 6d 65 20 28 36 29 0d 0a 20 20 20 20 20 20 44 42  me (6)..      DB
7070: 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20 44  Null.Value, // D
7080: 65 63 69 6d 61 6c 20 28 37 29 0d 0a 20 20 20 20  ecimal (7)..    
7090: 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20    DBNull.Value, 
70a0: 2f 2f 20 44 6f 75 62 6c 65 20 28 38 29 0d 0a 20  // Double (8).. 
70b0: 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75       DBNull.Valu
70c0: 65 2c 20 2f 2f 20 47 75 69 64 20 28 39 29 0d 0a  e, // Guid (9)..
70d0: 20 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20        0,        
70e0: 20 20 20 20 2f 2f 20 49 6e 74 31 36 20 28 31 30      // Int16 (10
70f0: 29 0d 0a 20 20 20 20 20 20 30 2c 20 20 20 20 20  )..      0,     
7100: 20 20 20 20 20 20 20 2f 2f 20 49 6e 74 33 32 20         // Int32 
7110: 28 31 31 29 0d 0a 20 20 20 20 20 20 30 2c 20 20  (11)..      0,  
7120: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49 6e 74            // Int
7130: 36 34 20 28 31 32 29 0d 0a 20 20 20 20 20 20 44  64 (12)..      D
7140: 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20  BNull.Value, // 
7150: 4f 62 6a 65 63 74 20 28 31 33 29 0d 0a 20 20 20  Object (13)..   
7160: 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 20 20     0,           
7170: 20 2f 2f 20 53 42 79 74 65 20 28 31 34 29 0d 0a   // SByte (14)..
7180: 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c        DBNull.Val
7190: 75 65 2c 20 2f 2f 20 53 69 6e 67 6c 65 20 28 31  ue, // Single (1
71a0: 35 29 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c  5)..      DBNull
71b0: 2e 56 61 6c 75 65 2c 20 2f 2f 20 53 74 72 69 6e  .Value, // Strin
71c0: 67 20 28 31 36 29 0d 0a 20 20 20 20 20 20 44 42  g (16)..      DB
71d0: 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20 54  Null.Value, // T
71e0: 69 6d 65 20 28 31 37 29 0d 0a 20 20 20 20 20 20  ime (17)..      
71f0: 30 2c 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  0,            //
7200: 20 55 49 6e 74 31 36 20 28 31 38 29 0d 0a 20 20   UInt16 (18)..  
7210: 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 20      0,          
7220: 20 20 2f 2f 20 55 49 6e 74 33 32 20 28 31 39 29    // UInt32 (19)
7230: 0d 0a 20 20 20 20 20 20 30 2c 20 20 20 20 20 20  ..      0,      
7240: 20 20 20 20 20 20 2f 2f 20 55 49 6e 74 36 34 20        // UInt64 
7250: 28 32 30 29 0d 0a 20 20 20 20 20 20 30 2c 20 20  (20)..      0,  
7260: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 56 61 72            // Var
7270: 4e 75 6d 65 72 69 63 20 28 32 31 29 0d 0a 20 20  Numeric (21)..  
7280: 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65      DBNull.Value
7290: 2c 20 2f 2f 20 41 6e 73 69 53 74 72 69 6e 67 46  , // AnsiStringF
72a0: 69 78 65 64 4c 65 6e 67 74 68 20 28 32 32 29 0d  ixedLength (22).
72b0: 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61  .      DBNull.Va
72c0: 6c 75 65 2c 20 2f 2f 20 53 74 72 69 6e 67 46 69  lue, // StringFi
72d0: 78 65 64 4c 65 6e 67 74 68 20 28 32 33 29 0d 0a  xedLength (23)..
72e0: 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c        DBNull.Val
72f0: 75 65 2c 20 2f 2f 20 3f 3f 20 28 32 34 29 0d 0a  ue, // ?? (24)..
7300: 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c        DBNull.Val
7310: 75 65 20 20 2f 2f 20 58 6d 6c 20 28 32 35 29 0d  ue  // Xml (25).
7320: 0a 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 69  .    };....    i
7330: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73  nternal static s
7340: 74 72 69 6e 67 20 44 62 54 79 70 65 54 6f 54 79  tring DbTypeToTy
7350: 70 65 4e 61 6d 65 28 44 62 54 79 70 65 20 74 79  peName(DbType ty
7360: 70 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  p)..    {..     
7370: 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b   for (int n = 0;
7380: 20 6e 20 3c 20 5f 64 62 74 79 70 65 4e 61 6d 65   n < _dbtypeName
7390: 73 2e 4c 65 6e 67 74 68 3b 20 6e 2b 2b 29 0d 0a  s.Length; n++)..
73a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
73b0: 20 69 66 20 28 5f 64 62 74 79 70 65 4e 61 6d 65   if (_dbtypeName
73c0: 73 5b 6e 5d 2e 64 61 74 61 54 79 70 65 20 3d 3d  s[n].dataType ==
73d0: 20 74 79 70 29 0d 0a 20 20 20 20 20 20 20 20 20   typ)..         
73e0: 20 72 65 74 75 72 6e 20 5f 64 62 74 79 70 65 4e   return _dbtypeN
73f0: 61 6d 65 73 5b 6e 5d 2e 74 79 70 65 4e 61 6d 65  ames[n].typeName
7400: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
7410: 20 20 20 20 73 74 72 69 6e 67 20 64 65 66 61 75      string defau
7420: 6c 74 54 79 70 65 4e 61 6d 65 20 3d 20 53 74 72  ltTypeName = Str
7430: 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 23 69  ing.Empty;....#i
7440: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
7450: 30 20 26 26 20 54 52 41 43 45 5f 57 41 52 4e 49  0 && TRACE_WARNI
7460: 4e 47 0d 0a 20 20 20 20 20 20 54 72 61 63 65 2e  NG..      Trace.
7470: 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67  WriteLine(String
7480: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
7490: 20 20 20 20 22 57 41 52 4e 49 4e 47 3a 20 54 79      "WARNING: Ty
74a0: 70 65 20 6d 61 70 70 69 6e 67 20 66 61 69 6c 65  pe mapping faile
74b0: 64 2c 20 72 65 74 75 72 6e 69 6e 67 20 64 65 66  d, returning def
74c0: 61 75 6c 74 20 6e 61 6d 65 20 5c 22 7b 30 7d 5c  ault name \"{0}\
74d0: 22 20 66 6f 72 20 74 79 70 65 20 7b 31 7d 2e 22  " for type {1}."
74e0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 66  ,..          def
74f0: 61 75 6c 74 54 79 70 65 4e 61 6d 65 2c 20 74 79  aultTypeName, ty
7500: 70 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  p));..#endif....
7510: 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 65 66        return def
7520: 61 75 6c 74 54 79 70 65 4e 61 6d 65 3b 0d 0a 20  aultTypeName;.. 
7530: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76     }....    priv
7540: 61 74 65 20 73 74 61 74 69 63 20 53 51 4c 69 74  ate static SQLit
7550: 65 54 79 70 65 4e 61 6d 65 73 5b 5d 20 5f 64 62  eTypeNames[] _db
7560: 74 79 70 65 4e 61 6d 65 73 20 3d 20 47 65 74 53  typeNames = GetS
7570: 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 29  QLiteTypeNames()
7580: 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ;....    /// <su
7590: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
75a0: 43 6f 6e 76 65 72 74 20 61 20 44 62 54 79 70 65  Convert a DbType
75b0: 20 74 6f 20 61 20 54 79 70 65 0d 0a 20 20 20 20   to a Type..    
75c0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
75d0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
75e0: 61 6d 65 3d 22 74 79 70 22 3e 54 68 65 20 44 62  ame="typ">The Db
75f0: 54 79 70 65 20 74 6f 20 63 6f 6e 76 65 72 74 20  Type to convert 
7600: 66 72 6f 6d 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  from</param>..  
7610: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
7620: 68 65 20 63 6c 6f 73 65 73 74 2d 6d 61 74 63 68  he closest-match
7630: 20 2e 4e 45 54 20 74 79 70 65 3c 2f 72 65 74 75   .NET type</retu
7640: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
7650: 61 6c 20 73 74 61 74 69 63 20 54 79 70 65 20 44  al static Type D
7660: 62 54 79 70 65 54 6f 54 79 70 65 28 44 62 54 79  bTypeToType(DbTy
7670: 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a  pe typ)..    {..
7680: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 64 62        return _db
7690: 74 79 70 65 54 6f 54 79 70 65 5b 28 69 6e 74 29  typeToType[(int)
76a0: 74 79 70 5d 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  typ];..    }....
76b0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
76c0: 69 63 20 54 79 70 65 5b 5d 20 5f 64 62 74 79 70  ic Type[] _dbtyp
76d0: 65 54 6f 54 79 70 65 20 3d 20 7b 0d 0a 20 20 20  eToType = {..   
76e0: 20 20 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67     typeof(string
76f0: 29 2c 20 20 20 2f 2f 20 41 6e 73 69 53 74 72 69  ),   // AnsiStri
7700: 6e 67 20 28 30 29 0d 0a 20 20 20 20 20 20 74 79  ng (0)..      ty
7710: 70 65 6f 66 28 62 79 74 65 5b 5d 29 2c 20 20 20  peof(byte[]),   
7720: 2f 2f 20 42 69 6e 61 72 79 20 28 31 29 0d 0a 20  // Binary (1).. 
7730: 20 20 20 20 20 74 79 70 65 6f 66 28 62 79 74 65       typeof(byte
7740: 29 2c 20 20 20 20 20 2f 2f 20 42 79 74 65 20 28  ),     // Byte (
7750: 32 29 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66  2)..      typeof
7760: 28 62 6f 6f 6c 29 2c 20 20 20 20 20 2f 2f 20 42  (bool),     // B
7770: 6f 6f 6c 65 61 6e 20 28 33 29 0d 0a 20 20 20 20  oolean (3)..    
7780: 20 20 74 79 70 65 6f 66 28 64 65 63 69 6d 61 6c    typeof(decimal
7790: 29 2c 20 20 2f 2f 20 43 75 72 72 65 6e 63 79 20  ),  // Currency 
77a0: 28 34 29 0d 0a 20 20 20 20 20 20 74 79 70 65 6f  (4)..      typeo
77b0: 66 28 44 61 74 65 54 69 6d 65 29 2c 20 2f 2f 20  f(DateTime), // 
77c0: 44 61 74 65 20 28 35 29 0d 0a 20 20 20 20 20 20  Date (5)..      
77d0: 74 79 70 65 6f 66 28 44 61 74 65 54 69 6d 65 29  typeof(DateTime)
77e0: 2c 20 2f 2f 20 44 61 74 65 54 69 6d 65 20 28 36  , // DateTime (6
77f0: 29 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28  )..      typeof(
7800: 64 65 63 69 6d 61 6c 29 2c 20 20 2f 2f 20 44 65  decimal),  // De
7810: 63 69 6d 61 6c 20 28 37 29 0d 0a 20 20 20 20 20  cimal (7)..     
7820: 20 74 79 70 65 6f 66 28 64 6f 75 62 6c 65 29 2c   typeof(double),
7830: 20 20 20 2f 2f 20 44 6f 75 62 6c 65 20 28 38 29     // Double (8)
7840: 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 47  ..      typeof(G
7850: 75 69 64 29 2c 20 20 20 20 20 2f 2f 20 47 75 69  uid),     // Gui
7860: 64 20 28 39 29 0d 0a 20 20 20 20 20 20 74 79 70  d (9)..      typ
7870: 65 6f 66 28 49 6e 74 31 36 29 2c 20 20 20 20 2f  eof(Int16),    /
7880: 2f 20 49 6e 74 31 36 20 28 31 30 29 0d 0a 20 20  / Int16 (10)..  
7890: 20 20 20 20 74 79 70 65 6f 66 28 49 6e 74 33 32      typeof(Int32
78a0: 29 2c 20 20 20 20 2f 2f 20 49 6e 74 33 32 20 28  ),    // Int32 (
78b0: 31 31 29 0d 0a 20 20 20 20 20 20 74 79 70 65 6f  11)..      typeo
78c0: 66 28 49 6e 74 36 34 29 2c 20 20 20 20 2f 2f 20  f(Int64),    // 
78d0: 49 6e 74 36 34 20 28 31 32 29 0d 0a 20 20 20 20  Int64 (12)..    
78e0: 20 20 74 79 70 65 6f 66 28 6f 62 6a 65 63 74 29    typeof(object)
78f0: 2c 20 20 20 2f 2f 20 4f 62 6a 65 63 74 20 28 31  ,   // Object (1
7900: 33 29 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66  3)..      typeof
7910: 28 73 62 79 74 65 29 2c 20 20 20 20 2f 2f 20 53  (sbyte),    // S
7920: 42 79 74 65 20 28 31 34 29 0d 0a 20 20 20 20 20  Byte (14)..     
7930: 20 74 79 70 65 6f 66 28 66 6c 6f 61 74 29 2c 20   typeof(float), 
7940: 20 20 20 2f 2f 20 53 69 6e 67 6c 65 20 28 31 35     // Single (15
7950: 29 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28  )..      typeof(
7960: 73 74 72 69 6e 67 29 2c 20 20 20 2f 2f 20 53 74  string),   // St
7970: 72 69 6e 67 20 28 31 36 29 0d 0a 20 20 20 20 20  ring (16)..     
7980: 20 74 79 70 65 6f 66 28 44 61 74 65 54 69 6d 65   typeof(DateTime
7990: 29 2c 20 2f 2f 20 54 69 6d 65 20 28 31 37 29 0d  ), // Time (17).
79a0: 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 55 49  .      typeof(UI
79b0: 6e 74 31 36 29 2c 20 20 20 2f 2f 20 55 49 6e 74  nt16),   // UInt
79c0: 31 36 20 28 31 38 29 0d 0a 20 20 20 20 20 20 74  16 (18)..      t
79d0: 79 70 65 6f 66 28 55 49 6e 74 33 32 29 2c 20 20  ypeof(UInt32),  
79e0: 20 2f 2f 20 55 49 6e 74 33 32 20 28 31 39 29 0d   // UInt32 (19).
79f0: 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 55 49  .      typeof(UI
7a00: 6e 74 36 34 29 2c 20 20 20 2f 2f 20 55 49 6e 74  nt64),   // UInt
7a10: 36 34 20 28 32 30 29 0d 0a 20 20 20 20 20 20 74  64 (20)..      t
7a20: 79 70 65 6f 66 28 64 6f 75 62 6c 65 29 2c 20 20  ypeof(double),  
7a30: 20 2f 2f 20 56 61 72 4e 75 6d 65 72 69 63 20 28   // VarNumeric (
7a40: 32 31 29 0d 0a 20 20 20 20 20 20 74 79 70 65 6f  21)..      typeo
7a50: 66 28 73 74 72 69 6e 67 29 2c 20 20 20 2f 2f 20  f(string),   // 
7a60: 41 6e 73 69 53 74 72 69 6e 67 46 69 78 65 64 4c  AnsiStringFixedL
7a70: 65 6e 67 74 68 20 28 32 32 29 0d 0a 20 20 20 20  ength (22)..    
7a80: 20 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29    typeof(string)
7a90: 2c 20 20 20 2f 2f 20 53 74 72 69 6e 67 46 69 78  ,   // StringFix
7aa0: 65 64 4c 65 6e 67 74 68 20 28 32 33 29 0d 0a 20  edLength (23).. 
7ab0: 20 20 20 20 20 74 79 70 65 6f 66 28 73 74 72 69       typeof(stri
7ac0: 6e 67 29 2c 20 20 20 2f 2f 20 3f 3f 20 28 32 34  ng),   // ?? (24
7ad0: 29 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28  )..      typeof(
7ae0: 73 74 72 69 6e 67 29 2c 20 20 20 2f 2f 20 58 6d  string),   // Xm
7af0: 6c 20 28 32 35 29 0d 0a 20 20 20 20 7d 3b 0d 0a  l (25)..    };..
7b00: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
7b10: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 46 6f 72  ry>..    /// For
7b20: 20 61 20 67 69 76 65 6e 20 74 79 70 65 2c 20 72   a given type, r
7b30: 65 74 75 72 6e 20 74 68 65 20 63 6c 6f 73 65 73  eturn the closes
7b40: 74 2d 6d 61 74 63 68 20 53 51 4c 69 74 65 20 54  t-match SQLite T
7b50: 79 70 65 41 66 66 69 6e 69 74 79 2c 20 77 68 69  ypeAffinity, whi
7b60: 63 68 20 6f 6e 6c 79 20 75 6e 64 65 72 73 74 61  ch only understa
7b70: 6e 64 73 20 61 20 76 65 72 79 20 6c 69 6d 69 74  nds a very limit
7b80: 65 64 20 73 75 62 73 65 74 20 6f 66 20 74 79 70  ed subset of typ
7b90: 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  es...    /// </s
7ba0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
7bb0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79   <param name="ty
7bc0: 70 22 3e 54 68 65 20 74 79 70 65 20 74 6f 20 65  p">The type to e
7bd0: 76 61 6c 75 61 74 65 3c 2f 70 61 72 61 6d 3e 0d  valuate</param>.
7be0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
7bf0: 73 3e 54 68 65 20 53 51 4c 69 74 65 20 74 79 70  s>The SQLite typ
7c00: 65 20 61 66 66 69 6e 69 74 79 20 66 6f 72 20 74  e affinity for t
7c10: 68 61 74 20 74 79 70 65 2e 3c 2f 72 65 74 75 72  hat type.</retur
7c20: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
7c30: 6c 20 73 74 61 74 69 63 20 54 79 70 65 41 66 66  l static TypeAff
7c40: 69 6e 69 74 79 20 54 79 70 65 54 6f 41 66 66 69  inity TypeToAffi
7c50: 6e 69 74 79 28 54 79 70 65 20 74 79 70 29 0d 0a  nity(Type typ)..
7c60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 54 79 70      {..      Typ
7c70: 65 43 6f 64 65 20 74 63 20 3d 20 54 79 70 65 2e  eCode tc = Type.
7c80: 47 65 74 54 79 70 65 43 6f 64 65 28 74 79 70 29  GetTypeCode(typ)
7c90: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 74 63 20  ;..      if (tc 
7ca0: 3d 3d 20 54 79 70 65 43 6f 64 65 2e 4f 62 6a 65  == TypeCode.Obje
7cb0: 63 74 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ct)..      {..  
7cc0: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
7cd0: 20 74 79 70 65 6f 66 28 62 79 74 65 5b 5d 29 20   typeof(byte[]) 
7ce0: 7c 7c 20 74 79 70 20 3d 3d 20 74 79 70 65 6f 66  || typ == typeof
7cf0: 28 47 75 69 64 29 29 0d 0a 20 20 20 20 20 20 20  (Guid))..       
7d00: 20 20 20 72 65 74 75 72 6e 20 54 79 70 65 41 66     return TypeAf
7d10: 66 69 6e 69 74 79 2e 42 6c 6f 62 3b 0d 0a 20 20  finity.Blob;..  
7d20: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
7d30: 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 79 70        return Typ
7d40: 65 41 66 66 69 6e 69 74 79 2e 54 65 78 74 3b 0d  eAffinity.Text;.
7d50: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
7d60: 72 65 74 75 72 6e 20 5f 74 79 70 65 63 6f 64 65  return _typecode
7d70: 41 66 66 69 6e 69 74 69 65 73 5b 28 69 6e 74 29  Affinities[(int)
7d80: 74 63 5d 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  tc];..    }.... 
7d90: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
7da0: 63 20 54 79 70 65 41 66 66 69 6e 69 74 79 5b 5d  c TypeAffinity[]
7db0: 20 5f 74 79 70 65 63 6f 64 65 41 66 66 69 6e 69   _typecodeAffini
7dc0: 74 69 65 73 20 3d 20 7b 0d 0a 20 20 20 20 20 20  ties = {..      
7dd0: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c  TypeAffinity.Nul
7de0: 6c 2c 20 20 20 20 20 2f 2f 20 45 6d 70 74 79 20  l,     // Empty 
7df0: 28 30 29 0d 0a 20 20 20 20 20 20 54 79 70 65 41  (0)..      TypeA
7e00: 66 66 69 6e 69 74 79 2e 42 6c 6f 62 2c 20 20 20  ffinity.Blob,   
7e10: 20 20 2f 2f 20 4f 62 6a 65 63 74 20 28 31 29 0d    // Object (1).
7e20: 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e  .      TypeAffin
7e30: 69 74 79 2e 4e 75 6c 6c 2c 20 20 20 20 20 2f 2f  ity.Null,     //
7e40: 20 44 42 4e 75 6c 6c 20 28 32 29 0d 0a 20 20 20   DBNull (2)..   
7e50: 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e     TypeAffinity.
7e60: 49 6e 74 36 34 2c 20 20 20 20 2f 2f 20 42 6f 6f  Int64,    // Boo
7e70: 6c 65 61 6e 20 28 33 29 0d 0a 20 20 20 20 20 20  lean (3)..      
7e80: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74  TypeAffinity.Int
7e90: 36 34 2c 20 20 20 20 2f 2f 20 43 68 61 72 20 28  64,    // Char (
7ea0: 34 29 0d 0a 20 20 20 20 20 20 54 79 70 65 41 66  4)..      TypeAf
7eb0: 66 69 6e 69 74 79 2e 49 6e 74 36 34 2c 20 20 20  finity.Int64,   
7ec0: 20 2f 2f 20 53 42 79 74 65 20 28 35 29 0d 0a 20   // SByte (5).. 
7ed0: 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74       TypeAffinit
7ee0: 79 2e 49 6e 74 36 34 2c 20 20 20 20 2f 2f 20 42  y.Int64,    // B
7ef0: 79 74 65 20 28 36 29 0d 0a 20 20 20 20 20 20 54  yte (6)..      T
7f00: 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36  ypeAffinity.Int6
7f10: 34 2c 20 20 20 20 2f 2f 20 49 6e 74 31 36 20 28  4,    // Int16 (
7f20: 37 29 0d 0a 20 20 20 20 20 20 54 79 70 65 41 66  7)..      TypeAf
7f30: 66 69 6e 69 74 79 2e 49 6e 74 36 34 2c 20 20 20  finity.Int64,   
7f40: 20 2f 2f 20 55 49 6e 74 31 36 20 28 38 29 0d 0a   // UInt16 (8)..
7f50: 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69        TypeAffini
7f60: 74 79 2e 49 6e 74 36 34 2c 20 20 20 20 2f 2f 20  ty.Int64,    // 
7f70: 49 6e 74 33 32 20 28 39 29 0d 0a 20 20 20 20 20  Int32 (9)..     
7f80: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e   TypeAffinity.In
7f90: 74 36 34 2c 20 20 20 20 2f 2f 20 55 49 6e 74 33  t64,    // UInt3
7fa0: 32 20 28 31 30 29 0d 0a 20 20 20 20 20 20 54 79  2 (10)..      Ty
7fb0: 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34  peAffinity.Int64
7fc0: 2c 20 20 20 20 2f 2f 20 49 6e 74 36 34 20 28 31  ,    // Int64 (1
7fd0: 31 29 0d 0a 20 20 20 20 20 20 54 79 70 65 41 66  1)..      TypeAf
7fe0: 66 69 6e 69 74 79 2e 49 6e 74 36 34 2c 20 20 20  finity.Int64,   
7ff0: 20 2f 2f 20 55 49 6e 74 36 34 20 28 31 32 29 0d   // UInt64 (12).
8000: 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e  .      TypeAffin
8010: 69 74 79 2e 44 6f 75 62 6c 65 2c 20 20 20 2f 2f  ity.Double,   //
8020: 20 53 69 6e 67 6c 65 20 28 31 33 29 0d 0a 20 20   Single (13)..  
8030: 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79      TypeAffinity
8040: 2e 44 6f 75 62 6c 65 2c 20 20 20 2f 2f 20 44 6f  .Double,   // Do
8050: 75 62 6c 65 20 28 31 34 29 0d 0a 20 20 20 20 20  uble (14)..     
8060: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f   TypeAffinity.Do
8070: 75 62 6c 65 2c 20 20 20 2f 2f 20 44 65 63 69 6d  uble,   // Decim
8080: 61 6c 20 28 31 35 29 0d 0a 20 20 20 20 20 20 54  al (15)..      T
8090: 79 70 65 41 66 66 69 6e 69 74 79 2e 44 61 74 65  ypeAffinity.Date
80a0: 54 69 6d 65 2c 20 2f 2f 20 44 61 74 65 54 69 6d  Time, // DateTim
80b0: 65 20 28 31 36 29 0d 0a 20 20 20 20 20 20 54 79  e (16)..      Ty
80c0: 70 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 2c  peAffinity.Null,
80d0: 20 20 20 20 20 2f 2f 20 3f 3f 20 28 31 37 29 0d       // ?? (17).
80e0: 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e  .      TypeAffin
80f0: 69 74 79 2e 54 65 78 74 20 20 20 20 20 20 2f 2f  ity.Text      //
8100: 20 53 74 72 69 6e 67 20 28 31 38 29 0d 0a 20 20   String (18)..  
8110: 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20    };....    /// 
8120: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
8130: 2f 2f 20 42 75 69 6c 64 73 20 61 6e 64 20 72 65  // Builds and re
8140: 74 75 72 6e 73 20 61 6e 20 61 72 72 61 79 20 63  turns an array c
8150: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 64 61  ontaining the da
8160: 74 61 62 61 73 65 20 63 6f 6c 75 6d 6e 20 74 79  tabase column ty
8170: 70 65 73 0d 0a 20 20 20 20 2f 2f 2f 20 72 65 63  pes..    /// rec
8180: 6f 67 6e 69 7a 65 64 20 62 79 20 74 68 69 73 20  ognized by this 
8190: 70 72 6f 76 69 64 65 72 2e 0d 0a 20 20 20 20 2f  provider...    /
81a0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
81b0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
81c0: 0d 0a 20 20 20 20 2f 2f 2f 20 41 6e 20 61 72 72  ..    /// An arr
81d0: 61 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ay containing th
81e0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6c 75 6d  e database colum
81f0: 6e 20 74 79 70 65 73 20 72 65 63 6f 67 6e 69 7a  n types recogniz
8200: 65 64 20 62 79 20 74 68 69 73 0d 0a 20 20 20 20  ed by this..    
8210: 2f 2f 2f 20 70 72 6f 76 69 64 65 72 2e 0d 0a 20  /// provider... 
8220: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
8230: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  >..    private s
8240: 74 61 74 69 63 20 53 51 4c 69 74 65 54 79 70 65  tatic SQLiteType
8250: 4e 61 6d 65 73 5b 5d 20 47 65 74 53 51 4c 69 74  Names[] GetSQLit
8260: 65 54 79 70 65 4e 61 6d 65 73 28 29 0d 0a 20 20  eTypeNames()..  
8270: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
8280: 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65 54 79  urn new SQLiteTy
8290: 70 65 4e 61 6d 65 73 5b 5d 20 7b 0d 0a 20 20 20  peNames[] {..   
82a0: 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c           new SQL
82b0: 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 42 49  iteTypeNames("BI
82c0: 47 49 4e 54 22 2c 20 44 62 54 79 70 65 2e 49 6e  GINT", DbType.In
82d0: 74 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  t64),..         
82e0: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
82f0: 65 4e 61 6d 65 73 28 22 42 49 47 55 49 4e 54 22  eNames("BIGUINT"
8300: 2c 20 44 62 54 79 70 65 2e 55 49 6e 74 36 34 29  , DbType.UInt64)
8310: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ,..            n
8320: 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d  ew SQLiteTypeNam
8330: 65 73 28 22 42 49 4e 41 52 59 22 2c 20 44 62 54  es("BINARY", DbT
8340: 79 70 65 2e 42 69 6e 61 72 79 29 2c 0d 0a 20 20  ype.Binary),..  
8350: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51            new SQ
8360: 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 42  LiteTypeNames("B
8370: 49 54 22 2c 20 44 62 54 79 70 65 2e 42 6f 6f 6c  IT", DbType.Bool
8380: 65 61 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ean),..         
8390: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
83a0: 65 4e 61 6d 65 73 28 22 42 4c 4f 42 22 2c 20 44  eNames("BLOB", D
83b0: 62 54 79 70 65 2e 42 69 6e 61 72 79 29 2c 0d 0a  bType.Binary),..
83c0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
83d0: 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28  SQLiteTypeNames(
83e0: 22 42 4f 4f 4c 22 2c 20 44 62 54 79 70 65 2e 42  "BOOL", DbType.B
83f0: 6f 6f 6c 65 61 6e 29 2c 0d 0a 20 20 20 20 20 20  oolean),..      
8400: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
8410: 54 79 70 65 4e 61 6d 65 73 28 22 42 4f 4f 4c 45  TypeNames("BOOLE
8420: 41 4e 22 2c 20 44 62 54 79 70 65 2e 42 6f 6f 6c  AN", DbType.Bool
8430: 65 61 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ean),..         
8440: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
8450: 65 4e 61 6d 65 73 28 22 43 48 41 52 22 2c 20 44  eNames("CHAR", D
8460: 62 54 79 70 65 2e 41 6e 73 69 53 74 72 69 6e 67  bType.AnsiString
8470: 46 69 78 65 64 4c 65 6e 67 74 68 29 2c 0d 0a 20  FixedLength),.. 
8480: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53             new S
8490: 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22  QLiteTypeNames("
84a0: 43 4f 55 4e 54 45 52 22 2c 20 44 62 54 79 70 65  COUNTER", DbType
84b0: 2e 49 6e 74 36 34 29 2c 0d 0a 20 20 20 20 20 20  .Int64),..      
84c0: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
84d0: 54 79 70 65 4e 61 6d 65 73 28 22 43 55 52 52 45  TypeNames("CURRE
84e0: 4e 43 59 22 2c 20 44 62 54 79 70 65 2e 44 65 63  NCY", DbType.Dec
84f0: 69 6d 61 6c 29 2c 0d 0a 20 20 20 20 20 20 20 20  imal),..        
8500: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
8510: 70 65 4e 61 6d 65 73 28 22 44 41 54 45 22 2c 20  peNames("DATE", 
8520: 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d 65 29  DbType.DateTime)
8530: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ,..            n
8540: 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d  ew SQLiteTypeNam
8550: 65 73 28 22 44 41 54 45 54 49 4d 45 22 2c 20 44  es("DATETIME", D
8560: 62 54 79 70 65 2e 44 61 74 65 54 69 6d 65 29 2c  bType.DateTime),
8570: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
8580: 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  w SQLiteTypeName
8590: 73 28 22 44 45 43 49 4d 41 4c 22 2c 20 44 62 54  s("DECIMAL", DbT
85a0: 79 70 65 2e 44 65 63 69 6d 61 6c 29 2c 0d 0a 20  ype.Decimal),.. 
85b0: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53             new S
85c0: 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22  QLiteTypeNames("
85d0: 44 4f 55 42 4c 45 22 2c 20 44 62 54 79 70 65 2e  DOUBLE", DbType.
85e0: 44 6f 75 62 6c 65 29 2c 0d 0a 20 20 20 20 20 20  Double),..      
85f0: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
8600: 54 79 70 65 4e 61 6d 65 73 28 22 46 4c 4f 41 54  TypeNames("FLOAT
8610: 22 2c 20 44 62 54 79 70 65 2e 44 6f 75 62 6c 65  ", DbType.Double
8620: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
8630: 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61  new SQLiteTypeNa
8640: 6d 65 73 28 22 47 45 4e 45 52 41 4c 22 2c 20 44  mes("GENERAL", D
8650: 62 54 79 70 65 2e 42 69 6e 61 72 79 29 2c 0d 0a  bType.Binary),..
8660: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
8670: 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28  SQLiteTypeNames(
8680: 22 47 55 49 44 22 2c 20 44 62 54 79 70 65 2e 47  "GUID", DbType.G
8690: 75 69 64 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  uid),..         
86a0: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
86b0: 65 4e 61 6d 65 73 28 22 49 44 45 4e 54 49 54 59  eNames("IDENTITY
86c0: 22 2c 20 44 62 54 79 70 65 2e 49 6e 74 36 34 29  ", DbType.Int64)
86d0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ,..            n
86e0: 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d  ew SQLiteTypeNam
86f0: 65 73 28 22 49 4d 41 47 45 22 2c 20 44 62 54 79  es("IMAGE", DbTy
8700: 70 65 2e 42 69 6e 61 72 79 29 2c 0d 0a 20 20 20  pe.Binary),..   
8710: 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c           new SQL
8720: 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 49 4e  iteTypeNames("IN
8730: 54 22 2c 20 44 62 54 79 70 65 2e 49 6e 74 33 32  T", DbType.Int32
8740: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
8750: 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61  new SQLiteTypeNa
8760: 6d 65 73 28 22 49 4e 54 38 22 2c 20 44 62 54 79  mes("INT8", DbTy
8770: 70 65 2e 53 42 79 74 65 29 2c 0d 0a 20 20 20 20  pe.SByte),..    
8780: 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69          new SQLi
8790: 74 65 54 79 70 65 4e 61 6d 65 73 28 22 49 4e 54  teTypeNames("INT
87a0: 31 36 22 2c 20 44 62 54 79 70 65 2e 49 6e 74 31  16", DbType.Int1
87b0: 36 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  6),..           
87c0: 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e   new SQLiteTypeN
87d0: 61 6d 65 73 28 22 49 4e 54 33 32 22 2c 20 44 62  ames("INT32", Db
87e0: 54 79 70 65 2e 49 6e 74 33 32 29 2c 0d 0a 20 20  Type.Int32),..  
87f0: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51            new SQ
8800: 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 49  LiteTypeNames("I
8810: 4e 54 36 34 22 2c 20 44 62 54 79 70 65 2e 49 6e  NT64", DbType.In
8820: 74 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  t64),..         
8830: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
8840: 65 4e 61 6d 65 73 28 22 49 4e 54 45 47 45 52 22  eNames("INTEGER"
8850: 2c 20 44 62 54 79 70 65 2e 49 6e 74 36 34 29 2c  , DbType.Int64),
8860: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
8870: 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  w SQLiteTypeName
8880: 73 28 22 49 4e 54 45 47 45 52 38 22 2c 20 44 62  s("INTEGER8", Db
8890: 54 79 70 65 2e 53 42 79 74 65 29 2c 0d 0a 20 20  Type.SByte),..  
88a0: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51            new SQ
88b0: 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 49  LiteTypeNames("I
88c0: 4e 54 45 47 45 52 31 36 22 2c 20 44 62 54 79 70  NTEGER16", DbTyp
88d0: 65 2e 49 6e 74 31 36 29 2c 0d 0a 20 20 20 20 20  e.Int16),..     
88e0: 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74         new SQLit
88f0: 65 54 79 70 65 4e 61 6d 65 73 28 22 49 4e 54 45  eTypeNames("INTE
8900: 47 45 52 33 32 22 2c 20 44 62 54 79 70 65 2e 49  GER32", DbType.I
8910: 6e 74 33 32 29 2c 0d 0a 20 20 20 20 20 20 20 20  nt32),..        
8920: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
8930: 70 65 4e 61 6d 65 73 28 22 49 4e 54 45 47 45 52  peNames("INTEGER
8940: 36 34 22 2c 20 44 62 54 79 70 65 2e 49 6e 74 36  64", DbType.Int6
8950: 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  4),..           
8960: 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e   new SQLiteTypeN
8970: 61 6d 65 73 28 22 4c 4f 47 49 43 41 4c 22 2c 20  ames("LOGICAL", 
8980: 44 62 54 79 70 65 2e 42 6f 6f 6c 65 61 6e 29 2c  DbType.Boolean),
8990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
89a0: 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  w SQLiteTypeName
89b0: 73 28 22 4c 4f 4e 47 22 2c 20 44 62 54 79 70 65  s("LONG", DbType
89c0: 2e 49 6e 74 36 34 29 2c 0d 0a 20 20 20 20 20 20  .Int64),..      
89d0: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
89e0: 54 79 70 65 4e 61 6d 65 73 28 22 4c 4f 4e 47 43  TypeNames("LONGC
89f0: 48 41 52 22 2c 20 44 62 54 79 70 65 2e 53 74 72  HAR", DbType.Str
8a00: 69 6e 67 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ing),..         
8a10: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
8a20: 65 4e 61 6d 65 73 28 22 4c 4f 4e 47 54 45 58 54  eNames("LONGTEXT
8a30: 22 2c 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67  ", DbType.String
8a40: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
8a50: 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61  new SQLiteTypeNa
8a60: 6d 65 73 28 22 4c 4f 4e 47 56 41 52 43 48 41 52  mes("LONGVARCHAR
8a70: 22 2c 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67  ", DbType.String
8a80: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
8a90: 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61  new SQLiteTypeNa
8aa0: 6d 65 73 28 22 4d 45 4d 4f 22 2c 20 44 62 54 79  mes("MEMO", DbTy
8ab0: 70 65 2e 53 74 72 69 6e 67 29 2c 0d 0a 20 20 20  pe.String),..   
8ac0: 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c           new SQL
8ad0: 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 4d 4f  iteTypeNames("MO
8ae0: 4e 45 59 22 2c 20 44 62 54 79 70 65 2e 44 65 63  NEY", DbType.Dec
8af0: 69 6d 61 6c 29 2c 0d 0a 20 20 20 20 20 20 20 20  imal),..        
8b00: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
8b10: 70 65 4e 61 6d 65 73 28 22 4e 43 48 41 52 22 2c  peNames("NCHAR",
8b20: 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67 46 69   DbType.StringFi
8b30: 78 65 64 4c 65 6e 67 74 68 29 2c 0d 0a 20 20 20  xedLength),..   
8b40: 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c           new SQL
8b50: 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 4e 4f  iteTypeNames("NO
8b60: 54 45 22 2c 20 44 62 54 79 70 65 2e 53 74 72 69  TE", DbType.Stri
8b70: 6e 67 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ng),..          
8b80: 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65    new SQLiteType
8b90: 4e 61 6d 65 73 28 22 4e 54 45 58 54 22 2c 20 44  Names("NTEXT", D
8ba0: 62 54 79 70 65 2e 53 74 72 69 6e 67 29 2c 0d 0a  bType.String),..
8bb0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
8bc0: 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28  SQLiteTypeNames(
8bd0: 22 4e 55 4d 45 52 49 43 22 2c 20 44 62 54 79 70  "NUMERIC", DbTyp
8be0: 65 2e 44 65 63 69 6d 61 6c 29 2c 0d 0a 20 20 20  e.Decimal),..   
8bf0: 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c           new SQL
8c00: 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 4e 56  iteTypeNames("NV
8c10: 41 52 43 48 41 52 22 2c 20 44 62 54 79 70 65 2e  ARCHAR", DbType.
8c20: 53 74 72 69 6e 67 29 2c 0d 0a 20 20 20 20 20 20  String),..      
8c30: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
8c40: 54 79 70 65 4e 61 6d 65 73 28 22 4f 4c 45 4f 42  TypeNames("OLEOB
8c50: 4a 45 43 54 22 2c 20 44 62 54 79 70 65 2e 42 69  JECT", DbType.Bi
8c60: 6e 61 72 79 29 2c 0d 0a 20 20 20 20 20 20 20 20  nary),..        
8c70: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
8c80: 70 65 4e 61 6d 65 73 28 22 52 45 41 4c 22 2c 20  peNames("REAL", 
8c90: 44 62 54 79 70 65 2e 44 6f 75 62 6c 65 29 2c 0d  DbType.Double),.
8ca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
8cb0: 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73   SQLiteTypeNames
8cc0: 28 22 53 4d 41 4c 4c 44 41 54 45 22 2c 20 44 62  ("SMALLDATE", Db
8cd0: 54 79 70 65 2e 44 61 74 65 54 69 6d 65 29 2c 0d  Type.DateTime),.
8ce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
8cf0: 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73   SQLiteTypeNames
8d00: 28 22 53 4d 41 4c 4c 49 4e 54 22 2c 20 44 62 54  ("SMALLINT", DbT
8d10: 79 70 65 2e 49 6e 74 31 36 29 2c 0d 0a 20 20 20  ype.Int16),..   
8d20: 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c           new SQL
8d30: 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 53 4d  iteTypeNames("SM
8d40: 41 4c 4c 55 49 4e 54 22 2c 20 44 62 54 79 70 65  ALLUINT", DbType
8d50: 2e 55 49 6e 74 31 36 29 2c 0d 0a 20 20 20 20 20  .UInt16),..     
8d60: 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74         new SQLit
8d70: 65 54 79 70 65 4e 61 6d 65 73 28 22 53 54 52 49  eTypeNames("STRI
8d80: 4e 47 22 2c 20 44 62 54 79 70 65 2e 53 74 72 69  NG", DbType.Stri
8d90: 6e 67 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ng),..          
8da0: 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65    new SQLiteType
8db0: 4e 61 6d 65 73 28 22 54 45 58 54 22 2c 20 44 62  Names("TEXT", Db
8dc0: 54 79 70 65 2e 53 74 72 69 6e 67 29 2c 0d 0a 20  Type.String),.. 
8dd0: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53             new S
8de0: 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22  QLiteTypeNames("
8df0: 54 49 4d 45 22 2c 20 44 62 54 79 70 65 2e 44 61  TIME", DbType.Da
8e00: 74 65 54 69 6d 65 29 2c 0d 0a 20 20 20 20 20 20  teTime),..      
8e10: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
8e20: 54 79 70 65 4e 61 6d 65 73 28 22 54 49 4d 45 53  TypeNames("TIMES
8e30: 54 41 4d 50 22 2c 20 44 62 54 79 70 65 2e 44 61  TAMP", DbType.Da
8e40: 74 65 54 69 6d 65 29 2c 0d 0a 20 20 20 20 20 20  teTime),..      
8e50: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
8e60: 54 79 70 65 4e 61 6d 65 73 28 22 54 49 4e 59 49  TypeNames("TINYI
8e70: 4e 54 22 2c 20 44 62 54 79 70 65 2e 42 79 74 65  NT", DbType.Byte
8e80: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
8e90: 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61  new SQLiteTypeNa
8ea0: 6d 65 73 28 22 54 49 4e 59 53 49 4e 54 22 2c 20  mes("TINYSINT", 
8eb0: 44 62 54 79 70 65 2e 53 42 79 74 65 29 2c 0d 0a  DbType.SByte),..
8ec0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
8ed0: 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28  SQLiteTypeNames(
8ee0: 22 55 49 4e 54 22 2c 20 44 62 54 79 70 65 2e 55  "UINT", DbType.U
8ef0: 49 6e 74 33 32 29 2c 0d 0a 20 20 20 20 20 20 20  Int32),..       
8f00: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54       new SQLiteT
8f10: 79 70 65 4e 61 6d 65 73 28 22 55 49 4e 54 38 22  ypeNames("UINT8"
8f20: 2c 20 44 62 54 79 70 65 2e 42 79 74 65 29 2c 0d  , DbType.Byte),.
8f30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
8f40: 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73   SQLiteTypeNames
8f50: 28 22 55 49 4e 54 31 36 22 2c 20 44 62 54 79 70  ("UINT16", DbTyp
8f60: 65 2e 55 49 6e 74 31 36 29 2c 0d 0a 20 20 20 20  e.UInt16),..    
8f70: 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69          new SQLi
8f80: 74 65 54 79 70 65 4e 61 6d 65 73 28 22 55 49 4e  teTypeNames("UIN
8f90: 54 33 32 22 2c 20 44 62 54 79 70 65 2e 55 49 6e  T32", DbType.UIn
8fa0: 74 33 32 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  t32),..         
8fb0: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
8fc0: 65 4e 61 6d 65 73 28 22 55 49 4e 54 36 34 22 2c  eNames("UINT64",
8fd0: 20 44 62 54 79 70 65 2e 55 49 6e 74 36 34 29 2c   DbType.UInt64),
8fe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
8ff0: 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  w SQLiteTypeName
9000: 73 28 22 55 4c 4f 4e 47 22 2c 20 44 62 54 79 70  s("ULONG", DbTyp
9010: 65 2e 55 49 6e 74 36 34 29 2c 0d 0a 20 20 20 20  e.UInt64),..    
9020: 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69          new SQLi
9030: 74 65 54 79 70 65 4e 61 6d 65 73 28 22 55 4e 49  teTypeNames("UNI
9040: 51 55 45 49 44 45 4e 54 49 46 49 45 52 22 2c 20  QUEIDENTIFIER", 
9050: 44 62 54 79 70 65 2e 47 75 69 64 29 2c 0d 0a 20  DbType.Guid),.. 
9060: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53             new S
9070: 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22  QLiteTypeNames("
9080: 55 4e 53 49 47 4e 45 44 49 4e 54 45 47 45 52 22  UNSIGNEDINTEGER"
9090: 2c 20 44 62 54 79 70 65 2e 55 49 6e 74 36 34 29  , DbType.UInt64)
90a0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ,..            n
90b0: 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d  ew SQLiteTypeNam
90c0: 65 73 28 22 55 4e 53 49 47 4e 45 44 49 4e 54 45  es("UNSIGNEDINTE
90d0: 47 45 52 38 22 2c 20 44 62 54 79 70 65 2e 42 79  GER8", DbType.By
90e0: 74 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  te),..          
90f0: 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65    new SQLiteType
9100: 4e 61 6d 65 73 28 22 55 4e 53 49 47 4e 45 44 49  Names("UNSIGNEDI
9110: 4e 54 45 47 45 52 31 36 22 2c 20 44 62 54 79 70  NTEGER16", DbTyp
9120: 65 2e 55 49 6e 74 31 36 29 2c 0d 0a 20 20 20 20  e.UInt16),..    
9130: 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69          new SQLi
9140: 74 65 54 79 70 65 4e 61 6d 65 73 28 22 55 4e 53  teTypeNames("UNS
9150: 49 47 4e 45 44 49 4e 54 45 47 45 52 33 32 22 2c  IGNEDINTEGER32",
9160: 20 44 62 54 79 70 65 2e 55 49 6e 74 33 32 29 2c   DbType.UInt32),
9170: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
9180: 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  w SQLiteTypeName
9190: 73 28 22 55 4e 53 49 47 4e 45 44 49 4e 54 45 47  s("UNSIGNEDINTEG
91a0: 45 52 36 34 22 2c 20 44 62 54 79 70 65 2e 55 49  ER64", DbType.UI
91b0: 6e 74 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20  nt64),..        
91c0: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
91d0: 70 65 4e 61 6d 65 73 28 22 56 41 52 42 49 4e 41  peNames("VARBINA
91e0: 52 59 22 2c 20 44 62 54 79 70 65 2e 42 69 6e 61  RY", DbType.Bina
91f0: 72 79 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ry),..          
9200: 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65    new SQLiteType
9210: 4e 61 6d 65 73 28 22 56 41 52 43 48 41 52 22 2c  Names("VARCHAR",
9220: 20 44 62 54 79 70 65 2e 41 6e 73 69 53 74 72 69   DbType.AnsiStri
9230: 6e 67 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ng),..          
9240: 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65    new SQLiteType
9250: 4e 61 6d 65 73 28 22 59 45 53 4e 4f 22 2c 20 44  Names("YESNO", D
9260: 62 54 79 70 65 2e 42 6f 6f 6c 65 61 6e 29 0d 0a  bType.Boolean)..
9270: 20 20 20 20 20 20 20 20 7d 3b 0d 0a 20 20 20 20          };..    
9280: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
9290: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
92a0: 46 6f 72 20 61 20 67 69 76 65 6e 20 74 79 70 65  For a given type
92b0: 20 6e 61 6d 65 2c 20 72 65 74 75 72 6e 20 61 20   name, return a 
92c0: 63 6c 6f 73 65 73 74 2d 6d 61 74 63 68 20 2e 4e  closest-match .N
92d0: 45 54 20 74 79 70 65 0d 0a 20 20 20 20 2f 2f 2f  ET type..    ///
92e0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
92f0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
9300: 3d 22 4e 61 6d 65 22 3e 54 68 65 20 6e 61 6d 65  ="Name">The name
9310: 20 6f 66 20 74 68 65 20 74 79 70 65 20 74 6f 20   of the type to 
9320: 6d 61 74 63 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20  match</param>.. 
9330: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
9340: 54 68 65 20 2e 4e 45 54 20 44 42 54 79 70 65 20  The .NET DBType 
9350: 74 68 65 20 74 65 78 74 20 65 76 61 6c 75 61 74  the text evaluat
9360: 65 73 20 74 6f 2e 3c 2f 72 65 74 75 72 6e 73 3e  es to.</returns>
9370: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
9380: 74 61 74 69 63 20 44 62 54 79 70 65 20 54 79 70  tatic DbType Typ
9390: 65 4e 61 6d 65 54 6f 44 62 54 79 70 65 28 73 74  eNameToDbType(st
93a0: 72 69 6e 67 20 4e 61 6d 65 29 0d 0a 20 20 20 20  ring Name)..    
93b0: 7b 0d 0a 20 20 20 20 20 20 6c 6f 63 6b 20 28 5f  {..      lock (_
93c0: 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20  syncRoot)..     
93d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
93e0: 5f 74 79 70 65 4e 61 6d 65 73 20 3d 3d 20 6e 75  _typeNames == nu
93f0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ll)..        {..
9400: 20 20 20 20 20 20 20 20 20 20 5f 74 79 70 65 4e            _typeN
9410: 61 6d 65 73 20 3d 20 6e 65 77 20 44 69 63 74 69  ames = new Dicti
9420: 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51  onary<string, SQ
9430: 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 3e 28 0d  LiteTypeNames>(.
9440: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e  .              n
9450: 65 77 20 54 79 70 65 4e 61 6d 65 53 74 72 69 6e  ew TypeNameStrin
9460: 67 43 6f 6d 70 61 72 65 72 28 29 29 3b 0d 0a 0d  gComparer());...
9470: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61  .          forea
9480: 63 68 20 28 53 51 4c 69 74 65 54 79 70 65 4e 61  ch (SQLiteTypeNa
9490: 6d 65 73 20 74 79 70 65 4e 61 6d 65 20 69 6e 20  mes typeName in 
94a0: 47 65 74 53 51 4c 69 74 65 54 79 70 65 4e 61 6d  GetSQLiteTypeNam
94b0: 65 73 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  es())..         
94c0: 20 20 20 5f 74 79 70 65 4e 61 6d 65 73 2e 41 64     _typeNames.Ad
94d0: 64 28 74 79 70 65 4e 61 6d 65 2e 74 79 70 65 4e  d(typeName.typeN
94e0: 61 6d 65 2c 20 74 79 70 65 4e 61 6d 65 29 3b 0d  ame, typeName);.
94f0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
9500: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if 
9510: 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
9520: 45 6d 70 74 79 28 4e 61 6d 65 29 29 20 72 65 74  Empty(Name)) ret
9530: 75 72 6e 20 44 62 54 79 70 65 2e 4f 62 6a 65 63  urn DbType.Objec
9540: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 53 51 4c 69  t;....      SQLi
9550: 74 65 54 79 70 65 4e 61 6d 65 73 20 76 61 6c 75  teTypeNames valu
9560: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  e;....      if (
9570: 5f 74 79 70 65 4e 61 6d 65 73 2e 54 72 79 47 65  _typeNames.TryGe
9580: 74 56 61 6c 75 65 28 4e 61 6d 65 2c 20 6f 75 74  tValue(Name, out
9590: 20 76 61 6c 75 65 29 29 0d 0a 20 20 20 20 20 20   value))..      
95a0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
95b0: 6e 20 76 61 6c 75 65 2e 64 61 74 61 54 79 70 65  n value.dataType
95c0: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
95d0: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d    else..      {.
95e0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64  .        int ind
95f0: 65 78 20 3d 20 4e 61 6d 65 2e 49 6e 64 65 78 4f  ex = Name.IndexO
9600: 66 28 27 28 27 29 3b 0d 0a 0d 0a 20 20 20 20 20  f('(');....     
9610: 20 20 20 69 66 20 28 28 69 6e 64 65 78 20 3e 20     if ((index > 
9620: 30 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  0) &&..         
9630: 20 20 20 5f 74 79 70 65 4e 61 6d 65 73 2e 54 72     _typeNames.Tr
9640: 79 47 65 74 56 61 6c 75 65 28 4e 61 6d 65 2e 53  yGetValue(Name.S
9650: 75 62 73 74 72 69 6e 67 28 30 2c 20 69 6e 64 65  ubstring(0, inde
9660: 78 29 2e 54 72 69 6d 45 6e 64 28 29 2c 20 6f 75  x).TrimEnd(), ou
9670: 74 20 76 61 6c 75 65 29 29 0d 0a 20 20 20 20 20  t value))..     
9680: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9690: 72 65 74 75 72 6e 20 76 61 6c 75 65 2e 64 61 74  return value.dat
96a0: 61 54 79 70 65 3b 0d 0a 20 20 20 20 20 20 20 20  aType;..        
96b0: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....  
96c0: 20 20 20 20 44 62 54 79 70 65 20 64 65 66 61 75      DbType defau
96d0: 6c 74 44 62 54 79 70 65 20 3d 20 44 62 54 79 70  ltDbType = DbTyp
96e0: 65 2e 4f 62 6a 65 63 74 3b 0d 0a 0d 0a 23 69 66  e.Object;....#if
96f0: 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
9700: 20 26 26 20 54 52 41 43 45 5f 57 41 52 4e 49 4e   && TRACE_WARNIN
9710: 47 0d 0a 20 20 20 20 20 20 54 72 61 63 65 2e 57  G..      Trace.W
9720: 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e  riteLine(String.
9730: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
9740: 20 20 20 22 57 41 52 4e 49 4e 47 3a 20 54 79 70     "WARNING: Typ
9750: 65 20 6d 61 70 70 69 6e 67 20 66 61 69 6c 65 64  e mapping failed
9760: 2c 20 72 65 74 75 72 6e 69 6e 67 20 64 65 66 61  , returning defa
9770: 75 6c 74 20 74 79 70 65 20 7b 30 7d 20 66 6f 72  ult type {0} for
9780: 20 6e 61 6d 65 20 5c 22 7b 31 7d 5c 22 2e 22 2c   name \"{1}\".",
9790: 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 66 61  ..          defa
97a0: 75 6c 74 44 62 54 79 70 65 2c 20 4e 61 6d 65 29  ultDbType, Name)
97b0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
97c0: 20 20 20 20 72 65 74 75 72 6e 20 64 65 66 61 75      return defau
97d0: 6c 74 44 62 54 79 70 65 3b 0d 0a 20 20 20 20 7d  ltDbType;..    }
97e0: 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  ..    #endregion
97f0: 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  ....    private 
9800: 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 5f 73  static object _s
9810: 79 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f 62  yncRoot = new ob
9820: 6a 65 63 74 28 29 3b 0d 0a 20 20 20 20 70 72 69  ject();..    pri
9830: 76 61 74 65 20 73 74 61 74 69 63 20 44 69 63 74  vate static Dict
9840: 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 53  ionary<string, S
9850: 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 3e 20  QLiteTypeNames> 
9860: 5f 74 79 70 65 4e 61 6d 65 73 20 3d 20 6e 75 6c  _typeNames = nul
9870: 6c 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f 2f 2f  l;..  }....  ///
9880: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f   <summary>..  //
9890: 2f 20 53 51 4c 69 74 65 20 68 61 73 20 76 65 72  / SQLite has ver
98a0: 79 20 6c 69 6d 69 74 65 64 20 74 79 70 65 73 2c  y limited types,
98b0: 20 61 6e 64 20 69 73 20 69 6e 68 65 72 65 6e 74   and is inherent
98c0: 6c 79 20 74 65 78 74 2d 62 61 73 65 64 2e 20 20  ly text-based.  
98d0: 54 68 65 20 66 69 72 73 74 20 35 20 74 79 70 65  The first 5 type
98e0: 73 20 62 65 6c 6f 77 20 72 65 70 72 65 73 65 6e  s below represen
98f0: 74 20 74 68 65 20 73 75 6d 20 6f 66 20 61 6c 6c  t the sum of all
9900: 20 74 79 70 65 73 20 53 51 4c 69 74 65 0d 0a 20   types SQLite.. 
9910: 20 2f 2f 2f 20 75 6e 64 65 72 73 74 61 6e 64 73   /// understands
9920: 2e 20 20 54 68 65 20 44 61 74 65 54 69 6d 65 20  .  The DateTime 
9930: 65 78 74 65 6e 73 69 6f 6e 20 74 6f 20 74 68 65  extension to the
9940: 20 73 70 65 63 20 69 73 20 66 6f 72 20 69 6e 74   spec is for int
9950: 65 72 6e 61 6c 20 75 73 65 20 6f 6e 6c 79 2e 0d  ernal use only..
9960: 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79  .  /// </summary
9970: 3e 0d 0a 20 20 70 75 62 6c 69 63 20 65 6e 75 6d  >..  public enum
9980: 20 54 79 70 65 41 66 66 69 6e 69 74 79 0d 0a 20   TypeAffinity.. 
9990: 20 7b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   {..    /// <sum
99a0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e  mary>..    /// N
99b0: 6f 74 20 75 73 65 64 0d 0a 20 20 20 20 2f 2f 2f  ot used..    ///
99c0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
99d0: 20 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64 20 3d   Uninitialized =
99e0: 20 30 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75   0,..    /// <su
99f0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
9a00: 41 6c 6c 20 69 6e 74 65 67 65 72 73 20 69 6e 20  All integers in 
9a10: 53 51 4c 69 74 65 20 64 65 66 61 75 6c 74 20 74  SQLite default t
9a20: 6f 20 49 6e 74 36 34 0d 0a 20 20 20 20 2f 2f 2f  o Int64..    ///
9a30: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
9a40: 20 49 6e 74 36 34 20 3d 20 31 2c 0d 0a 20 20 20   Int64 = 1,..   
9a50: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
9a60: 20 20 20 20 2f 2f 2f 20 41 6c 6c 20 66 6c 6f 61      /// All floa
9a70: 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65  ting point numbe
9a80: 72 73 20 69 6e 20 53 51 4c 69 74 65 20 64 65 66  rs in SQLite def
9a90: 61 75 6c 74 20 74 6f 20 64 6f 75 62 6c 65 0d 0a  ault to double..
9aa0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
9ab0: 79 3e 0d 0a 20 20 20 20 44 6f 75 62 6c 65 20 3d  y>..    Double =
9ac0: 20 32 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75   2,..    /// <su
9ad0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
9ae0: 54 68 65 20 64 65 66 61 75 6c 74 20 64 61 74 61  The default data
9af0: 20 74 79 70 65 20 6f 66 20 53 51 4c 69 74 65 20   type of SQLite 
9b00: 69 73 20 74 65 78 74 0d 0a 20 20 20 20 2f 2f 2f  is text..    ///
9b10: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
9b20: 20 54 65 78 74 20 3d 20 33 2c 0d 0a 20 20 20 20   Text = 3,..    
9b30: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
9b40: 20 20 20 2f 2f 2f 20 54 79 70 69 63 61 6c 6c 79     /// Typically
9b50: 20 62 6c 6f 62 20 74 79 70 65 73 20 61 72 65 20   blob types are 
9b60: 6f 6e 6c 79 20 73 65 65 6e 20 77 68 65 6e 20 72  only seen when r
9b70: 65 74 75 72 6e 65 64 20 66 72 6f 6d 20 61 20 66  eturned from a f
9b80: 75 6e 63 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f  unction..    ///
9b90: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
9ba0: 20 42 6c 6f 62 20 3d 20 34 2c 0d 0a 20 20 20 20   Blob = 4,..    
9bb0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
9bc0: 20 20 20 2f 2f 2f 20 4e 75 6c 6c 20 74 79 70 65     /// Null type
9bd0: 73 20 63 61 6e 20 62 65 20 72 65 74 75 72 6e 65  s can be returne
9be0: 64 20 66 72 6f 6d 20 66 75 6e 63 74 69 6f 6e 73  d from functions
9bf0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
9c00: 61 72 79 3e 0d 0a 20 20 20 20 4e 75 6c 6c 20 3d  ary>..    Null =
9c10: 20 35 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75   5,..    /// <su
9c20: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
9c30: 55 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20  Used internally 
9c40: 62 79 20 74 68 69 73 20 70 72 6f 76 69 64 65 72  by this provider
9c50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
9c60: 61 72 79 3e 0d 0a 20 20 20 20 44 61 74 65 54 69  ary>..    DateTi
9c70: 6d 65 20 3d 20 31 30 2c 0d 0a 20 20 20 20 2f 2f  me = 10,..    //
9c80: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
9c90: 20 2f 2f 2f 20 55 73 65 64 20 69 6e 74 65 72 6e   /// Used intern
9ca0: 61 6c 6c 79 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ally..    /// </
9cb0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 4e 6f  summary>..    No
9cc0: 6e 65 20 3d 20 31 31 2c 0d 0a 20 20 7d 0d 0a 0d  ne = 11,..  }...
9cd0: 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e  .  /// <summary>
9ce0: 0d 0a 20 20 2f 2f 2f 20 54 68 65 73 65 20 61 72  ..  /// These ar
9cf0: 65 20 74 68 65 20 65 76 65 6e 74 20 74 79 70 65  e the event type
9d00: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
9d10: 68 20 74 68 65 0d 0a 20 20 2f 2f 2f 20 3c 73 65  h the..  /// <se
9d20: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f  e cref="SQLiteCo
9d30: 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 48 61 6e  nnectionEventHan
9d40: 64 6c 65 72 22 20 2f 3e 0d 0a 20 20 2f 2f 2f 20  dler" />..  /// 
9d50: 64 65 6c 65 67 61 74 65 20 28 61 6e 64 20 69 74  delegate (and it
9d60: 73 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  s corresponding 
9d70: 65 76 65 6e 74 29 20 61 6e 64 20 74 68 65 0d 0a  event) and the..
9d80: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
9d90: 22 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74  "ConnectionEvent
9da0: 41 72 67 73 22 20 2f 3e 20 63 6c 61 73 73 2e 0d  Args" /> class..
9db0: 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79  .  /// </summary
9dc0: 3e 0d 0a 20 20 70 75 62 6c 69 63 20 65 6e 75 6d  >..  public enum
9dd0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
9de0: 6e 45 76 65 6e 74 54 79 70 65 0d 0a 20 20 7b 0d  nEventType..  {.
9df0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
9e00: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
9e10: 4e 6f 74 20 75 73 65 64 2e 0d 0a 20 20 20 20 20  Not used...     
9e20: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
9e30: 0a 20 20 20 20 20 20 49 6e 76 61 6c 69 64 20 3d  .      Invalid =
9e40: 20 2d 31 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f   -1,....      //
9e50: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
9e60: 20 20 20 2f 2f 2f 20 4e 6f 74 20 75 73 65 64 2e     /// Not used.
9e70: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ..      /// </su
9e80: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 55 6e  mmary>..      Un
9e90: 6b 6e 6f 77 6e 20 3d 20 30 2c 0d 0a 0d 0a 20 20  known = 0,....  
9ea0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
9eb0: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  >..      /// The
9ec0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 62   connection is b
9ed0: 65 69 6e 67 20 6f 70 65 6e 65 64 2e 0d 0a 20 20  eing opened...  
9ee0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
9ef0: 79 3e 0d 0a 20 20 20 20 20 20 4f 70 65 6e 69 6e  y>..      Openin
9f00: 67 20 3d 20 31 2c 0d 0a 0d 0a 20 20 20 20 20 20  g = 1,....      
9f10: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
9f20: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6e       /// The con
9f30: 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 68  nection string h
9f40: 61 73 20 62 65 65 6e 20 70 61 72 73 65 64 2e 0d  as been parsed..
9f50: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  .      /// </sum
9f60: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 43 6f 6e  mary>..      Con
9f70: 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 20 3d 20  nectionString = 
9f80: 32 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  2,....      /// 
9f90: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
9fa0: 20 2f 2f 2f 20 54 68 65 20 63 6f 6e 6e 65 63 74   /// The connect
9fb0: 69 6f 6e 20 77 61 73 20 6f 70 65 6e 65 64 2e 0d  ion was opened..
9fc0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  .      /// </sum
9fd0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 4f 70 65  mary>..      Ope
9fe0: 6e 65 64 20 3d 20 33 2c 0d 0a 0d 0a 20 20 20 20  ned = 3,....    
9ff0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
a000: 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c  .      /// The <
a010: 73 65 65 20 63 72 65 66 3d 22 43 68 61 6e 67 65  see cref="Change
a020: 44 61 74 61 62 61 73 65 22 20 2f 3e 20 6d 65 74  Database" /> met
a030: 68 6f 64 20 77 61 73 20 63 61 6c 6c 65 64 20 6f  hod was called o
a040: 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f  n the..      ///
a050: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20   connection...  
a060: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
a070: 79 3e 0d 0a 20 20 20 20 20 20 43 68 61 6e 67 65  y>..      Change
a080: 44 61 74 61 62 61 73 65 20 3d 20 34 2c 0d 0a 0d  Database = 4,...
a090: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
a0a0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
a0b0: 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 61  A transaction wa
a0c0: 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20  s created using 
a0d0: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d  the connection..
a0e0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  .      /// </sum
a0f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 4e 65 77  mary>..      New
a100: 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 35 2c  Transaction = 5,
a110: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ....      /// <s
a120: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
a130: 2f 2f 20 54 68 65 20 63 6f 6e 6e 65 63 74 69 6f  // The connectio
a140: 6e 20 77 61 73 20 65 6e 6c 69 73 74 65 64 20 69  n was enlisted i
a150: 6e 74 6f 20 61 20 74 72 61 6e 73 61 63 74 69 6f  nto a transactio
a160: 6e 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  n...      /// </
a170: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
a180: 45 6e 6c 69 73 74 54 72 61 6e 73 61 63 74 69 6f  EnlistTransactio
a190: 6e 20 3d 20 36 2c 0d 0a 0d 0a 20 20 20 20 20 20  n = 6,....      
a1a0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
a1b0: 20 20 20 20 20 2f 2f 2f 20 41 20 63 6f 6d 6d 61       /// A comma
a1c0: 6e 64 20 77 61 73 20 63 72 65 61 74 65 64 20 75  nd was created u
a1d0: 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74  sing the connect
a1e0: 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ion...      /// 
a1f0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
a200: 20 20 4e 65 77 43 6f 6d 6d 61 6e 64 20 3d 20 37    NewCommand = 7
a210: 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ,....      /// <
a220: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
a230: 2f 2f 2f 20 54 68 65 20 63 6f 6e 6e 65 63 74 69  /// The connecti
a240: 6f 6e 20 69 73 20 62 65 69 6e 67 20 63 6c 6f 73  on is being clos
a250: 65 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ed...      /// <
a260: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
a270: 20 43 6c 6f 73 69 6e 67 20 3d 20 38 2c 0d 0a 0d   Closing = 8,...
a280: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
a290: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
a2a0: 54 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77  The connection w
a2b0: 61 73 20 63 6c 6f 73 65 64 2e 0d 0a 20 20 20 20  as closed...    
a2c0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
a2d0: 0d 0a 20 20 20 20 20 20 43 6c 6f 73 65 64 20 3d  ..      Closed =
a2e0: 20 39 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f 2f 2f   9..  }....  ///
a2f0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f   <summary>..  //
a300: 2f 20 54 68 69 73 20 69 6d 70 6c 65 6d 65 6e 74  / This implement
a310: 61 74 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20  ation of SQLite 
a320: 66 6f 72 20 41 44 4f 2e 4e 45 54 20 63 61 6e 20  for ADO.NET can 
a330: 70 72 6f 63 65 73 73 20 64 61 74 65 2f 74 69 6d  process date/tim
a340: 65 20 66 69 65 6c 64 73 20 69 6e 20 64 61 74 61  e fields in data
a350: 62 61 73 65 73 20 69 6e 20 6f 6e 6c 79 20 6f 6e  bases in only on
a360: 65 20 6f 66 20 74 68 72 65 65 20 66 6f 72 6d 61  e of three forma
a370: 74 73 2e 20 20 54 69 63 6b 73 2c 20 49 53 4f 38  ts.  Ticks, ISO8
a380: 36 30 31 0d 0a 20 20 2f 2f 2f 20 61 6e 64 20 4a  601..  /// and J
a390: 75 6c 69 61 6e 44 61 79 2e 0d 0a 20 20 2f 2f 2f  ulianDay...  ///
a3a0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f   </summary>..  /
a3b0: 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a 20 20  // <remarks>..  
a3c0: 2f 2f 2f 20 49 53 4f 38 36 30 31 20 69 73 20 6d  /// ISO8601 is m
a3d0: 6f 72 65 20 63 6f 6d 70 61 74 69 62 6c 65 2c 20  ore compatible, 
a3e0: 72 65 61 64 61 62 6c 65 2c 20 66 75 6c 6c 79 2d  readable, fully-
a3f0: 70 72 6f 63 65 73 73 61 62 6c 65 2c 20 62 75 74  processable, but
a400: 20 6c 65 73 73 20 61 63 63 75 72 61 74 65 20 61   less accurate a
a410: 73 20 69 74 20 64 6f 65 73 6e 27 74 20 70 72 6f  s it doesn't pro
a420: 76 69 64 65 20 74 69 6d 65 20 64 6f 77 6e 20 74  vide time down t
a430: 6f 20 66 72 61 63 74 69 6f 6e 73 20 6f 66 20 61  o fractions of a
a440: 20 73 65 63 6f 6e 64 2e 0d 0a 20 20 2f 2f 2f 20   second...  /// 
a450: 4a 75 6c 69 61 6e 44 61 79 20 69 73 20 74 68 65  JulianDay is the
a460: 20 6e 75 6d 65 72 69 63 20 66 6f 72 6d 61 74 20   numeric format 
a470: 74 68 65 20 53 51 4c 69 74 65 20 75 73 65 73 20  the SQLite uses 
a480: 69 6e 74 65 72 6e 61 6c 6c 79 20 61 6e 64 20 69  internally and i
a490: 73 20 61 72 67 75 61 62 6c 79 20 74 68 65 20 6d  s arguably the m
a4a0: 6f 73 74 20 63 6f 6d 70 61 74 69 62 6c 65 20 77  ost compatible w
a4b0: 69 74 68 20 33 72 64 20 70 61 72 74 79 20 74 6f  ith 3rd party to
a4c0: 6f 6c 73 2e 20 20 49 74 20 69 73 0d 0a 20 20 2f  ols.  It is..  /
a4d0: 2f 2f 20 6e 6f 74 20 72 65 61 64 61 62 6c 65 20  // not readable 
a4e0: 61 73 20 74 65 78 74 20 77 69 74 68 6f 75 74 20  as text without 
a4f0: 70 6f 73 74 2d 70 72 6f 63 65 73 73 69 6e 67 2e  post-processing.
a500: 0d 0a 20 20 2f 2f 2f 20 54 69 63 6b 73 20 6c 65  ..  /// Ticks le
a510: 73 73 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 69  ss compatible wi
a520: 74 68 20 33 72 64 20 70 61 72 74 79 20 74 6f 6f  th 3rd party too
a530: 6c 73 20 74 68 61 74 20 71 75 65 72 79 20 74 68  ls that query th
a540: 65 20 64 61 74 61 62 61 73 65 2c 20 61 6e 64 20  e database, and 
a550: 72 65 6e 64 65 72 73 20 74 68 65 20 44 61 74 65  renders the Date
a560: 54 69 6d 65 20 66 69 65 6c 64 20 75 6e 72 65 61  Time field unrea
a570: 64 61 62 6c 65 20 61 73 20 74 65 78 74 20 77 69  dable as text wi
a580: 74 68 6f 75 74 20 70 6f 73 74 2d 70 72 6f 63 65  thout post-proce
a590: 73 73 69 6e 67 2e 0d 0a 20 20 2f 2f 2f 0d 0a 20  ssing...  ///.. 
a5a0: 20 2f 2f 2f 20 54 68 65 20 70 72 65 66 65 72 72   /// The preferr
a5b0: 65 64 20 6f 72 64 65 72 20 6f 66 20 63 68 6f 6f  ed order of choo
a5c0: 73 69 6e 67 20 61 20 64 61 74 65 74 69 6d 65 20  sing a datetime 
a5d0: 66 6f 72 6d 61 74 20 69 73 20 4a 75 6c 69 61 6e  format is Julian
a5e0: 44 61 79 2c 20 49 53 4f 38 36 30 31 2c 20 61 6e  Day, ISO8601, an
a5f0: 64 20 74 68 65 6e 20 54 69 63 6b 73 2e 20 20 54  d then Ticks.  T
a600: 69 63 6b 73 20 69 73 20 6d 61 69 6e 6c 79 20 70  icks is mainly p
a610: 72 65 73 65 6e 74 20 66 6f 72 20 6c 65 67 61 63  resent for legac
a620: 79 0d 0a 20 20 2f 2f 2f 20 63 6f 64 65 20 73 75  y..  /// code su
a630: 70 70 6f 72 74 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f  pport...  /// </
a640: 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 70 75 62 6c  remarks>..  publ
a650: 69 63 20 65 6e 75 6d 20 53 51 4c 69 74 65 44 61  ic enum SQLiteDa
a660: 74 65 46 6f 72 6d 61 74 73 0d 0a 20 20 7b 0d 0a  teFormats..  {..
a670: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
a680: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55 73 65 20 74  >..    /// Use t
a690: 68 65 20 76 61 6c 75 65 20 6f 66 20 44 61 74 65  he value of Date
a6a0: 54 69 6d 65 2e 54 69 63 6b 73 2e 20 20 54 68 69  Time.Ticks.  Thi
a6b0: 73 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 72  s value is not r
a6c0: 65 63 6f 6d 6d 65 6e 64 65 64 20 61 6e 64 20 69  ecommended and i
a6d0: 73 20 6e 6f 74 20 77 65 6c 6c 20 73 75 70 70 6f  s not well suppo
a6e0: 72 74 65 64 20 77 69 74 68 20 4c 49 4e 51 2e 0d  rted with LINQ..
a6f0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
a700: 72 79 3e 0d 0a 20 20 20 20 54 69 63 6b 73 20 3d  ry>..    Ticks =
a710: 20 30 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75   0,..    /// <su
a720: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
a730: 55 73 65 20 74 68 65 20 49 53 4f 2d 38 36 30 31  Use the ISO-8601
a740: 20 66 6f 72 6d 61 74 2e 20 20 55 73 65 73 20 74   format.  Uses t
a750: 68 65 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 48  he "yyyy-MM-dd H
a760: 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b  H:mm:ss.FFFFFFFK
a770: 22 20 66 6f 72 6d 61 74 20 66 6f 72 20 55 54 43  " format for UTC
a780: 20 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65 73   DateTime values
a790: 20 61 6e 64 0d 0a 20 20 20 20 2f 2f 2f 20 22 79   and..    /// "y
a7a0: 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a  yyy-MM-dd HH:mm:
a7b0: 73 73 2e 46 46 46 46 46 46 46 22 20 66 6f 72 6d  ss.FFFFFFF" form
a7c0: 61 74 20 66 6f 72 20 6c 6f 63 61 6c 20 44 61 74  at for local Dat
a7d0: 65 54 69 6d 65 20 76 61 6c 75 65 73 29 2e 0d 0a  eTime values)...
a7e0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
a7f0: 79 3e 0d 0a 20 20 20 20 49 53 4f 38 36 30 31 20  y>..    ISO8601 
a800: 3d 20 31 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  = 1,..    /// <s
a810: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
a820: 20 54 68 65 20 69 6e 74 65 72 76 61 6c 20 6f 66   The interval of
a830: 20 74 69 6d 65 20 69 6e 20 64 61 79 73 20 61 6e   time in days an
a840: 64 20 66 72 61 63 74 69 6f 6e 73 20 6f 66 20 61  d fractions of a
a850: 20 64 61 79 20 73 69 6e 63 65 20 4a 61 6e 75 61   day since Janua
a860: 72 79 20 31 2c 20 34 37 31 33 20 42 43 2e 0d 0a  ry 1, 4713 BC...
a870: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
a880: 79 3e 0d 0a 20 20 20 20 4a 75 6c 69 61 6e 44 61  y>..    JulianDa
a890: 79 20 3d 20 32 2c 0d 0a 20 20 20 20 2f 2f 2f 20  y = 2,..    /// 
a8a0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
a8b0: 2f 2f 20 54 68 65 20 77 68 6f 6c 65 20 6e 75 6d  // The whole num
a8c0: 62 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73  ber of seconds s
a8d0: 69 6e 63 65 20 74 68 65 20 55 6e 69 78 20 65 70  ince the Unix ep
a8e0: 6f 63 68 20 28 4a 61 6e 75 61 72 79 20 31 2c 20  och (January 1, 
a8f0: 31 39 37 30 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20  1970)...    /// 
a900: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
a910: 55 6e 69 78 45 70 6f 63 68 20 3d 20 33 2c 0d 0a  UnixEpoch = 3,..
a920: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
a930: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6e 79 20 63  >..    /// Any c
a940: 75 6c 74 75 72 65 2d 69 6e 64 65 70 65 6e 64 65  ulture-independe
a950: 6e 74 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20  nt string value 
a960: 74 68 61 74 20 74 68 65 20 2e 4e 45 54 20 46 72  that the .NET Fr
a970: 61 6d 65 77 6f 72 6b 20 63 61 6e 20 69 6e 74 65  amework can inte
a980: 72 70 72 65 74 20 61 73 20 61 20 76 61 6c 69 64  rpret as a valid
a990: 20 44 61 74 65 54 69 6d 65 2e 0d 0a 20 20 20 20   DateTime...    
a9a0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
a9b0: 20 20 20 20 49 6e 76 61 72 69 61 6e 74 43 75 6c      InvariantCul
a9c0: 74 75 72 65 20 3d 20 34 2c 0d 0a 20 20 20 20 2f  ture = 4,..    /
a9d0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
a9e0: 20 20 2f 2f 2f 20 41 6e 79 20 73 74 72 69 6e 67    /// Any string
a9f0: 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65 20   value that the 
aa00: 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 63  .NET Framework c
aa10: 61 6e 20 69 6e 74 65 72 70 72 65 74 20 61 73 20  an interpret as 
aa20: 61 20 76 61 6c 69 64 20 44 61 74 65 54 69 6d 65  a valid DateTime
aa30: 20 75 73 69 6e 67 20 74 68 65 20 63 75 72 72 65   using the curre
aa40: 6e 74 20 63 75 6c 74 75 72 65 2e 0d 0a 20 20 20  nt culture...   
aa50: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
aa60: 0a 20 20 20 20 43 75 72 72 65 6e 74 43 75 6c 74  .    CurrentCult
aa70: 75 72 65 20 3d 20 35 2c 0d 0a 20 20 20 20 2f 2f  ure = 5,..    //
aa80: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
aa90: 20 2f 2f 2f 20 54 68 65 20 64 65 66 61 75 6c 74   /// The default
aaa0: 20 66 6f 72 6d 61 74 20 66 6f 72 20 74 68 69 73   format for this
aab0: 20 70 72 6f 76 69 64 65 72 2e 0d 0a 20 20 20 20   provider...    
aac0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
aad0: 20 20 20 20 44 65 66 61 75 6c 74 20 3d 20 49 53      Default = IS
aae0: 4f 38 36 30 31 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  O8601..  }....  
aaf0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
ab00: 20 2f 2f 2f 20 54 68 69 73 20 65 6e 75 6d 20 64   /// This enum d
ab10: 65 74 65 72 6d 69 6e 65 73 20 68 6f 77 20 53 51  etermines how SQ
ab20: 4c 69 74 65 20 74 72 65 61 74 73 20 69 74 73 20  Lite treats its 
ab30: 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 2e 0d 0a 20  journal file... 
ab40: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
ab50: 0a 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e  .  /// <remarks>
ab60: 0d 0a 20 20 2f 2f 2f 20 42 79 20 64 65 66 61 75  ..  /// By defau
ab70: 6c 74 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 63  lt SQLite will c
ab80: 72 65 61 74 65 20 61 6e 64 20 64 65 6c 65 74 65  reate and delete
ab90: 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c   the journal fil
aba0: 65 20 77 68 65 6e 20 6e 65 65 64 65 64 20 64 75  e when needed du
abb0: 72 69 6e 67 20 61 20 74 72 61 6e 73 61 63 74 69  ring a transacti
abc0: 6f 6e 2e 0d 0a 20 20 2f 2f 2f 20 48 6f 77 65 76  on...  /// Howev
abd0: 65 72 2c 20 66 6f 72 20 73 6f 6d 65 20 63 6f 6d  er, for some com
abe0: 70 75 74 65 72 73 20 72 75 6e 6e 69 6e 67 20 63  puters running c
abf0: 65 72 74 61 69 6e 20 66 69 6c 65 73 79 73 74 65  ertain filesyste
ac00: 6d 20 6d 6f 6e 69 74 6f 72 69 6e 67 20 74 6f 6f  m monitoring too
ac10: 6c 73 2c 20 74 68 65 20 72 61 70 69 64 0d 0a 20  ls, the rapid.. 
ac20: 20 2f 2f 2f 20 63 72 65 61 74 69 6f 6e 20 61 6e   /// creation an
ac30: 64 20 64 65 6c 65 74 69 6f 6e 20 6f 66 20 74 68  d deletion of th
ac40: 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 63  e journal file c
ac50: 61 6e 20 63 61 75 73 65 20 74 68 6f 73 65 20 70  an cause those p
ac60: 72 6f 67 72 61 6d 73 20 74 6f 20 66 61 69 6c 2c  rograms to fail,
ac70: 20 6f 72 20 74 6f 20 69 6e 74 65 72 66 65 72 65   or to interfere
ac80: 20 77 69 74 68 20 53 51 4c 69 74 65 2e 0d 0a 20   with SQLite... 
ac90: 20 2f 2f 2f 0d 0a 20 20 2f 2f 2f 20 49 66 20 61   ///..  /// If a
aca0: 20 70 72 6f 67 72 61 6d 20 6f 72 20 76 69 72 75   program or viru
acb0: 73 20 73 63 61 6e 6e 65 72 20 69 73 20 69 6e 74  s scanner is int
acc0: 65 72 66 65 72 69 6e 67 20 77 69 74 68 20 53 51  erfering with SQ
acd0: 4c 69 74 65 27 73 20 6a 6f 75 72 6e 61 6c 20 66  Lite's journal f
ace0: 69 6c 65 2c 20 79 6f 75 20 6d 61 79 20 72 65 63  ile, you may rec
acf0: 65 69 76 65 20 65 72 72 6f 72 73 20 6c 69 6b 65  eive errors like
ad00: 20 22 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e   "unable to open
ad10: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 22 0d   database file".
ad20: 0a 20 20 2f 2f 2f 20 77 68 65 6e 20 73 74 61 72  .  /// when star
ad30: 74 69 6e 67 20 61 20 74 72 61 6e 73 61 63 74 69  ting a transacti
ad40: 6f 6e 2e 20 20 49 66 20 74 68 69 73 20 69 73 20  on.  If this is 
ad50: 68 61 70 70 65 6e 69 6e 67 2c 20 79 6f 75 20 6d  happening, you m
ad60: 61 79 20 77 61 6e 74 20 74 6f 20 63 68 61 6e 67  ay want to chang
ad70: 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 6a 6f  e the default jo
ad80: 75 72 6e 61 6c 20 6d 6f 64 65 20 74 6f 20 50 65  urnal mode to Pe
ad90: 72 73 69 73 74 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f  rsist...  /// </
ada0: 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 70 75 62 6c  remarks>..  publ
adb0: 69 63 20 65 6e 75 6d 20 53 51 4c 69 74 65 4a 6f  ic enum SQLiteJo
adc0: 75 72 6e 61 6c 4d 6f 64 65 45 6e 75 6d 0d 0a 20  urnalModeEnum.. 
add0: 20 7b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   {..    /// <sum
ade0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
adf0: 68 65 20 64 65 66 61 75 6c 74 20 6d 6f 64 65 2c  he default mode,
ae00: 20 74 68 69 73 20 63 61 75 73 65 73 20 53 51 4c   this causes SQL
ae10: 69 74 65 20 74 6f 20 75 73 65 20 74 68 65 20 65  ite to use the e
ae20: 78 69 73 74 69 6e 67 20 6a 6f 75 72 6e 61 6c 69  xisting journali
ae30: 6e 67 20 6d 6f 64 65 20 66 6f 72 20 74 68 65 20  ng mode for the 
ae40: 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 2f  database...    /
ae50: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
ae60: 20 20 20 44 65 66 61 75 6c 74 20 3d 20 2d 31 2c     Default = -1,
ae70: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
ae80: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 51 4c  ry>..    /// SQL
ae90: 69 74 65 20 77 69 6c 6c 20 63 72 65 61 74 65 20  ite will create 
aea0: 61 6e 64 20 64 65 73 74 72 6f 79 20 74 68 65 20  and destroy the 
aeb0: 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 61 73 2d  journal file as-
aec0: 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  needed...    ///
aed0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
aee0: 20 44 65 6c 65 74 65 20 3d 20 30 2c 0d 0a 20 20   Delete = 0,..  
aef0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
af00: 0a 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20 74 68  .    /// When th
af10: 69 73 20 69 73 20 73 65 74 2c 20 53 51 4c 69 74  is is set, SQLit
af20: 65 20 77 69 6c 6c 20 6b 65 65 70 20 74 68 65 20  e will keep the 
af30: 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 65 76 65  journal file eve
af40: 6e 20 61 66 74 65 72 20 61 20 74 72 61 6e 73 61  n after a transa
af50: 63 74 69 6f 6e 20 68 61 73 20 63 6f 6d 70 6c 65  ction has comple
af60: 74 65 64 2e 20 20 49 74 27 73 20 63 6f 6e 74 65  ted.  It's conte
af70: 6e 74 73 20 77 69 6c 6c 20 62 65 20 65 72 61 73  nts will be eras
af80: 65 64 2c 0d 0a 20 20 20 20 2f 2f 2f 20 61 6e 64  ed,..    /// and
af90: 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 72 65 2d   the journal re-
afa0: 75 73 65 64 20 61 73 20 6f 66 74 65 6e 20 61 73  used as often as
afb0: 20 6e 65 65 64 65 64 2e 20 20 49 66 20 69 74 20   needed.  If it 
afc0: 69 73 20 64 65 6c 65 74 65 64 2c 20 69 74 20 77  is deleted, it w
afd0: 69 6c 6c 20 62 65 20 72 65 63 72 65 61 74 65 64  ill be recreated
afe0: 20 74 68 65 20 6e 65 78 74 20 74 69 6d 65 20 69   the next time i
aff0: 74 20 69 73 20 6e 65 65 64 65 64 2e 0d 0a 20 20  t is needed...  
b000: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
b010: 0d 0a 20 20 20 20 50 65 72 73 69 73 74 20 3d 20  ..    Persist = 
b020: 31 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  1,..    /// <sum
b030: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
b040: 68 69 73 20 6f 70 74 69 6f 6e 20 64 69 73 61 62  his option disab
b050: 6c 65 73 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b  les the rollback
b060: 20 6a 6f 75 72 6e 61 6c 20 65 6e 74 69 72 65 6c   journal entirel
b070: 79 2e 20 20 49 6e 74 65 72 72 75 70 74 65 64 20  y.  Interrupted 
b080: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 6f 72 20  transactions or 
b090: 61 20 70 72 6f 67 72 61 6d 20 63 72 61 73 68 20  a program crash 
b0a0: 63 61 6e 20 63 61 75 73 65 20 64 61 74 61 62 61  can cause databa
b0b0: 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 72 72  se..    /// corr
b0c0: 75 70 74 69 6f 6e 20 69 6e 20 74 68 69 73 20 6d  uption in this m
b0d0: 6f 64 65 21 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ode!..    /// </
b0e0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 4f 66  summary>..    Of
b0f0: 66 20 3d 20 32 2c 0d 0a 20 20 20 20 2f 2f 2f 20  f = 2,..    /// 
b100: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
b110: 2f 2f 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 74  // SQLite will t
b120: 72 75 6e 63 61 74 65 20 74 68 65 20 6a 6f 75 72  runcate the jour
b130: 6e 61 6c 20 66 69 6c 65 20 74 6f 20 7a 65 72 6f  nal file to zero
b140: 2d 6c 65 6e 67 74 68 20 69 6e 73 74 65 61 64 20  -length instead 
b150: 6f 66 20 64 65 6c 65 74 69 6e 67 20 69 74 2e 0d  of deleting it..
b160: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
b170: 72 79 3e 0d 0a 20 20 20 20 54 72 75 6e 63 61 74  ry>..    Truncat
b180: 65 20 3d 20 33 2c 0d 0a 20 20 20 20 2f 2f 2f 20  e = 3,..    /// 
b190: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
b1a0: 2f 2f 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 73  // SQLite will s
b1b0: 74 6f 72 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c  tore the journal
b1c0: 20 69 6e 20 76 6f 6c 61 74 69 6c 65 20 52 41 4d   in volatile RAM
b1d0: 2e 20 20 54 68 69 73 20 73 61 76 65 73 20 64 69  .  This saves di
b1e0: 73 6b 20 49 2f 4f 20 62 75 74 20 61 74 20 74 68  sk I/O but at th
b1f0: 65 20 65 78 70 65 6e 73 65 20 6f 66 20 64 61 74  e expense of dat
b200: 61 62 61 73 65 20 73 61 66 65 74 79 20 61 6e 64  abase safety and
b210: 20 69 6e 74 65 67 72 69 74 79 2e 0d 0a 20 20 20   integrity...   
b220: 20 2f 2f 2f 20 49 66 20 74 68 65 20 61 70 70 6c   /// If the appl
b230: 69 63 61 74 69 6f 6e 20 75 73 69 6e 67 20 53 51  ication using SQ
b240: 4c 69 74 65 20 63 72 61 73 68 65 73 20 69 6e 20  Lite crashes in 
b250: 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 61 20  the middle of a 
b260: 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 68 65 6e  transaction when
b270: 20 74 68 65 20 4d 45 4d 4f 52 59 20 6a 6f 75 72   the MEMORY jour
b280: 6e 61 6c 69 6e 67 20 6d 6f 64 65 20 69 73 20 73  naling mode is s
b290: 65 74 2c 20 74 68 65 6e 20 74 68 65 0d 0a 20 20  et, then the..  
b2a0: 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 66    /// database f
b2b0: 69 6c 65 20 77 69 6c 6c 20 76 65 72 79 20 6c 69  ile will very li
b2c0: 6b 65 6c 79 20 67 6f 20 63 6f 72 72 75 70 74 2e  kely go corrupt.
b2d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
b2e0: 61 72 79 3e 0d 0a 20 20 20 20 4d 65 6d 6f 72 79  ary>..    Memory
b2f0: 20 3d 20 34 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c   = 4,..    /// <
b300: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
b310: 2f 20 53 51 4c 69 74 65 20 75 73 65 73 20 61 20  / SQLite uses a 
b320: 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20  write-ahead log 
b330: 69 6e 73 74 65 61 64 20 6f 66 20 61 20 72 6f 6c  instead of a rol
b340: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 74 6f  lback journal to
b350: 20 69 6d 70 6c 65 6d 65 6e 74 20 74 72 61 6e 73   implement trans
b360: 61 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 57 41  actions.  The WA
b370: 4c 20 6a 6f 75 72 6e 61 6c 69 6e 67 20 6d 6f 64  L journaling mod
b380: 65 20 69 73 20 70 65 72 73 69 73 74 65 6e 74 3b  e is persistent;
b390: 0d 0a 20 20 20 20 2f 2f 2f 20 61 66 74 65 72 20  ..    /// after 
b3a0: 62 65 69 6e 67 20 73 65 74 20 69 74 20 73 74 61  being set it sta
b3b0: 79 73 20 69 6e 20 65 66 66 65 63 74 20 61 63 72  ys in effect acr
b3c0: 6f 73 73 20 6d 75 6c 74 69 70 6c 65 20 64 61 74  oss multiple dat
b3d0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
b3e0: 73 20 61 6e 64 20 61 66 74 65 72 20 63 6c 6f 73  s and after clos
b3f0: 69 6e 67 20 61 6e 64 20 72 65 6f 70 65 6e 69 6e  ing and reopenin
b400: 67 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  g the database. 
b410: 41 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20  A database..    
b420: 2f 2f 2f 20 69 6e 20 57 41 4c 20 6a 6f 75 72 6e  /// in WAL journ
b430: 61 6c 69 6e 67 20 6d 6f 64 65 20 63 61 6e 20 6f  aling mode can o
b440: 6e 6c 79 20 62 65 20 61 63 63 65 73 73 65 64 20  nly be accessed 
b450: 62 79 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  by SQLite versio
b460: 6e 20 33 2e 37 2e 30 20 6f 72 20 6c 61 74 65 72  n 3.7.0 or later
b470: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
b480: 6d 61 72 79 3e 0d 0a 20 20 20 20 57 61 6c 20 3d  mary>..    Wal =
b490: 20 35 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f 2f 2f   5..  }....  ///
b4a0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f   <summary>..  //
b4b0: 2f 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  / Possible value
b4c0: 73 20 66 6f 72 20 74 68 65 20 22 73 79 6e 63 68  s for the "synch
b4d0: 72 6f 6e 6f 75 73 22 20 64 61 74 61 62 61 73 65  ronous" database
b4e0: 20 73 65 74 74 69 6e 67 2e 20 20 54 68 69 73 20   setting.  This 
b4f0: 73 65 74 74 69 6e 67 20 64 65 74 65 72 6d 69 6e  setting determin
b500: 65 73 0d 0a 20 20 2f 2f 2f 20 68 6f 77 20 6f 66  es..  /// how of
b510: 74 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  ten the database
b520: 20 65 6e 67 69 6e 65 20 63 61 6c 6c 73 20 74 68   engine calls th
b530: 65 20 78 53 79 6e 63 20 6d 65 74 68 6f 64 20 6f  e xSync method o
b540: 66 20 74 68 65 20 56 46 53 2e 0d 0a 20 20 2f 2f  f the VFS...  //
b550: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
b560: 69 6e 74 65 72 6e 61 6c 20 65 6e 75 6d 20 53 51  internal enum SQ
b570: 4c 69 74 65 53 79 6e 63 68 72 6f 6e 6f 75 73 45  LiteSynchronousE
b580: 6e 75 6d 0d 0a 20 20 7b 0d 0a 20 20 20 20 20 20  num..  {..      
b590: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
b5a0: 20 20 20 20 20 2f 2f 2f 20 55 73 65 20 74 68 65       /// Use the
b5b0: 20 64 65 66 61 75 6c 74 20 22 73 79 6e 63 68 72   default "synchr
b5c0: 6f 6e 6f 75 73 22 20 64 61 74 61 62 61 73 65 20  onous" database 
b5d0: 73 65 74 74 69 6e 67 2e 20 20 43 75 72 72 65 6e  setting.  Curren
b5e0: 74 6c 79 2c 20 74 68 69 73 20 73 68 6f 75 6c 64  tly, this should
b5f0: 20 62 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 74   be..      /// t
b600: 68 65 20 73 61 6d 65 20 61 73 20 75 73 69 6e 67  he same as using
b610: 20 74 68 65 20 46 55 4c 4c 20 6d 6f 64 65 2e 0d   the FULL mode..
b620: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  .      /// </sum
b630: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 44 65 66  mary>..      Def
b640: 61 75 6c 74 20 3d 20 2d 31 2c 0d 0a 0d 0a 20 20  ault = -1,....  
b650: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
b660: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  >..      /// The
b670: 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
b680: 20 63 6f 6e 74 69 6e 75 65 73 20 77 69 74 68 6f   continues witho
b690: 75 74 20 73 79 6e 63 69 6e 67 20 61 73 20 73 6f  ut syncing as so
b6a0: 6f 6e 20 61 73 20 69 74 20 68 61 73 20 68 61 6e  on as it has han
b6b0: 64 65 64 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 64  ded..      /// d
b6c0: 61 74 61 20 6f 66 66 20 74 6f 20 74 68 65 20 6f  ata off to the o
b6d0: 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 2e  perating system.
b6e0: 20 20 49 66 20 74 68 65 20 61 70 70 6c 69 63 61    If the applica
b6f0: 74 69 6f 6e 20 72 75 6e 6e 69 6e 67 20 53 51 4c  tion running SQL
b700: 69 74 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 63  ite..      /// c
b710: 72 61 73 68 65 73 2c 20 74 68 65 20 64 61 74 61  rashes, the data
b720: 20 77 69 6c 6c 20 62 65 20 73 61 66 65 2c 20 62   will be safe, b
b730: 75 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ut the database 
b740: 6d 69 67 68 74 20 62 65 63 6f 6d 65 20 63 6f 72  might become cor
b750: 72 75 70 74 65 64 0d 0a 20 20 20 20 20 20 2f 2f  rupted..      //
b760: 2f 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 69  / if the operati
b770: 6e 67 20 73 79 73 74 65 6d 20 63 72 61 73 68 65  ng system crashe
b780: 73 20 6f 72 20 74 68 65 20 63 6f 6d 70 75 74 65  s or the compute
b790: 72 20 6c 6f 73 65 73 20 70 6f 77 65 72 20 62 65  r loses power be
b7a0: 66 6f 72 65 20 74 68 61 74 0d 0a 20 20 20 20 20  fore that..     
b7b0: 20 2f 2f 2f 20 64 61 74 61 20 68 61 73 20 62 65   /// data has be
b7c0: 65 6e 20 77 72 69 74 74 65 6e 20 74 6f 20 74 68  en written to th
b7d0: 65 20 64 69 73 6b 20 73 75 72 66 61 63 65 2e 0d  e disk surface..
b7e0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  .      /// </sum
b7f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 4f 66 66  mary>..      Off
b800: 20 3d 20 30 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f   = 0,....      /
b810: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
b820: 20 20 20 20 2f 2f 2f 20 54 68 65 20 64 61 74 61      /// The data
b830: 62 61 73 65 20 65 6e 67 69 6e 65 20 77 69 6c 6c  base engine will
b840: 20 73 74 69 6c 6c 20 73 79 6e 63 20 61 74 20 74   still sync at t
b850: 68 65 20 6d 6f 73 74 20 63 72 69 74 69 63 61 6c  he most critical
b860: 20 6d 6f 6d 65 6e 74 73 2c 20 62 75 74 0d 0a 20   moments, but.. 
b870: 20 20 20 20 20 2f 2f 2f 20 6c 65 73 73 20 6f 66       /// less of
b880: 74 65 6e 20 74 68 61 6e 20 69 6e 20 46 55 4c 4c  ten than in FULL
b890: 20 6d 6f 64 65 2e 20 20 54 68 65 72 65 20 69 73   mode.  There is
b8a0: 20 61 20 76 65 72 79 20 73 6d 61 6c 6c 20 28 74   a very small (t
b8b0: 68 6f 75 67 68 20 6e 6f 6e 2d 7a 65 72 6f 29 0d  hough non-zero).
b8c0: 0a 20 20 20 20 20 20 2f 2f 2f 20 63 68 61 6e 63  .      /// chanc
b8d0: 65 20 74 68 61 74 20 61 20 70 6f 77 65 72 20 66  e that a power f
b8e0: 61 69 6c 75 72 65 20 61 74 20 6a 75 73 74 20 74  ailure at just t
b8f0: 68 65 20 77 72 6f 6e 67 20 74 69 6d 65 20 63 6f  he wrong time co
b900: 75 6c 64 20 63 6f 72 72 75 70 74 20 74 68 65 0d  uld corrupt the.
b910: 0a 20 20 20 20 20 20 2f 2f 2f 20 64 61 74 61 62  .      /// datab
b920: 61 73 65 20 69 6e 20 4e 4f 52 4d 41 4c 20 6d 6f  ase in NORMAL mo
b930: 64 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  de...      /// <
b940: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
b950: 20 4e 6f 72 6d 61 6c 20 3d 20 31 2c 0d 0a 0d 0a   Normal = 1,....
b960: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
b970: 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54  ry>..      /// T
b980: 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 67 69  he database engi
b990: 6e 65 20 77 69 6c 6c 20 75 73 65 20 74 68 65 20  ne will use the 
b9a0: 78 53 79 6e 63 20 6d 65 74 68 6f 64 20 6f 66 20  xSync method of 
b9b0: 74 68 65 20 56 46 53 20 74 6f 20 65 6e 73 75 72  the VFS to ensur
b9c0: 65 20 74 68 61 74 0d 0a 20 20 20 20 20 20 2f 2f  e that..      //
b9d0: 2f 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 69 73  / all content is
b9e0: 20 73 61 66 65 6c 79 20 77 72 69 74 74 65 6e 20   safely written 
b9f0: 74 6f 20 74 68 65 20 64 69 73 6b 20 73 75 72 66  to the disk surf
ba00: 61 63 65 20 70 72 69 6f 72 20 74 6f 20 63 6f 6e  ace prior to con
ba10: 74 69 6e 75 69 6e 67 2e 0d 0a 20 20 20 20 20 20  tinuing...      
ba20: 2f 2f 2f 20 54 68 69 73 20 65 6e 73 75 72 65 73  /// This ensures
ba30: 20 74 68 61 74 20 61 6e 20 6f 70 65 72 61 74 69   that an operati
ba40: 6e 67 20 73 79 73 74 65 6d 20 63 72 61 73 68 20  ng system crash 
ba50: 6f 72 20 70 6f 77 65 72 20 66 61 69 6c 75 72 65  or power failure
ba60: 20 77 69 6c 6c 20 6e 6f 74 0d 0a 20 20 20 20 20   will not..     
ba70: 20 2f 2f 2f 20 63 6f 72 72 75 70 74 20 74 68 65   /// corrupt the
ba80: 20 64 61 74 61 62 61 73 65 2e 20 20 46 55 4c 4c   database.  FULL
ba90: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 69 73 20   synchronous is 
baa0: 76 65 72 79 20 73 61 66 65 2c 20 62 75 74 20 69  very safe, but i
bab0: 74 20 69 73 20 61 6c 73 6f 0d 0a 20 20 20 20 20  t is also..     
bac0: 20 2f 2f 2f 20 73 6c 6f 77 65 72 2e 0d 0a 20 20   /// slower...  
bad0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
bae0: 79 3e 0d 0a 20 20 20 20 20 20 46 75 6c 6c 20 3d  y>..      Full =
baf0: 20 32 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f 2f 2f   2..  }....  ///
bb00: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f   <summary>..  //
bb10: 2f 20 54 68 65 20 72 65 71 75 65 73 74 65 64 20  / The requested 
bb20: 63 6f 6d 6d 61 6e 64 20 65 78 65 63 75 74 69 6f  command executio
bb30: 6e 20 74 79 70 65 2e 20 20 54 68 69 73 20 63 6f  n type.  This co
bb40: 6e 74 72 6f 6c 73 20 77 68 69 63 68 20 6d 65 74  ntrols which met
bb50: 68 6f 64 20 6f 66 20 74 68 65 0d 0a 20 20 2f 2f  hod of the..  //
bb60: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  / <see cref="SQL
bb70: 69 74 65 43 6f 6d 6d 61 6e 64 22 20 2f 3e 20 6f  iteCommand" /> o
bb80: 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 20 63 61  bject will be ca
bb90: 6c 6c 65 64 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73  lled...  /// </s
bba0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 70 75 62 6c 69  ummary>..  publi
bbb0: 63 20 65 6e 75 6d 20 53 51 4c 69 74 65 45 78 65  c enum SQLiteExe
bbc0: 63 75 74 65 54 79 70 65 0d 0a 20 20 7b 0d 0a 20  cuteType..  {.. 
bbd0: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
bbe0: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 44 6f  y>..      /// Do
bbf0: 20 6e 6f 74 68 69 6e 67 2e 20 20 4e 6f 20 6d 65   nothing.  No me
bc00: 74 68 6f 64 20 77 69 6c 6c 20 62 65 20 63 61 6c  thod will be cal
bc10: 6c 65 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  led...      /// 
bc20: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
bc30: 20 20 4e 6f 6e 65 20 3d 20 30 2c 0d 0a 0d 0a 20    None = 0,.... 
bc40: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
bc50: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68  y>..      /// Th
bc60: 65 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6e 6f 74  e command is not
bc70: 20 65 78 70 65 63 74 65 64 20 74 6f 20 72 65 74   expected to ret
bc80: 75 72 6e 20 61 20 72 65 73 75 6c 74 20 2d 4f 52  urn a result -OR
bc90: 2d 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  - the result is 
bca0: 6e 6f 74 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 6e  not..      /// n
bcb0: 65 65 64 65 64 2e 20 20 54 68 65 20 3c 73 65 65  eeded.  The <see
bcc0: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6d   cref="SQLiteCom
bcd0: 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51  mand.ExecuteNonQ
bce0: 75 65 72 79 22 20 2f 3e 20 6d 65 74 68 6f 64 20  uery" /> method 
bcf0: 77 69 6c 6c 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  will..      /// 
bd00: 62 65 20 63 61 6c 6c 65 64 2e 0d 0a 20 20 20 20  be called...    
bd10: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
bd20: 0d 0a 20 20 20 20 20 20 4e 6f 6e 51 75 65 72 79  ..      NonQuery
bd30: 20 3d 20 31 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f   = 1,....      /
bd40: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
bd50: 20 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6d 6d      /// The comm
bd60: 61 6e 64 20 69 73 20 65 78 70 65 63 74 65 64 20  and is expected 
bd70: 74 6f 20 72 65 74 75 72 6e 20 61 20 73 63 61 6c  to return a scal
bd80: 61 72 20 72 65 73 75 6c 74 20 2d 4f 52 2d 20 74  ar result -OR- t
bd90: 68 65 20 72 65 73 75 6c 74 20 73 68 6f 75 6c 64  he result should
bda0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 62 65 20 6c  ..      /// be l
bdb0: 69 6d 69 74 65 64 20 74 6f 20 61 20 73 63 61 6c  imited to a scal
bdc0: 61 72 20 72 65 73 75 6c 74 2e 20 20 54 68 65 20  ar result.  The 
bdd0: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
bde0: 65 43 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65  eCommand.Execute
bdf0: 53 63 61 6c 61 72 22 20 2f 3e 0d 0a 20 20 20 20  Scalar" />..    
be00: 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 20 77 69 6c    /// method wil
be10: 6c 20 62 65 20 63 61 6c 6c 65 64 2e 0d 0a 20 20  l be called...  
be20: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
be30: 79 3e 0d 0a 20 20 20 20 20 20 53 63 61 6c 61 72  y>..      Scalar
be40: 20 3d 20 32 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f   = 2,....      /
be50: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
be60: 20 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6d 6d      /// The comm
be70: 61 6e 64 20 69 73 20 65 78 70 65 63 74 65 64 20  and is expected 
be80: 74 6f 20 72 65 74 75 72 6e 20 3c 73 65 65 20 63  to return <see c
be90: 72 65 66 3d 22 53 51 4c 69 74 65 44 61 74 61 52  ref="SQLiteDataR
bea0: 65 61 64 65 72 22 2f 3e 20 72 65 73 75 6c 74 2e  eader"/> result.
beb0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20  ..      /// The 
bec0: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
bed0: 65 43 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65  eCommand.Execute
bee0: 52 65 61 64 65 72 28 29 22 20 2f 3e 20 6d 65 74  Reader()" /> met
bef0: 68 6f 64 20 77 69 6c 6c 20 62 65 20 63 61 6c 6c  hod will be call
bf00: 65 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ed...      /// <
bf10: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
bf20: 20 52 65 61 64 65 72 20 3d 20 33 2c 0d 0a 0d 0a   Reader = 3,....
bf30: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
bf40: 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 55  ry>..      /// U
bf50: 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 63  se the default c
bf60: 6f 6d 6d 61 6e 64 20 65 78 65 63 75 74 69 6f 6e  ommand execution
bf70: 20 74 79 70 65 2e 20 20 55 73 69 6e 67 20 74 68   type.  Using th
bf80: 69 73 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  is value is the 
bf90: 73 61 6d 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  same..      /// 
bfa0: 61 73 20 75 73 69 6e 67 20 74 68 65 20 3c 73 65  as using the <se
bfb0: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 45 78  e cref="SQLiteEx
bfc0: 65 63 75 74 65 54 79 70 65 2e 4e 6f 6e 65 22 20  ecuteType.None" 
bfd0: 2f 3e 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20  /> value...     
bfe0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
bff0: 0a 20 20 20 20 20 20 44 65 66 61 75 6c 74 20 3d  .      Default =
c000: 20 4e 6f 6e 51 75 65 72 79 20 2f 2a 20 54 4f 44   NonQuery /* TOD
c010: 4f 3a 20 47 6f 6f 64 20 64 65 66 61 75 6c 74 3f  O: Good default?
c020: 20 2a 2f 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f 2f   */..  }....  //
c030: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f  / <summary>..  /
c040: 2f 2f 20 53 74 72 75 63 74 20 75 73 65 64 20 69  // Struct used i
c050: 6e 74 65 72 6e 61 6c 6c 79 20 74 6f 20 64 65 74  nternally to det
c060: 65 72 6d 69 6e 65 20 74 68 65 20 64 61 74 61 74  ermine the datat
c070: 79 70 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  ype of a column 
c080: 69 6e 20 61 20 72 65 73 75 6c 74 73 65 74 0d 0a  in a resultset..
c090: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
c0a0: 0d 0a 20 20 69 6e 74 65 72 6e 61 6c 20 63 6c 61  ..  internal cla
c0b0: 73 73 20 53 51 4c 69 74 65 54 79 70 65 0d 0a 20  ss SQLiteType.. 
c0c0: 20 7b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   {..    /// <sum
c0d0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
c0e0: 68 65 20 44 62 54 79 70 65 20 6f 66 20 74 68 65  he DbType of the
c0f0: 20 63 6f 6c 75 6d 6e 2c 20 6f 72 20 44 62 54 79   column, or DbTy
c100: 70 65 2e 4f 62 6a 65 63 74 20 69 66 20 69 74 20  pe.Object if it 
c110: 63 61 6e 6e 6f 74 20 62 65 20 64 65 74 65 72 6d  cannot be determ
c120: 69 6e 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ined..    /// </
c130: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e  summary>..    in
c140: 74 65 72 6e 61 6c 20 44 62 54 79 70 65 20 54 79  ternal DbType Ty
c150: 70 65 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  pe;..    /// <su
c160: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
c170: 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  The affinity of 
c180: 61 20 63 6f 6c 75 6d 6e 2c 20 75 73 65 64 20 66  a column, used f
c190: 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f  or expressions o
c1a0: 72 20 77 68 65 6e 20 54 79 70 65 20 69 73 20 44  r when Type is D
c1b0: 62 54 79 70 65 2e 4f 62 6a 65 63 74 0d 0a 20 20  bType.Object..  
c1c0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
c1d0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 54  ..    internal T
c1e0: 79 70 65 41 66 66 69 6e 69 74 79 20 41 66 66 69  ypeAffinity Affi
c1f0: 6e 69 74 79 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  nity;..  }....  
c200: 69 6e 74 65 72 6e 61 6c 20 73 74 72 75 63 74 20  internal struct 
c210: 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 0d  SQLiteTypeNames.
c220: 0a 20 20 7b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  .  {..    intern
c230: 61 6c 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d  al SQLiteTypeNam
c240: 65 73 28 73 74 72 69 6e 67 20 6e 65 77 74 79 70  es(string newtyp
c250: 65 4e 61 6d 65 2c 20 44 62 54 79 70 65 20 6e 65  eName, DbType ne
c260: 77 64 61 74 61 54 79 70 65 29 0d 0a 20 20 20 20  wdataType)..    
c270: 7b 0d 0a 20 20 20 20 20 20 74 79 70 65 4e 61 6d  {..      typeNam
c280: 65 20 3d 20 6e 65 77 74 79 70 65 4e 61 6d 65 3b  e = newtypeName;
c290: 0d 0a 20 20 20 20 20 20 64 61 74 61 54 79 70 65  ..      dataType
c2a0: 20 3d 20 6e 65 77 64 61 74 61 54 79 70 65 3b 0d   = newdataType;.
c2b0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
c2c0: 74 65 72 6e 61 6c 20 73 74 72 69 6e 67 20 74 79  ternal string ty
c2d0: 70 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 69 6e 74  peName;..    int
c2e0: 65 72 6e 61 6c 20 44 62 54 79 70 65 20 64 61 74  ernal DbType dat
c2f0: 61 54 79 70 65 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20  aType;..  }.... 
c300: 20 69 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73 20   internal class 
c310: 54 79 70 65 4e 61 6d 65 53 74 72 69 6e 67 43 6f  TypeNameStringCo
c320: 6d 70 61 72 65 72 20 3a 20 49 45 71 75 61 6c 69  mparer : IEquali
c330: 74 79 43 6f 6d 70 61 72 65 72 3c 73 74 72 69 6e  tyComparer<strin
c340: 67 3e 0d 0a 20 20 7b 0d 0a 20 20 20 20 23 72 65  g>..  {..    #re
c350: 67 69 6f 6e 20 49 45 71 75 61 6c 69 74 79 43 6f  gion IEqualityCo
c360: 6d 70 61 72 65 72 3c 73 74 72 69 6e 67 3e 20 4d  mparer<string> M
c370: 65 6d 62 65 72 73 0d 0a 20 20 20 20 70 75 62 6c  embers..    publ
c380: 69 63 20 62 6f 6f 6c 20 45 71 75 61 6c 73 28 0d  ic bool Equals(.
c390: 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 65  .      string le
c3a0: 66 74 2c 0d 0a 20 20 20 20 20 20 73 74 72 69 6e  ft,..      strin
c3b0: 67 20 72 69 67 68 74 0d 0a 20 20 20 20 20 20 29  g right..      )
c3c0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
c3d0: 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 45 71 75  eturn String.Equ
c3e0: 61 6c 73 28 6c 65 66 74 2c 20 72 69 67 68 74 2c  als(left, right,
c3f0: 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
c400: 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43  n.OrdinalIgnoreC
c410: 61 73 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ase);..    }....
c420: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
c430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
c470: 0a 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e  ...    public in
c480: 74 20 47 65 74 48 61 73 68 43 6f 64 65 28 0d 0a  t GetHashCode(..
c490: 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c        string val
c4a0: 75 65 0d 0a 20 20 20 20 20 20 29 0d 0a 20 20 20  ue..      )..   
c4b0: 20 7b 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20   {..      //..  
c4c0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65      // NOTE: The
c4d0: 20 6f 6e 6c 79 20 74 68 69 6e 67 20 74 68 61 74   only thing that
c4e0: 20 77 65 20 6d 75 73 74 20 67 75 61 72 61 6e 74   we must guarant
c4f0: 65 65 20 68 65 72 65 2c 20 61 63 63 6f 72 64 69  ee here, accordi
c500: 6e 67 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20  ng..      //    
c510: 20 20 20 74 6f 20 74 68 65 20 4d 53 44 4e 20 64     to the MSDN d
c520: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72  ocumentation for
c530: 20 49 45 71 75 61 6c 69 74 79 43 6f 6d 70 61 72   IEqualityCompar
c540: 65 72 2c 20 69 73 0d 0a 20 20 20 20 20 20 2f 2f  er, is..      //
c550: 20 20 20 20 20 20 20 74 68 61 74 20 66 6f 72 20         that for 
c560: 74 77 6f 20 67 69 76 65 6e 20 73 74 72 69 6e 67  two given string
c570: 73 2c 20 69 66 20 45 71 75 61 6c 73 20 72 65 74  s, if Equals ret
c580: 75 72 6e 20 74 72 75 65 20 74 68 65 6e 0d 0a 20  urn true then.. 
c590: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68       //       th
c5a0: 65 20 74 77 6f 20 73 74 72 69 6e 67 73 20 6d 75  e two strings mu
c5b0: 73 74 20 68 61 73 68 20 74 6f 20 74 68 65 20 73  st hash to the s
c5c0: 61 6d 65 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20  ame value...    
c5d0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 69 66 20 28    //..      if (
c5e0: 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a  value != null)..
c5f0: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
c600: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
c610: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76          return v
c620: 61 6c 75 65 2e 54 6f 4c 6f 77 65 72 49 6e 76 61  alue.ToLowerInva
c630: 72 69 61 6e 74 28 29 2e 47 65 74 48 61 73 68 43  riant().GetHashC
c640: 6f 64 65 28 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  ode();..#else.. 
c650: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61         return va
c660: 6c 75 65 2e 54 6f 4c 6f 77 65 72 28 29 2e 47 65  lue.ToLower().Ge
c670: 74 48 61 73 68 43 6f 64 65 28 29 3b 0d 0a 23 65  tHashCode();..#e
c680: 6e 64 69 66 0d 0a 20 20 20 20 20 20 65 6c 73 65  ndif..      else
c690: 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20  ..        throw 
c6a0: 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
c6b0: 45 78 63 65 70 74 69 6f 6e 28 22 76 61 6c 75 65  Exception("value
c6c0: 22 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  ");..    }..    
c6d0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 7d 0d  #endregion..  }.
c6e0: 0a 7d 0d 0a                                      .}..