System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 13ae070006a29f358021d38d772bc18748e9a03f:


0000: ef bb bf 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .../************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20  ************. * 
0040: 41 44 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61  ADO.NET 2.0 Data
0050: 20 50 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51   Provider for SQ
0060: 4c 69 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58  Lite Version 3.X
0070: 0a 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52  . * Written by R
0080: 6f 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72  obert Simpson (r
0090: 6f 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c  obert@blackcastl
00a0: 65 73 6f 66 74 2e 63 6f 6d 29 0a 20 2a 20 0a 20  esoft.com). * . 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0a 20 2a 2a 2a 2a 2a 2a 2a 2a   risk!. ********
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2f 0a 0a 6e 61 6d 65 73 70 61 63 65 20 53 79 73  /..namespace Sys
0130: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 0a  tem.Data.SQLite.
0140: 7b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d  {.  using System
0150: 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d  ;.  using System
0160: 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72 6f 70  .Runtime.Interop
0170: 53 65 72 76 69 63 65 73 3b 0a 20 20 75 73 69 6e  Services;.  usin
0180: 67 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74  g System.Collect
0190: 69 6f 6e 73 2e 47 65 6e 65 72 69 63 3b 0a 20 20  ions.Generic;.  
01a0: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6d  using System.Com
01b0: 70 6f 6e 65 6e 74 4d 6f 64 65 6c 3b 0a 20 20 75  ponentModel;.  u
01c0: 73 69 6e 67 20 53 79 73 74 65 6d 2e 47 6c 6f 62  sing System.Glob
01d0: 61 6c 69 7a 61 74 69 6f 6e 3b 0a 20 20 75 73 69  alization;.  usi
01e0: 6e 67 20 53 79 73 74 65 6d 2e 54 65 78 74 3b 0a  ng System.Text;.
01f0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
0200: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 20  OMPACTFRAMEWORK 
0210: 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e  .  using System.
0220: 43 6f 6d 70 6f 6e 65 6e 74 4d 6f 64 65 6c 2e 44  ComponentModel.D
0230: 65 73 69 67 6e 3b 0a 23 65 6e 64 69 66 0a 0a 20  esign;.#endif.. 
0240: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
0250: 20 2f 2f 2f 20 54 68 69 73 20 62 61 73 65 20 63   /// This base c
0260: 6c 61 73 73 20 70 72 6f 76 69 64 65 73 20 64 61  lass provides da
0270: 74 61 74 79 70 65 20 63 6f 6e 76 65 72 73 69 6f  tatype conversio
0280: 6e 20 73 65 72 76 69 63 65 73 20 66 6f 72 20 74  n services for t
0290: 68 65 20 53 51 4c 69 74 65 20 70 72 6f 76 69 64  he SQLite provid
02a0: 65 72 2e 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  er..  /// </summ
02b0: 61 72 79 3e 0a 20 20 70 75 62 6c 69 63 20 61 62  ary>.  public ab
02c0: 73 74 72 61 63 74 20 63 6c 61 73 73 20 53 51 4c  stract class SQL
02d0: 69 74 65 43 6f 6e 76 65 72 74 0a 20 20 7b 0a 20  iteConvert.  {. 
02e0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
02f0: 0a 20 20 20 20 2f 2f 2f 20 41 6e 20 61 72 72 61  .    /// An arra
0300: 79 20 6f 66 20 49 53 4f 38 36 30 31 20 64 61 74  y of ISO8601 dat
0310: 65 74 69 6d 65 20 66 6f 72 6d 61 74 73 20 77 65  etime formats we
0320: 20 73 75 70 70 6f 72 74 20 63 6f 6e 76 65 72 73   support convers
0330: 69 6f 6e 20 66 72 6f 6d 0a 20 20 20 20 2f 2f 2f  ion from.    ///
0340: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
0350: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
0360: 74 72 69 6e 67 5b 5d 20 5f 64 61 74 65 74 69 6d  tring[] _datetim
0370: 65 46 6f 72 6d 61 74 73 20 3d 20 6e 65 77 20 73  eFormats = new s
0380: 74 72 69 6e 67 5b 5d 20 7b 0a 20 20 20 20 20 20  tring[] {.      
0390: 22 54 48 48 6d 6d 73 73 22 2c 0a 20 20 20 20 20  "THHmmss",.     
03a0: 20 22 54 48 48 6d 6d 22 2c 0a 20 20 20 20 20 20   "THHmm",.      
03b0: 22 48 48 3a 6d 6d 3a 73 73 22 2c 0a 20 20 20 20  "HH:mm:ss",.    
03c0: 20 20 22 48 48 3a 6d 6d 22 2c 0a 20 20 20 20 20    "HH:mm",.     
03d0: 20 22 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46   "HH:mm:ss.FFFFF
03e0: 46 46 22 2c 0a 20 20 20 20 20 20 22 79 79 2d 4d  FF",.      "yy-M
03f0: 4d 2d 64 64 22 2c 0a 20 20 20 20 20 20 22 79 79  M-dd",.      "yy
0400: 79 79 2d 4d 4d 2d 64 64 22 2c 0a 20 20 20 20 20  yy-MM-dd",.     
0410: 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a   "yyyy-MM-dd HH:
0420: 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 22 2c 0a  mm:ss.FFFFFFF",.
0430: 20 20 20 20 20 20 22 79 79 79 79 2d 4d 4d 2d 64        "yyyy-MM-d
0440: 64 20 48 48 3a 6d 6d 3a 73 73 22 2c 0a 20 20 20  d HH:mm:ss",.   
0450: 20 20 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 48     "yyyy-MM-dd H
0460: 48 3a 6d 6d 22 2c 20 20 20 20 20 20 20 20 20 20  H:mm",          
0470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0480: 20 20 20 20 20 0a 20 20 20 20 20 20 22 79 79 79       .      "yyy
0490: 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73  y-MM-ddTHH:mm:ss
04a0: 2e 46 46 46 46 46 46 46 22 2c 0a 20 20 20 20 20  .FFFFFFF",.     
04b0: 20 22 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a   "yyyy-MM-ddTHH:
04c0: 6d 6d 22 2c 0a 20 20 20 20 20 20 22 79 79 79 79  mm",.      "yyyy
04d0: 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 22  -MM-ddTHH:mm:ss"
04e0: 2c 0a 20 20 20 20 20 20 22 79 79 79 79 4d 4d 64  ,.      "yyyyMMd
04f0: 64 48 48 6d 6d 73 73 22 2c 0a 20 20 20 20 20 20  dHHmmss",.      
0500: 22 79 79 79 79 4d 4d 64 64 48 48 6d 6d 22 2c 0a  "yyyyMMddHHmm",.
0510: 20 20 20 20 20 20 22 79 79 79 79 4d 4d 64 64 54        "yyyyMMddT
0520: 48 48 6d 6d 73 73 46 46 46 46 46 46 46 22 2c 0a  HHmmssFFFFFFF",.
0530: 20 20 20 20 20 20 22 79 79 79 79 4d 4d 64 64 22        "yyyyMMdd"
0540: 0a 20 20 20 20 7d 3b 0a 0a 20 20 20 20 2f 2f 2f  .    };..    ///
0550: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
0560: 2f 2f 20 41 6e 20 55 54 46 2d 38 20 45 6e 63 6f  // An UTF-8 Enco
0570: 64 69 6e 67 20 69 6e 73 74 61 6e 63 65 2c 20 73  ding instance, s
0580: 6f 20 77 65 20 63 61 6e 20 63 6f 6e 76 65 72 74  o we can convert
0590: 20 73 74 72 69 6e 67 73 20 74 6f 20 61 6e 64 20   strings to and 
05a0: 66 72 6f 6d 20 55 54 46 2d 38 0a 20 20 20 20 2f  from UTF-8.    /
05b0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
05c0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
05d0: 20 45 6e 63 6f 64 69 6e 67 20 5f 75 74 66 38 20   Encoding _utf8 
05e0: 3d 20 6e 65 77 20 55 54 46 38 45 6e 63 6f 64 69  = new UTF8Encodi
05f0: 6e 67 28 29 3b 0a 20 20 20 20 2f 2f 2f 20 3c 73  ng();.    /// <s
0600: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
0610: 54 68 65 20 64 65 66 61 75 6c 74 20 44 61 74 65  The default Date
0620: 54 69 6d 65 20 66 6f 72 6d 61 74 20 66 6f 72 20  Time format for 
0630: 74 68 69 73 20 69 6e 73 74 61 6e 63 65 0a 20 20  this instance.  
0640: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0650: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53 51  .    internal SQ
0660: 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 20  LiteDateFormats 
0670: 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 3b  _datetimeFormat;
0680: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0690: 79 3e 0a 20 20 20 20 2f 2f 2f 20 49 6e 69 74 69  y>.    /// Initi
06a0: 61 6c 69 7a 65 73 20 74 68 65 20 63 6f 6e 76 65  alizes the conve
06b0: 72 73 69 6f 6e 20 63 6c 61 73 73 0a 20 20 20 20  rsion class.    
06c0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
06d0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
06e0: 6d 65 3d 22 66 6d 74 22 3e 54 68 65 20 64 65 66  me="fmt">The def
06f0: 61 75 6c 74 20 64 61 74 65 2f 74 69 6d 65 20 66  ault date/time f
0700: 6f 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72  ormat to use for
0710: 20 74 68 69 73 20 69 6e 73 74 61 6e 63 65 3c 2f   this instance</
0720: 70 61 72 61 6d 3e 0a 20 20 20 20 69 6e 74 65 72  param>.    inter
0730: 6e 61 6c 20 53 51 4c 69 74 65 43 6f 6e 76 65 72  nal SQLiteConver
0740: 74 28 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  t(SQLiteDateForm
0750: 61 74 73 20 66 6d 74 29 0a 20 20 20 20 7b 0a 20  ats fmt).    {. 
0760: 20 20 20 20 20 5f 64 61 74 65 74 69 6d 65 46 6f       _datetimeFo
0770: 72 6d 61 74 20 3d 20 66 6d 74 3b 0a 20 20 20 20  rmat = fmt;.    
0780: 7d 0a 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 55  }..    #region U
0790: 54 46 2d 38 20 43 6f 6e 76 65 72 73 69 6f 6e 20  TF-8 Conversion 
07a0: 46 75 6e 63 74 69 6f 6e 73 0a 20 20 20 20 2f 2f  Functions.    //
07b0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
07c0: 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 73  /// Converts a s
07d0: 74 72 69 6e 67 20 74 6f 20 61 20 55 54 46 2d 38  tring to a UTF-8
07e0: 20 65 6e 63 6f 64 65 64 20 62 79 74 65 20 61 72   encoded byte ar
07f0: 72 61 79 20 73 69 7a 65 64 20 74 6f 20 69 6e 63  ray sized to inc
0800: 6c 75 64 65 20 61 20 6e 75 6c 6c 2d 74 65 72 6d  lude a null-term
0810: 69 6e 61 74 69 6e 67 20 63 68 61 72 61 63 74 65  inating characte
0820: 72 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  r..    /// </sum
0830: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70  mary>.    /// <p
0840: 61 72 61 6d 20 6e 61 6d 65 3d 22 73 6f 75 72 63  aram name="sourc
0850: 65 54 65 78 74 22 3e 54 68 65 20 73 74 72 69 6e  eText">The strin
0860: 67 20 74 6f 20 63 6f 6e 76 65 72 74 20 74 6f 20  g to convert to 
0870: 55 54 46 2d 38 3c 2f 70 61 72 61 6d 3e 0a 20 20  UTF-8</param>.  
0880: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41    /// <returns>A
0890: 20 62 79 74 65 20 61 72 72 61 79 20 63 6f 6e 74   byte array cont
08a0: 61 69 6e 69 6e 67 20 74 68 65 20 63 6f 6e 76 65  aining the conve
08b0: 72 74 65 64 20 73 74 72 69 6e 67 20 70 6c 75 73  rted string plus
08c0: 20 61 6e 20 65 78 74 72 61 20 30 20 74 65 72 6d   an extra 0 term
08d0: 69 6e 61 74 69 6e 67 20 62 79 74 65 20 61 74 20  inating byte at 
08e0: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 61  the end of the a
08f0: 72 72 61 79 2e 3c 2f 72 65 74 75 72 6e 73 3e 0a  rray.</returns>.
0900: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
0910: 63 20 62 79 74 65 5b 5d 20 54 6f 55 54 46 38 28  c byte[] ToUTF8(
0920: 73 74 72 69 6e 67 20 73 6f 75 72 63 65 54 65 78  string sourceTex
0930: 74 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 42  t).    {.      B
0940: 79 74 65 5b 5d 20 62 79 74 65 41 72 72 61 79 3b  yte[] byteArray;
0950: 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20  .      int nlen 
0960: 3d 20 5f 75 74 66 38 2e 47 65 74 42 79 74 65 43  = _utf8.GetByteC
0970: 6f 75 6e 74 28 73 6f 75 72 63 65 54 65 78 74 29  ount(sourceText)
0980: 20 2b 20 31 3b 0a 0a 20 20 20 20 20 20 62 79 74   + 1;..      byt
0990: 65 41 72 72 61 79 20 3d 20 6e 65 77 20 62 79 74  eArray = new byt
09a0: 65 5b 6e 6c 65 6e 5d 3b 0a 20 20 20 20 20 20 6e  e[nlen];.      n
09b0: 6c 65 6e 20 3d 20 5f 75 74 66 38 2e 47 65 74 42  len = _utf8.GetB
09c0: 79 74 65 73 28 73 6f 75 72 63 65 54 65 78 74 2c  ytes(sourceText,
09d0: 20 30 2c 20 73 6f 75 72 63 65 54 65 78 74 2e 4c   0, sourceText.L
09e0: 65 6e 67 74 68 2c 20 62 79 74 65 41 72 72 61 79  ength, byteArray
09f0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 62 79 74 65  , 0);.      byte
0a00: 41 72 72 61 79 5b 6e 6c 65 6e 5d 20 3d 20 30 3b  Array[nlen] = 0;
0a10: 0a 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 62  ..      return b
0a20: 79 74 65 41 72 72 61 79 3b 0a 20 20 20 20 7d 0a  yteArray;.    }.
0a30: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0a40: 79 3e 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65  y>.    /// Conve
0a50: 72 74 20 61 20 44 61 74 65 54 69 6d 65 20 74 6f  rt a DateTime to
0a60: 20 61 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64   a UTF-8 encoded
0a70: 2c 20 7a 65 72 6f 2d 74 65 72 6d 69 6e 61 74 65  , zero-terminate
0a80: 64 20 62 79 74 65 20 61 72 72 61 79 2e 0a 20 20  d byte array..  
0a90: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0aa0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b  .    /// <remark
0ab0: 73 3e 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  s>.    /// This 
0ac0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 63 6f  function is a co
0ad0: 6e 76 65 6e 69 65 6e 63 65 20 66 75 6e 63 74 69  nvenience functi
0ae0: 6f 6e 2c 20 77 68 69 63 68 20 66 69 72 73 74 20  on, which first 
0af0: 63 61 6c 6c 73 20 54 6f 53 74 72 69 6e 67 28 29  calls ToString()
0b00: 20 6f 6e 20 74 68 65 20 44 61 74 65 54 69 6d 65   on the DateTime
0b10: 2c 20 61 6e 64 20 74 68 65 6e 20 63 61 6c 6c 73  , and then calls
0b20: 20 54 6f 55 54 46 38 28 29 20 77 69 74 68 20 74   ToUTF8() with t
0b30: 68 65 0a 20 20 20 20 2f 2f 2f 20 73 74 72 69 6e  he.    /// strin
0b40: 67 20 72 65 73 75 6c 74 2e 0a 20 20 20 20 2f 2f  g result..    //
0b50: 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0a 20 20 20  / </remarks>.   
0b60: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
0b70: 3d 22 64 61 74 65 54 69 6d 65 56 61 6c 75 65 22  ="dateTimeValue"
0b80: 3e 54 68 65 20 44 61 74 65 54 69 6d 65 20 74 6f  >The DateTime to
0b90: 20 63 6f 6e 76 65 72 74 2e 3c 2f 70 61 72 61 6d   convert.</param
0ba0: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  >.    /// <retur
0bb0: 6e 73 3e 54 68 65 20 55 54 46 2d 38 20 65 6e 63  ns>The UTF-8 enc
0bc0: 6f 64 65 64 20 73 74 72 69 6e 67 2c 20 69 6e 63  oded string, inc
0bd0: 6c 75 64 69 6e 67 20 61 20 30 20 74 65 72 6d 69  luding a 0 termi
0be0: 6e 61 74 69 6e 67 20 62 79 74 65 20 61 74 20 74  nating byte at t
0bf0: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 61 72  he end of the ar
0c00: 72 61 79 2e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20  ray.</returns>. 
0c10: 20 20 20 70 75 62 6c 69 63 20 62 79 74 65 5b 5d     public byte[]
0c20: 20 54 6f 55 54 46 38 28 44 61 74 65 54 69 6d 65   ToUTF8(DateTime
0c30: 20 64 61 74 65 54 69 6d 65 56 61 6c 75 65 29 0a   dateTimeValue).
0c40: 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75      {.      retu
0c50: 72 6e 20 54 6f 55 54 46 38 28 54 6f 53 74 72 69  rn ToUTF8(ToStri
0c60: 6e 67 28 64 61 74 65 54 69 6d 65 56 61 6c 75 65  ng(dateTimeValue
0c70: 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  ));.    }..    /
0c80: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
0c90: 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20   /// Converts a 
0ca0: 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 49 6e  UTF-8 encoded In
0cb0: 74 50 74 72 20 6f 66 20 74 68 65 20 73 70 65 63  tPtr of the spec
0cc0: 69 66 69 65 64 20 6c 65 6e 67 74 68 20 69 6e 74  ified length int
0cd0: 6f 20 61 20 2e 4e 45 54 20 73 74 72 69 6e 67 0a  o a .NET string.
0ce0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0cf0: 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  y>.    /// <para
0d00: 6d 20 6e 61 6d 65 3d 22 6e 61 74 69 76 65 73 74  m name="nativest
0d10: 72 69 6e 67 22 3e 54 68 65 20 70 6f 69 6e 74 65  ring">The pointe
0d20: 72 20 74 6f 20 74 68 65 20 6d 65 6d 6f 72 79 20  r to the memory 
0d30: 77 68 65 72 65 20 74 68 65 20 55 54 46 2d 38 20  where the UTF-8 
0d40: 73 74 72 69 6e 67 20 69 73 20 65 6e 63 6f 64 65  string is encode
0d50: 64 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f  d</param>.    //
0d60: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e  / <param name="n
0d70: 61 74 69 76 65 73 74 72 69 6e 67 6c 65 6e 22 3e  ativestringlen">
0d80: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  The number of by
0d90: 74 65 73 20 74 6f 20 64 65 63 6f 64 65 3c 2f 70  tes to decode</p
0da0: 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72  aram>.    /// <r
0db0: 65 74 75 72 6e 73 3e 41 20 73 74 72 69 6e 67 20  eturns>A string 
0dc0: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
0dd0: 72 61 6e 73 6c 61 74 65 64 20 63 68 61 72 61 63  ranslated charac
0de0: 74 65 72 28 73 29 3c 2f 72 65 74 75 72 6e 73 3e  ter(s)</returns>
0df0: 0a 20 20 20 20 70 75 62 6c 69 63 20 76 69 72 74  .    public virt
0e00: 75 61 6c 20 73 74 72 69 6e 67 20 54 6f 53 74 72  ual string ToStr
0e10: 69 6e 67 28 49 6e 74 50 74 72 20 6e 61 74 69 76  ing(IntPtr nativ
0e20: 65 73 74 72 69 6e 67 2c 20 69 6e 74 20 6e 61 74  estring, int nat
0e30: 69 76 65 73 74 72 69 6e 67 6c 65 6e 29 0a 20 20  ivestringlen).  
0e40: 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e    {.      return
0e50: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 6e 61   UTF8ToString(na
0e60: 74 69 76 65 73 74 72 69 6e 67 2c 20 6e 61 74 69  tivestring, nati
0e70: 76 65 73 74 72 69 6e 67 6c 65 6e 29 3b 0a 20 20  vestringlen);.  
0e80: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
0e90: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 43  mmary>.    /// C
0ea0: 6f 6e 76 65 72 74 73 20 61 20 55 54 46 2d 38 20  onverts a UTF-8 
0eb0: 65 6e 63 6f 64 65 64 20 49 6e 74 50 74 72 20 6f  encoded IntPtr o
0ec0: 66 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  f the specified 
0ed0: 6c 65 6e 67 74 68 20 69 6e 74 6f 20 61 20 2e 4e  length into a .N
0ee0: 45 54 20 73 74 72 69 6e 67 0a 20 20 20 20 2f 2f  ET string.    //
0ef0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
0f00: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
0f10: 3d 22 6e 61 74 69 76 65 73 74 72 69 6e 67 22 3e  ="nativestring">
0f20: 54 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  The pointer to t
0f30: 68 65 20 6d 65 6d 6f 72 79 20 77 68 65 72 65 20  he memory where 
0f40: 74 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67  the UTF-8 string
0f50: 20 69 73 20 65 6e 63 6f 64 65 64 3c 2f 70 61 72   is encoded</par
0f60: 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  am>.    /// <par
0f70: 61 6d 20 6e 61 6d 65 3d 22 6e 61 74 69 76 65 73  am name="natives
0f80: 74 72 69 6e 67 6c 65 6e 22 3e 54 68 65 20 6e 75  tringlen">The nu
0f90: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 74 6f  mber of bytes to
0fa0: 20 64 65 63 6f 64 65 3c 2f 70 61 72 61 6d 3e 0a   decode</param>.
0fb0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
0fc0: 3e 41 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69  >A string contai
0fd0: 6e 69 6e 67 20 74 68 65 20 74 72 61 6e 73 6c 61  ning the transla
0fe0: 74 65 64 20 63 68 61 72 61 63 74 65 72 28 73 29  ted character(s)
0ff0: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70  </returns>.    p
1000: 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
1010: 69 6e 67 20 55 54 46 38 54 6f 53 74 72 69 6e 67  ing UTF8ToString
1020: 28 49 6e 74 50 74 72 20 6e 61 74 69 76 65 73 74  (IntPtr nativest
1030: 72 69 6e 67 2c 20 69 6e 74 20 6e 61 74 69 76 65  ring, int native
1040: 73 74 72 69 6e 67 6c 65 6e 29 0a 20 20 20 20 7b  stringlen).    {
1050: 0a 20 20 20 20 20 20 69 66 20 28 6e 61 74 69 76  .      if (nativ
1060: 65 73 74 72 69 6e 67 6c 65 6e 20 3d 3d 20 30 20  estringlen == 0 
1070: 7c 7c 20 6e 61 74 69 76 65 73 74 72 69 6e 67 20  || nativestring 
1080: 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20  == IntPtr.Zero) 
1090: 72 65 74 75 72 6e 20 22 22 3b 0a 20 20 20 20 20  return "";.     
10a0: 20 69 66 20 28 6e 61 74 69 76 65 73 74 72 69 6e   if (nativestrin
10b0: 67 6c 65 6e 20 3d 3d 20 2d 31 29 0a 20 20 20 20  glen == -1).    
10c0: 20 20 7b 0a 20 20 20 20 20 20 20 20 64 6f 0a 20    {.        do. 
10d0: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
10e0: 20 20 20 6e 61 74 69 76 65 73 74 72 69 6e 67 6c     nativestringl
10f0: 65 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 20  en++;.        } 
1100: 77 68 69 6c 65 20 28 4d 61 72 73 68 61 6c 2e 52  while (Marshal.R
1110: 65 61 64 42 79 74 65 28 6e 61 74 69 76 65 73 74  eadByte(nativest
1120: 72 69 6e 67 2c 20 6e 61 74 69 76 65 73 74 72 69  ring, nativestri
1130: 6e 67 6c 65 6e 29 20 21 3d 20 30 29 3b 0a 20 20  nglen) != 0);.  
1140: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 62 79 74      }..      byt
1150: 65 5b 5d 20 62 79 74 65 41 72 72 61 79 20 3d 20  e[] byteArray = 
1160: 6e 65 77 20 62 79 74 65 5b 6e 61 74 69 76 65 73  new byte[natives
1170: 74 72 69 6e 67 6c 65 6e 5d 3b 0a 20 20 20 20 20  tringlen];.     
1180: 20 0a 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e   .      Marshal.
1190: 43 6f 70 79 28 6e 61 74 69 76 65 73 74 72 69 6e  Copy(nativestrin
11a0: 67 2c 20 62 79 74 65 41 72 72 61 79 2c 20 30 2c  g, byteArray, 0,
11b0: 20 6e 61 74 69 76 65 73 74 72 69 6e 67 6c 65 6e   nativestringlen
11c0: 29 3b 0a 0a 20 20 20 20 20 20 72 65 74 75 72 6e  );..      return
11d0: 20 5f 75 74 66 38 2e 47 65 74 53 74 72 69 6e 67   _utf8.GetString
11e0: 28 62 79 74 65 41 72 72 61 79 2c 20 30 2c 20 6e  (byteArray, 0, n
11f0: 61 74 69 76 65 73 74 72 69 6e 67 6c 65 6e 29 3b  ativestringlen);
1200: 0a 20 20 20 20 7d 0a 0a 0a 20 20 20 20 23 65 6e  .    }...    #en
1210: 64 72 65 67 69 6f 6e 0a 0a 20 20 20 20 23 72 65  dregion..    #re
1220: 67 69 6f 6e 20 44 61 74 65 54 69 6d 65 20 43 6f  gion DateTime Co
1230: 6e 76 65 72 73 69 6f 6e 20 46 75 6e 63 74 69 6f  nversion Functio
1240: 6e 73 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ns.    /// <summ
1250: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e  ary>.    /// Con
1260: 76 65 72 74 73 20 61 20 73 74 72 69 6e 67 20 69  verts a string i
1270: 6e 74 6f 20 61 20 44 61 74 65 54 69 6d 65 2c 20  nto a DateTime, 
1280: 75 73 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e  using the curren
1290: 74 20 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74  t DateTimeFormat
12a0: 20 73 70 65 63 69 66 69 65 64 20 66 6f 72 20 74   specified for t
12b0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 68  he connection wh
12c0: 65 6e 20 69 74 20 77 61 73 20 6f 70 65 6e 65 64  en it was opened
12d0: 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
12e0: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ary>.    /// <re
12f0: 6d 61 72 6b 73 3e 0a 20 20 20 20 2f 2f 2f 20 41  marks>.    /// A
1300: 63 63 65 70 74 61 62 6c 65 20 49 53 4f 38 36 30  cceptable ISO860
1310: 31 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61  1 DateTime forma
1320: 74 73 20 61 72 65 3a 0a 20 20 20 20 2f 2f 2f 20  ts are:.    /// 
1330: 20 20 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a    yyyy-MM-dd HH:
1340: 6d 6d 3a 73 73 0a 20 20 20 20 2f 2f 2f 20 20 20  mm:ss.    ///   
1350: 79 79 79 79 4d 4d 64 64 48 48 6d 6d 73 73 0a 20  yyyyMMddHHmmss. 
1360: 20 20 20 2f 2f 2f 20 20 20 79 79 79 79 4d 4d 64     ///   yyyyMMd
1370: 64 54 48 48 6d 6d 73 73 66 66 66 66 66 66 66 0a  dTHHmmssfffffff.
1380: 20 20 20 20 2f 2f 2f 20 20 20 79 79 79 79 2d 4d      ///   yyyy-M
1390: 4d 2d 64 64 0a 20 20 20 20 2f 2f 2f 20 20 20 79  M-dd.    ///   y
13a0: 79 2d 4d 4d 2d 64 64 0a 20 20 20 20 2f 2f 2f 20  y-MM-dd.    /// 
13b0: 20 20 79 79 79 79 4d 4d 64 64 0a 20 20 20 20 2f    yyyyMMdd.    /
13c0: 2f 2f 20 20 20 48 48 3a 6d 6d 3a 73 73 0a 20 20  //   HH:mm:ss.  
13d0: 20 20 2f 2f 2f 20 20 20 54 48 48 6d 6d 73 73 0a    ///   THHmmss.
13e0: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b      /// </remark
13f0: 73 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  s>.    /// <para
1400: 6d 20 6e 61 6d 65 3d 22 64 61 74 65 54 65 78 74  m name="dateText
1410: 22 3e 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6e  ">The string con
1420: 74 61 69 6e 69 6e 67 20 65 69 74 68 65 72 20 61  taining either a
1430: 20 54 69 63 6b 20 76 61 6c 75 65 2c 20 61 20 4a   Tick value, a J
1440: 75 6c 69 61 6e 44 61 79 20 64 6f 75 62 6c 65 2c  ulianDay double,
1450: 20 6f 72 20 61 6e 20 49 53 4f 38 36 30 31 2d 66   or an ISO8601-f
1460: 6f 72 6d 61 74 20 73 74 72 69 6e 67 3c 2f 70 61  ormat string</pa
1470: 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ram>.    /// <re
1480: 74 75 72 6e 73 3e 41 20 44 61 74 65 54 69 6d 65  turns>A DateTime
1490: 20 76 61 6c 75 65 3c 2f 72 65 74 75 72 6e 73 3e   value</returns>
14a0: 0a 20 20 20 20 70 75 62 6c 69 63 20 44 61 74 65  .    public Date
14b0: 54 69 6d 65 20 54 6f 44 61 74 65 54 69 6d 65 28  Time ToDateTime(
14c0: 73 74 72 69 6e 67 20 64 61 74 65 54 65 78 74 29  string dateText)
14d0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 73 77 69  .    {.      swi
14e0: 74 63 68 20 28 5f 64 61 74 65 74 69 6d 65 46 6f  tch (_datetimeFo
14f0: 72 6d 61 74 29 0a 20 20 20 20 20 20 7b 0a 20 20  rmat).      {.  
1500: 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74        case SQLit
1510: 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 54 69 63  eDateFormats.Tic
1520: 6b 73 3a 0a 20 20 20 20 20 20 20 20 20 20 72 65  ks:.          re
1530: 74 75 72 6e 20 6e 65 77 20 44 61 74 65 54 69 6d  turn new DateTim
1540: 65 28 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 36  e(Convert.ToInt6
1550: 34 28 64 61 74 65 54 65 78 74 2c 20 43 75 6c 74  4(dateText, Cult
1560: 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e  ureInfo.Invarian
1570: 74 43 75 6c 74 75 72 65 29 29 3b 0a 20 20 20 20  tCulture));.    
1580: 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65 44      case SQLiteD
1590: 61 74 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61  ateFormats.Julia
15a0: 6e 44 61 79 3a 0a 20 20 20 20 20 20 20 20 20 20  nDay:.          
15b0: 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d  return ToDateTim
15c0: 65 28 43 6f 6e 76 65 72 74 2e 54 6f 44 6f 75 62  e(Convert.ToDoub
15d0: 6c 65 28 64 61 74 65 54 65 78 74 2c 20 43 75 6c  le(dateText, Cul
15e0: 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
15f0: 6e 74 43 75 6c 74 75 72 65 29 29 3b 0a 20 20 20  ntCulture));.   
1600: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20       default:.  
1610: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44          return D
1620: 61 74 65 54 69 6d 65 2e 50 61 72 73 65 45 78 61  ateTime.ParseExa
1630: 63 74 28 64 61 74 65 54 65 78 74 2c 20 5f 64 61  ct(dateText, _da
1640: 74 65 74 69 6d 65 46 6f 72 6d 61 74 73 2c 20 44  tetimeFormats, D
1650: 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 49 6e 66  ateTimeFormatInf
1660: 6f 2e 49 6e 76 61 72 69 61 6e 74 49 6e 66 6f 2c  o.InvariantInfo,
1670: 20 44 61 74 65 54 69 6d 65 53 74 79 6c 65 73 2e   DateTimeStyles.
1680: 4e 6f 6e 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20  None);.      }. 
1690: 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73     }..    /// <s
16a0: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
16b0: 43 6f 6e 76 65 72 74 73 20 61 20 6a 75 6c 69 61  Converts a julia
16c0: 6e 64 61 79 20 76 61 6c 75 65 20 69 6e 74 6f 20  nday value into 
16d0: 61 20 44 61 74 65 54 69 6d 65 0a 20 20 20 20 2f  a DateTime.    /
16e0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
16f0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1700: 65 3d 22 6a 75 6c 69 61 6e 44 61 79 22 3e 54 68  e="julianDay">Th
1710: 65 20 76 61 6c 75 65 20 74 6f 20 63 6f 6e 76 65  e value to conve
1720: 72 74 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f  rt</param>.    /
1730: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41 20 2e 4e  // <returns>A .N
1740: 45 54 20 44 61 74 65 54 69 6d 65 3c 2f 72 65 74  ET DateTime</ret
1750: 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63  urns>.    public
1760: 20 44 61 74 65 54 69 6d 65 20 54 6f 44 61 74 65   DateTime ToDate
1770: 54 69 6d 65 28 64 6f 75 62 6c 65 20 6a 75 6c 69  Time(double juli
1780: 61 6e 44 61 79 29 0a 20 20 20 20 7b 0a 20 20 20  anDay).    {.   
1790: 20 20 20 72 65 74 75 72 6e 20 44 61 74 65 54 69     return DateTi
17a0: 6d 65 2e 46 72 6f 6d 4f 41 44 61 74 65 28 6a 75  me.FromOADate(ju
17b0: 6c 69 61 6e 44 61 79 20 2d 20 32 34 31 35 30 31  lianDay - 241501
17c0: 38 2e 35 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  8.5);.    }..   
17d0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
17e0: 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20     /// Converts 
17f0: 61 20 44 61 74 65 54 69 6d 65 20 73 74 72 75 63  a DateTime struc
1800: 74 20 74 6f 20 61 20 4a 75 6c 69 61 6e 44 61 79  t to a JulianDay
1810: 20 64 6f 75 62 6c 65 0a 20 20 20 20 2f 2f 2f 20   double.    /// 
1820: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f  </summary>.    /
1830: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1840: 76 61 6c 75 65 22 3e 54 68 65 20 44 61 74 65 54  value">The DateT
1850: 69 6d 65 20 74 6f 20 63 6f 6e 76 65 72 74 3c 2f  ime to convert</
1860: 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c  param>.    /// <
1870: 72 65 74 75 72 6e 73 3e 54 68 65 20 4a 75 6c 69  returns>The Juli
1880: 61 6e 44 61 79 20 76 61 6c 75 65 20 74 68 65 20  anDay value the 
1890: 44 61 74 65 74 69 6d 65 20 72 65 70 72 65 73 65  Datetime represe
18a0: 6e 74 73 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20  nts</returns>.  
18b0: 20 20 70 75 62 6c 69 63 20 64 6f 75 62 6c 65 20    public double 
18c0: 54 6f 4a 75 6c 69 61 6e 44 61 79 28 44 61 74 65  ToJulianDay(Date
18d0: 54 69 6d 65 20 76 61 6c 75 65 29 0a 20 20 20 20  Time value).    
18e0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76  {.      return v
18f0: 61 6c 75 65 2e 54 6f 4f 41 44 61 74 65 28 29 20  alue.ToOADate() 
1900: 2b 20 32 34 31 35 30 31 38 2e 35 3b 0a 20 20 20  + 2415018.5;.   
1910: 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
1920: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 43 6f  mary>.    /// Co
1930: 6e 76 65 72 74 73 20 61 20 44 61 74 65 54 69 6d  nverts a DateTim
1940: 65 20 74 6f 20 61 20 73 74 72 69 6e 67 20 76 61  e to a string va
1950: 6c 75 65 2c 20 75 73 69 6e 67 20 74 68 65 20 63  lue, using the c
1960: 75 72 72 65 6e 74 20 44 61 74 65 54 69 6d 65 46  urrent DateTimeF
1970: 6f 72 6d 61 74 20 73 70 65 63 69 66 69 65 64 20  ormat specified 
1980: 66 6f 72 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  for the connecti
1990: 6f 6e 20 77 68 65 6e 20 69 74 20 77 61 73 20 6f  on when it was o
19a0: 70 65 6e 65 64 2e 0a 20 20 20 20 2f 2f 2f 20 3c  pened..    /// <
19b0: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  /summary>.    //
19c0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64  / <param name="d
19d0: 61 74 65 56 61 6c 75 65 22 3e 54 68 65 20 44 61  ateValue">The Da
19e0: 74 65 54 69 6d 65 20 76 61 6c 75 65 20 74 6f 20  teTime value to 
19f0: 63 6f 6e 76 65 72 74 3c 2f 70 61 72 61 6d 3e 0a  convert</param>.
1a00: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1a10: 3e 45 69 74 68 65 72 20 61 20 73 74 72 69 6e 67  >Either a string
1a20: 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 74   consisting of t
1a30: 68 65 20 74 69 63 6b 20 63 6f 75 6e 74 20 66 6f  he tick count fo
1a40: 72 20 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74  r DateTimeFormat
1a50: 2e 54 69 63 6b 73 2c 20 61 20 4a 75 6c 69 61 6e  .Ticks, a Julian
1a60: 44 61 79 20 64 6f 75 62 6c 65 2c 20 6f 72 20 61  Day double, or a
1a70: 20 64 61 74 65 2f 74 69 6d 65 20 69 6e 20 49 53   date/time in IS
1a80: 4f 38 36 30 31 20 66 6f 72 6d 61 74 2e 3c 2f 72  O8601 format.</r
1a90: 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c  eturns>.    publ
1aa0: 69 63 20 73 74 72 69 6e 67 20 54 6f 53 74 72 69  ic string ToStri
1ab0: 6e 67 28 44 61 74 65 54 69 6d 65 20 64 61 74 65  ng(DateTime date
1ac0: 56 61 6c 75 65 29 0a 20 20 20 20 7b 0a 20 20 20  Value).    {.   
1ad0: 20 20 20 73 77 69 74 63 68 20 28 5f 64 61 74 65     switch (_date
1ae0: 74 69 6d 65 46 6f 72 6d 61 74 29 0a 20 20 20 20  timeFormat).    
1af0: 20 20 7b 0a 20 20 20 20 20 20 20 20 63 61 73 65    {.        case
1b00: 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61   SQLiteDateForma
1b10: 74 73 2e 54 69 63 6b 73 3a 0a 20 20 20 20 20 20  ts.Ticks:.      
1b20: 20 20 20 20 72 65 74 75 72 6e 20 64 61 74 65 56      return dateV
1b30: 61 6c 75 65 2e 54 69 63 6b 73 2e 54 6f 53 74 72  alue.Ticks.ToStr
1b40: 69 6e 67 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e  ing(CultureInfo.
1b50: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
1b60: 29 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  );.        case 
1b70: 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74  SQLiteDateFormat
1b80: 73 2e 4a 75 6c 69 61 6e 44 61 79 3a 0a 20 20 20  s.JulianDay:.   
1b90: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f         return To
1ba0: 4a 75 6c 69 61 6e 44 61 79 28 64 61 74 65 56 61  JulianDay(dateVa
1bb0: 6c 75 65 29 2e 54 6f 53 74 72 69 6e 67 28 43 75  lue).ToString(Cu
1bc0: 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69  ltureInfo.Invari
1bd0: 61 6e 74 43 75 6c 74 75 72 65 29 3b 0a 20 20 20  antCulture);.   
1be0: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20       default:.  
1bf0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 64          return d
1c00: 61 74 65 56 61 6c 75 65 2e 54 6f 53 74 72 69 6e  ateValue.ToStrin
1c10: 67 28 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61  g(_datetimeForma
1c20: 74 73 5b 37 5d 2c 20 43 75 6c 74 75 72 65 49 6e  ts[7], CultureIn
1c30: 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
1c40: 75 72 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ure);.      }.  
1c50: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
1c60: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 49  mmary>.    /// I
1c70: 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e  nternal function
1c80: 20 74 6f 20 63 6f 6e 76 65 72 74 20 61 20 55 54   to convert a UT
1c90: 46 2d 38 20 65 6e 63 6f 64 65 64 20 49 6e 74 50  F-8 encoded IntP
1ca0: 74 72 20 6f 66 20 74 68 65 20 73 70 65 63 69 66  tr of the specif
1cb0: 69 65 64 20 6c 65 6e 67 74 68 20 74 6f 20 61 20  ied length to a 
1cc0: 44 61 74 65 54 69 6d 65 2e 0a 20 20 20 20 2f 2f  DateTime..    //
1cd0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
1ce0: 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0a 20   /// <remarks>. 
1cf0: 20 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 61     /// This is a
1d00: 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 66 75 6e   convenience fun
1d10: 63 74 69 6f 6e 2c 20 77 68 69 63 68 20 66 69 72  ction, which fir
1d20: 73 74 20 63 61 6c 6c 73 20 54 6f 53 74 72 69 6e  st calls ToStrin
1d30: 67 28 29 20 6f 6e 20 74 68 65 20 49 6e 74 50 74  g() on the IntPt
1d40: 72 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20  r to convert it 
1d50: 74 6f 20 61 20 73 74 72 69 6e 67 2c 20 74 68 65  to a string, the
1d60: 6e 20 63 61 6c 6c 73 0a 20 20 20 20 2f 2f 2f 20  n calls.    /// 
1d70: 54 6f 44 61 74 65 54 69 6d 65 28 29 20 6f 6e 20  ToDateTime() on 
1d80: 74 68 65 20 73 74 72 69 6e 67 20 74 6f 20 72 65  the string to re
1d90: 74 75 72 6e 20 61 20 44 61 74 65 54 69 6d 65 2e  turn a DateTime.
1da0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72  .    /// </remar
1db0: 6b 73 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  ks>.    /// <par
1dc0: 61 6d 20 6e 61 6d 65 3d 22 70 74 72 22 3e 41 20  am name="ptr">A 
1dd0: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 55  pointer to the U
1de0: 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 73 74 72  TF-8 encoded str
1df0: 69 6e 67 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  ing</param>.    
1e00: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1e10: 22 6c 65 6e 22 3e 54 68 65 20 6c 65 6e 67 74 68  "len">The length
1e20: 20 69 6e 20 62 79 74 65 73 20 6f 66 20 74 68 65   in bytes of the
1e30: 20 73 74 72 69 6e 67 3c 2f 70 61 72 61 6d 3e 0a   string</param>.
1e40: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1e50: 3e 54 68 65 20 70 61 72 73 65 64 20 44 61 74 65  >The parsed Date
1e60: 54 69 6d 65 20 76 61 6c 75 65 3c 2f 72 65 74 75  Time value</retu
1e70: 72 6e 73 3e 0a 20 20 20 20 69 6e 74 65 72 6e 61  rns>.    interna
1e80: 6c 20 44 61 74 65 54 69 6d 65 20 54 6f 44 61 74  l DateTime ToDat
1e90: 65 54 69 6d 65 28 49 6e 74 50 74 72 20 70 74 72  eTime(IntPtr ptr
1ea0: 2c 20 69 6e 74 20 6c 65 6e 29 0a 20 20 20 20 7b  , int len).    {
1eb0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f  .      return To
1ec0: 44 61 74 65 54 69 6d 65 28 54 6f 53 74 72 69 6e  DateTime(ToStrin
1ed0: 67 28 70 74 72 2c 20 6c 65 6e 29 29 3b 0a 20 20  g(ptr, len));.  
1ee0: 20 20 7d 0a 0a 20 20 20 20 23 65 6e 64 72 65 67    }..    #endreg
1ef0: 69 6f 6e 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ion..    /// <su
1f00: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 53  mmary>.    /// S
1f10: 6d 61 72 74 20 6d 65 74 68 6f 64 20 6f 66 20 73  mart method of s
1f20: 70 6c 69 74 74 69 6e 67 20 61 20 73 74 72 69 6e  plitting a strin
1f30: 67 2e 20 20 53 6b 69 70 73 20 71 75 6f 74 65 64  g.  Skips quoted
1f40: 20 65 6c 65 6d 65 6e 74 73 2c 20 72 65 6d 6f 76   elements, remov
1f50: 65 73 20 74 68 65 20 71 75 6f 74 65 73 2e 0a 20  es the quotes.. 
1f60: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1f70: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72  >.    /// <remar
1f80: 6b 73 3e 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  ks>.    /// This
1f90: 20 73 70 6c 69 74 20 66 75 6e 63 74 69 6f 6e 20   split function 
1fa0: 77 6f 72 6b 73 20 73 6f 6d 65 77 68 61 74 20 6c  works somewhat l
1fb0: 69 6b 65 20 74 68 65 20 53 74 72 69 6e 67 2e 53  ike the String.S
1fc0: 70 6c 69 74 28 29 20 66 75 6e 63 74 69 6f 6e 20  plit() function 
1fd0: 69 6e 20 74 68 61 74 20 69 74 20 62 72 65 61 6b  in that it break
1fe0: 73 20 61 70 61 72 74 20 61 20 73 74 72 69 6e 67  s apart a string
1ff0: 20 69 6e 74 6f 0a 20 20 20 20 2f 2f 2f 20 70 69   into.    /// pi
2000: 65 63 65 73 20 61 6e 64 20 72 65 74 75 72 6e 73  eces and returns
2010: 20 74 68 65 20 70 69 65 63 65 73 20 61 73 20 61   the pieces as a
2020: 6e 20 61 72 72 61 79 2e 20 20 54 68 65 20 70 72  n array.  The pr
2030: 69 6d 61 72 79 20 64 69 66 66 65 72 65 6e 63 65  imary difference
2040: 73 20 61 72 65 3a 0a 20 20 20 20 2f 2f 2f 20 3c  s are:.    /// <
2050: 6c 69 73 74 20 74 79 70 65 3d 22 62 75 6c 6c 65  list type="bulle
2060: 74 22 3e 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65  t">.    /// <ite
2070: 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 4f  m><description>O
2080: 6e 6c 79 20 6f 6e 65 20 63 68 61 72 61 63 74 65  nly one characte
2090: 72 20 63 61 6e 20 62 65 20 70 72 6f 76 69 64 65  r can be provide
20a0: 64 20 61 73 20 61 20 73 65 70 61 72 61 74 6f 72  d as a separator
20b0: 20 63 68 61 72 61 63 74 65 72 3c 2f 64 65 73 63   character</desc
20c0: 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0a  ription></item>.
20d0: 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64      /// <item><d
20e0: 65 73 63 72 69 70 74 69 6f 6e 3e 51 75 6f 74 65  escription>Quote
20f0: 64 20 74 65 78 74 20 69 6e 73 69 64 65 20 74 68  d text inside th
2100: 65 20 73 74 72 69 6e 67 20 69 73 20 73 6b 69 70  e string is skip
2110: 70 65 64 20 6f 76 65 72 20 77 68 65 6e 20 73 65  ped over when se
2120: 61 72 63 68 69 6e 67 20 66 6f 72 20 74 68 65 20  arching for the 
2130: 73 65 70 61 72 61 74 6f 72 2c 20 61 6e 64 20 74  separator, and t
2140: 68 65 20 71 75 6f 74 65 73 20 61 72 65 20 72 65  he quotes are re
2150: 6d 6f 76 65 64 2e 3c 2f 64 65 73 63 72 69 70 74  moved.</descript
2160: 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0a 20 20 20 20  ion></item>.    
2170: 2f 2f 2f 20 3c 2f 6c 69 73 74 3e 0a 20 20 20 20  /// </list>.    
2180: 2f 2f 2f 20 54 68 75 73 2c 20 69 66 20 73 70 6c  /// Thus, if spl
2190: 69 74 74 69 6e 67 20 74 68 65 20 66 6f 6c 6c 6f  itting the follo
21a0: 77 69 6e 67 20 73 74 72 69 6e 67 20 6c 6f 6f 6b  wing string look
21b0: 69 6e 67 20 66 6f 72 20 61 20 63 6f 6d 6d 61 3a  ing for a comma:
21c0: 3c 62 72 2f 3e 0a 20 20 20 20 2f 2f 2f 20 4f 6e  <br/>.    /// On
21d0: 65 2c 54 77 6f 2c 20 22 54 68 72 65 65 2c 20 46  e,Two, "Three, F
21e0: 6f 75 72 22 2c 20 46 69 76 65 3c 62 72 2f 3e 0a  our", Five<br/>.
21f0: 20 20 20 20 2f 2f 2f 20 3c 62 72 2f 3e 0a 20 20      /// <br/>.  
2200: 20 20 2f 2f 2f 20 54 68 65 20 72 65 73 75 6c 74    /// The result
2210: 69 6e 67 20 61 72 72 61 79 20 77 6f 75 6c 64 20  ing array would 
2220: 63 6f 6e 74 61 69 6e 3c 62 72 2f 3e 0a 20 20 20  contain<br/>.   
2230: 20 2f 2f 2f 20 5b 30 5d 20 4f 6e 65 3c 62 72 2f   /// [0] One<br/
2240: 3e 0a 20 20 20 20 2f 2f 2f 20 5b 31 5d 20 54 77  >.    /// [1] Tw
2250: 6f 3c 62 72 2f 3e 0a 20 20 20 20 2f 2f 2f 20 5b  o<br/>.    /// [
2260: 32 5d 20 54 68 72 65 65 2c 20 46 6f 75 72 3c 62  2] Three, Four<b
2270: 72 2f 3e 0a 20 20 20 20 2f 2f 2f 20 5b 33 5d 20  r/>.    /// [3] 
2280: 46 69 76 65 3c 62 72 2f 3e 0a 20 20 20 20 2f 2f  Five<br/>.    //
2290: 2f 20 3c 62 72 2f 3e 0a 20 20 20 20 2f 2f 2f 20  / <br/>.    /// 
22a0: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 6c 65  Note that the le
22b0: 61 64 69 6e 67 20 61 6e 64 20 74 72 61 69 6c 69  ading and traili
22c0: 6e 67 20 73 70 61 63 65 73 20 77 65 72 65 20 72  ng spaces were r
22d0: 65 6d 6f 76 65 64 20 66 72 6f 6d 20 65 61 63 68  emoved from each
22e0: 20 69 74 65 6d 20 64 75 72 69 6e 67 20 74 68 65   item during the
22f0: 20 73 70 6c 69 74 2e 0a 20 20 20 20 2f 2f 2f 20   split..    /// 
2300: 3c 2f 72 65 6d 61 72 6b 73 3e 0a 20 20 20 20 2f  </remarks>.    /
2310: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2320: 73 6f 75 72 63 65 22 3e 53 6f 75 72 63 65 20 73  source">Source s
2330: 74 72 69 6e 67 20 74 6f 20 73 70 6c 69 74 20 61  tring to split a
2340: 70 61 72 74 3c 2f 70 61 72 61 6d 3e 0a 20 20 20  part</param>.   
2350: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2360: 3d 22 73 65 70 61 72 61 74 6f 72 22 3e 53 65 70  ="separator">Sep
2370: 61 72 61 74 6f 72 20 63 68 61 72 61 63 74 65 72  arator character
2380: 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f  </param>.    ///
2390: 20 3c 72 65 74 75 72 6e 73 3e 41 20 73 74 72 69   <returns>A stri
23a0: 6e 67 20 61 72 72 61 79 20 6f 66 20 74 68 65 20  ng array of the 
23b0: 73 70 6c 69 74 20 75 70 20 65 6c 65 6d 65 6e 74  split up element
23c0: 73 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20  s</returns>.    
23d0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
23e0: 72 69 6e 67 5b 5d 20 53 70 6c 69 74 28 73 74 72  ring[] Split(str
23f0: 69 6e 67 20 73 6f 75 72 63 65 2c 20 63 68 61 72  ing source, char
2400: 20 73 65 70 61 72 61 74 6f 72 29 0a 20 20 20 20   separator).    
2410: 7b 0a 20 20 20 20 20 20 63 68 61 72 5b 5d 20 74  {.      char[] t
2420: 6f 6b 73 20 3d 20 6e 65 77 20 63 68 61 72 5b 32  oks = new char[2
2430: 5d 20 7b 20 27 5c 22 27 2c 20 73 65 70 61 72 61  ] { '\"', separa
2440: 74 6f 72 20 7d 3b 0a 20 20 20 20 20 20 63 68 61  tor };.      cha
2450: 72 5b 5d 20 71 75 6f 74 20 3d 20 6e 65 77 20 63  r[] quot = new c
2460: 68 61 72 5b 31 5d 20 7b 20 27 5c 22 27 20 7d 3b  har[1] { '\"' };
2470: 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 30  .      int n = 0
2480: 3b 0a 20 20 20 20 20 20 4c 69 73 74 3c 73 74 72  ;.      List<str
2490: 69 6e 67 3e 20 6c 73 20 3d 20 6e 65 77 20 4c 69  ing> ls = new Li
24a0: 73 74 3c 73 74 72 69 6e 67 3e 28 29 3b 0a 20 20  st<string>();.  
24b0: 20 20 20 20 73 74 72 69 6e 67 20 73 3b 0a 0a 20      string s;.. 
24c0: 20 20 20 20 20 77 68 69 6c 65 20 28 73 6f 75 72       while (sour
24d0: 63 65 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0a 20  ce.Length > 0). 
24e0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 6e       {.        n
24f0: 20 3d 20 73 6f 75 72 63 65 2e 49 6e 64 65 78 4f   = source.IndexO
2500: 66 41 6e 79 28 74 6f 6b 73 2c 20 6e 29 3b 0a 20  fAny(toks, n);. 
2510: 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20         if (n == 
2520: 2d 31 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  -1) break;.     
2530: 20 20 20 69 66 20 28 73 6f 75 72 63 65 5b 6e 5d     if (source[n]
2540: 20 3d 3d 20 74 6f 6b 73 5b 30 5d 29 0a 20 20 20   == toks[0]).   
2550: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
2560: 20 2f 2f 73 6f 75 72 63 65 20 3d 20 73 6f 75 72   //source = sour
2570: 63 65 2e 52 65 6d 6f 76 65 28 6e 2c 20 31 29 3b  ce.Remove(n, 1);
2580: 0a 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 73  .          n = s
2590: 6f 75 72 63 65 2e 49 6e 64 65 78 4f 66 41 6e 79  ource.IndexOfAny
25a0: 28 71 75 6f 74 2c 20 6e 20 2b 20 31 29 3b 0a 20  (quot, n + 1);. 
25b0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d           if (n =
25c0: 3d 20 2d 31 29 0a 20 20 20 20 20 20 20 20 20 20  = -1).          
25d0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  {.            //
25e0: 73 6f 75 72 63 65 20 3d 20 22 5c 22 22 20 2b 20  source = "\"" + 
25f0: 73 6f 75 72 63 65 3b 0a 20 20 20 20 20 20 20 20  source;.        
2600: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
2610: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
2620: 20 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20   n++;.          
2630: 2f 2f 73 6f 75 72 63 65 20 3d 20 73 6f 75 72 63  //source = sourc
2640: 65 2e 52 65 6d 6f 76 65 28 6e 2c 20 31 29 3b 0a  e.Remove(n, 1);.
2650: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2660: 20 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20 7b    else.        {
2670: 0a 20 20 20 20 20 20 20 20 20 20 73 20 3d 20 73  .          s = s
2680: 6f 75 72 63 65 2e 53 75 62 73 74 72 69 6e 67 28  ource.Substring(
2690: 30 2c 20 6e 29 2e 54 72 69 6d 28 29 3b 0a 20 20  0, n).Trim();.  
26a0: 20 20 20 20 20 20 20 20 69 66 20 28 73 2e 4c 65          if (s.Le
26b0: 6e 67 74 68 20 3e 20 31 20 26 26 20 73 5b 30 5d  ngth > 1 && s[0]
26c0: 20 3d 3d 20 71 75 6f 74 5b 30 5d 20 26 26 20 73   == quot[0] && s
26d0: 5b 73 2e 4c 65 6e 67 74 68 20 2d 20 31 5d 20 3d  [s.Length - 1] =
26e0: 3d 20 73 5b 30 5d 29 0a 20 20 20 20 20 20 20 20  = s[0]).        
26f0: 20 20 20 20 73 20 3d 20 73 2e 53 75 62 73 74 72      s = s.Substr
2700: 69 6e 67 28 31 2c 20 73 2e 4c 65 6e 67 74 68 20  ing(1, s.Length 
2710: 2d 20 32 29 3b 0a 0a 20 20 20 20 20 20 20 20 20  - 2);..         
2720: 20 73 6f 75 72 63 65 20 3d 20 73 6f 75 72 63 65   source = source
2730: 2e 53 75 62 73 74 72 69 6e 67 28 6e 20 2b 20 31  .Substring(n + 1
2740: 29 2e 54 72 69 6d 28 29 3b 0a 20 20 20 20 20 20  ).Trim();.      
2750: 20 20 20 20 69 66 20 28 73 2e 4c 65 6e 67 74 68      if (s.Length
2760: 20 3e 20 30 29 20 6c 73 2e 41 64 64 28 73 29 3b   > 0) ls.Add(s);
2770: 0a 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 30  .          n = 0
2780: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
2790: 20 20 7d 0a 20 20 20 20 20 20 69 66 20 28 73 6f    }.      if (so
27a0: 75 72 63 65 2e 4c 65 6e 67 74 68 20 3e 20 30 29  urce.Length > 0)
27b0: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
27c0: 20 73 20 3d 20 73 6f 75 72 63 65 2e 54 72 69 6d   s = source.Trim
27d0: 28 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28  ();.        if (
27e0: 73 2e 4c 65 6e 67 74 68 20 3e 20 31 20 26 26 20  s.Length > 1 && 
27f0: 73 5b 30 5d 20 3d 3d 20 71 75 6f 74 5b 30 5d 20  s[0] == quot[0] 
2800: 26 26 20 73 5b 73 2e 4c 65 6e 67 74 68 20 2d 20  && s[s.Length - 
2810: 31 5d 20 3d 3d 20 73 5b 30 5d 29 0a 20 20 20 20  1] == s[0]).    
2820: 20 20 20 20 20 20 73 20 3d 20 73 2e 53 75 62 73        s = s.Subs
2830: 74 72 69 6e 67 28 31 2c 20 73 2e 4c 65 6e 67 74  tring(1, s.Lengt
2840: 68 20 2d 20 32 29 3b 0a 20 20 20 20 20 20 20 20  h - 2);.        
2850: 6c 73 2e 41 64 64 28 73 29 3b 0a 20 20 20 20 20  ls.Add(s);.     
2860: 20 7d 0a 0a 20 20 20 20 20 20 73 74 72 69 6e 67   }..      string
2870: 5b 5d 20 61 72 20 3d 20 6e 65 77 20 73 74 72 69  [] ar = new stri
2880: 6e 67 5b 6c 73 2e 43 6f 75 6e 74 5d 3b 0a 20 20  ng[ls.Count];.  
2890: 20 20 20 20 6c 73 2e 43 6f 70 79 54 6f 28 61 72      ls.CopyTo(ar
28a0: 2c 20 30 29 3b 0a 0a 20 20 20 20 20 20 72 65 74  , 0);..      ret
28b0: 75 72 6e 20 61 72 3b 0a 20 20 20 20 7d 0a 0a 20  urn ar;.    }.. 
28c0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
28d0: 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74  .    /// Convert
28e0: 20 61 20 76 61 6c 75 65 20 74 6f 20 74 72 75 65   a value to true
28f0: 20 6f 72 20 66 61 6c 73 65 2e 0a 20 20 20 20 2f   or false..    /
2900: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
2910: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2920: 65 3d 22 73 6f 75 72 63 65 22 3e 41 20 73 74 72  e="source">A str
2930: 69 6e 67 20 6f 72 20 6e 75 6d 62 65 72 20 72 65  ing or number re
2940: 70 72 65 73 65 6e 74 69 6e 67 20 74 72 75 65 20  presenting true 
2950: 6f 72 20 66 61 6c 73 65 3c 2f 70 61 72 61 6d 3e  or false</param>
2960: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
2970: 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20  s></returns>.   
2980: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 62   public static b
2990: 6f 6f 6c 20 54 6f 42 6f 6f 6c 65 61 6e 28 6f 62  ool ToBoolean(ob
29a0: 6a 65 63 74 20 73 6f 75 72 63 65 29 0a 20 20 20  ject source).   
29b0: 20 7b 0a 20 20 20 20 20 20 69 66 20 28 73 6f 75   {.      if (sou
29c0: 72 63 65 20 69 73 20 62 6f 6f 6c 29 20 72 65 74  rce is bool) ret
29d0: 75 72 6e 20 28 62 6f 6f 6c 29 73 6f 75 72 63 65  urn (bool)source
29e0: 3b 0a 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
29f0: 54 6f 42 6f 6f 6c 65 61 6e 28 73 6f 75 72 63 65  ToBoolean(source
2a00: 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0a 20 20  .ToString());.  
2a10: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
2a20: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 43  mmary>.    /// C
2a30: 6f 6e 76 65 72 74 20 61 20 73 74 72 69 6e 67 20  onvert a string 
2a40: 74 6f 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65  to true or false
2a50: 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2a60: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ary>.    /// <pa
2a70: 72 61 6d 20 6e 61 6d 65 3d 22 73 6f 75 72 63 65  ram name="source
2a80: 22 3e 41 20 73 74 72 69 6e 67 20 72 65 70 72 65  ">A string repre
2a90: 73 65 6e 74 69 6e 67 20 74 72 75 65 20 6f 72 20  senting true or 
2aa0: 66 61 6c 73 65 3c 2f 70 61 72 61 6d 3e 0a 20 20  false</param>.  
2ab0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 3c    /// <returns><
2ac0: 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 2f 2f  /returns>.    //
2ad0: 2f 20 3c 72 65 6d 61 72 6b 73 3e 0a 20 20 20 20  / <remarks>.    
2ae0: 2f 2f 2f 20 22 79 65 73 22 2c 20 22 6e 6f 22 2c  /// "yes", "no",
2af0: 20 22 79 22 2c 20 22 6e 22 2c 20 22 30 22 2c 20   "y", "n", "0", 
2b00: 22 31 22 2c 20 22 6f 6e 22 2c 20 22 6f 66 66 22  "1", "on", "off"
2b10: 20 61 73 20 77 65 6c 6c 20 61 73 20 42 6f 6f 6c   as well as Bool
2b20: 65 61 6e 2e 46 61 6c 73 65 53 74 72 69 6e 67 20  ean.FalseString 
2b30: 61 6e 64 20 42 6f 6f 6c 65 61 6e 2e 54 72 75 65  and Boolean.True
2b40: 53 74 72 69 6e 67 20 77 69 6c 6c 20 61 6c 6c 20  String will all 
2b50: 62 65 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 76 65  be.    /// conve
2b60: 72 74 65 64 20 74 6f 20 61 20 70 72 6f 70 65 72  rted to a proper
2b70: 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 0a   boolean value..
2b80: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b      /// </remark
2b90: 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74  s>.    public st
2ba0: 61 74 69 63 20 62 6f 6f 6c 20 54 6f 42 6f 6f 6c  atic bool ToBool
2bb0: 65 61 6e 28 73 74 72 69 6e 67 20 73 6f 75 72 63  ean(string sourc
2bc0: 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69  e).    {.      i
2bd0: 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72  f (String.Compar
2be0: 65 28 73 6f 75 72 63 65 2c 20 62 6f 6f 6c 2e 54  e(source, bool.T
2bf0: 72 75 65 53 74 72 69 6e 67 2c 20 53 74 72 69 6e  rueString, Strin
2c00: 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
2c10: 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
2c20: 3d 20 30 29 20 72 65 74 75 72 6e 20 74 72 75 65  = 0) return true
2c30: 3b 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 20  ;.      else if 
2c40: 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28  (String.Compare(
2c50: 73 6f 75 72 63 65 2c 20 62 6f 6f 6c 2e 46 61 6c  source, bool.Fal
2c60: 73 65 53 74 72 69 6e 67 2c 20 53 74 72 69 6e 67  seString, String
2c70: 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
2c80: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d  alIgnoreCase) ==
2c90: 20 30 29 20 72 65 74 75 72 6e 20 66 61 6c 73 65   0) return false
2ca0: 3b 0a 0a 20 20 20 20 20 20 73 77 69 74 63 68 28  ;..      switch(
2cb0: 73 6f 75 72 63 65 2e 54 6f 4c 6f 77 65 72 28 29  source.ToLower()
2cc0: 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20  ).      {.      
2cd0: 20 20 63 61 73 65 20 22 79 65 73 22 3a 0a 20 20    case "yes":.  
2ce0: 20 20 20 20 20 20 63 61 73 65 20 22 79 22 3a 0a        case "y":.
2cf0: 20 20 20 20 20 20 20 20 63 61 73 65 20 22 31 22          case "1"
2d00: 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 22  :.        case "
2d10: 6f 6e 22 3a 0a 20 20 20 20 20 20 20 20 20 20 72  on":.          r
2d20: 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 20 20 20  eturn true;.    
2d30: 20 20 20 20 63 61 73 65 20 22 6e 6f 22 3a 0a 20      case "no":. 
2d40: 20 20 20 20 20 20 20 63 61 73 65 20 22 6e 22 3a         case "n":
2d50: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 22 30  .        case "0
2d60: 22 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ":.        case 
2d70: 22 6f 66 66 22 3a 0a 20 20 20 20 20 20 20 20 20  "off":.         
2d80: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a 20   return false;. 
2d90: 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0a         default:.
2da0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
2db0: 6e 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65  new ArgumentExce
2dc0: 70 74 69 6f 6e 28 22 73 6f 75 72 63 65 22 29 3b  ption("source");
2dd0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a  .      }.    }..
2de0: 20 20 20 20 23 72 65 67 69 6f 6e 20 54 79 70 65      #region Type
2df0: 20 43 6f 6e 76 65 72 73 69 6f 6e 73 0a 20 20 20   Conversions.   
2e00: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
2e10: 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65     /// Determine
2e20: 73 20 74 68 65 20 64 61 74 61 20 74 79 70 65 20  s the data type 
2e30: 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  of a column in a
2e40: 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 20 20 2f   statement.    /
2e50: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
2e60: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2e70: 65 3d 22 73 74 6d 74 22 3e 54 68 65 20 73 74 61  e="stmt">The sta
2e80: 74 65 6d 65 6e 74 20 74 6f 20 72 65 74 72 69 65  tement to retrie
2e90: 76 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  ve information f
2ea0: 6f 72 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f  or</param>.    /
2eb0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2ec0: 69 22 3e 54 68 65 20 63 6f 6c 75 6d 6e 20 74 6f  i">The column to
2ed0: 20 72 65 74 72 69 65 76 65 20 74 79 70 65 20 69   retrieve type i
2ee0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 3c 2f 70  nformation on</p
2ef0: 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70  aram>.    /// <p
2f00: 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e  aram name="typ">
2f10: 54 68 65 20 53 51 4c 69 74 65 54 79 70 65 20 74  The SQLiteType t
2f20: 6f 20 72 65 63 65 69 76 65 20 74 68 65 20 61 66  o receive the af
2f30: 66 69 6e 69 74 79 20 66 6f 72 20 74 68 65 20 67  finity for the g
2f40: 69 76 65 6e 20 63 6f 6c 75 6d 6e 3c 2f 70 61 72  iven column</par
2f50: 61 6d 3e 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  am>.    internal
2f60: 20 73 74 61 74 69 63 20 76 6f 69 64 20 43 6f 6c   static void Col
2f70: 75 6d 6e 54 6f 54 79 70 65 28 53 51 4c 69 74 65  umnToType(SQLite
2f80: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
2f90: 69 6e 74 20 69 2c 20 53 51 4c 69 74 65 54 79 70  int i, SQLiteTyp
2fa0: 65 20 74 79 70 29 0a 20 20 20 20 7b 0a 20 20 20  e typ).    {.   
2fb0: 20 20 20 74 79 70 2e 54 79 70 65 20 3d 20 54 79     typ.Type = Ty
2fc0: 70 65 4e 61 6d 65 54 6f 44 62 54 79 70 65 28 73  peNameToDbType(s
2fd0: 74 6d 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54  tmt._sql.ColumnT
2fe0: 79 70 65 28 73 74 6d 74 2c 20 69 2c 20 6f 75 74  ype(stmt, i, out
2ff0: 20 74 79 70 2e 41 66 66 69 6e 69 74 79 29 29 3b   typ.Affinity));
3000: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20  .    }..    /// 
3010: 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  <summary>.    //
3020: 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 53 51 4c  / Converts a SQL
3030: 69 74 65 54 79 70 65 20 74 6f 20 61 20 2e 4e 45  iteType to a .NE
3040: 54 20 54 79 70 65 20 6f 62 6a 65 63 74 0a 20 20  T Type object.  
3050: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
3060: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
3070: 6e 61 6d 65 3d 22 74 22 3e 54 68 65 20 53 51 4c  name="t">The SQL
3080: 69 74 65 54 79 70 65 20 74 6f 20 63 6f 6e 76 65  iteType to conve
3090: 72 74 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f  rt</param>.    /
30a0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75  // <returns>Retu
30b0: 72 6e 73 20 61 20 2e 4e 45 54 20 54 79 70 65 20  rns a .NET Type 
30c0: 6f 62 6a 65 63 74 3c 2f 72 65 74 75 72 6e 73 3e  object</returns>
30d0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
30e0: 61 74 69 63 20 54 79 70 65 20 53 51 4c 69 74 65  atic Type SQLite
30f0: 54 79 70 65 54 6f 54 79 70 65 28 53 51 4c 69 74  TypeToType(SQLit
3100: 65 54 79 70 65 20 74 29 0a 20 20 20 20 7b 0a 20  eType t).    {. 
3110: 20 20 20 20 20 69 66 20 28 74 2e 54 79 70 65 20       if (t.Type 
3120: 3d 3d 20 44 62 54 79 70 65 2e 4f 62 6a 65 63 74  == DbType.Object
3130: 29 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ).        return
3140: 20 5f 61 66 66 69 6e 69 74 79 74 6f 74 79 70 65   _affinitytotype
3150: 5b 28 69 6e 74 29 74 2e 41 66 66 69 6e 69 74 79  [(int)t.Affinity
3160: 5d 3b 0a 20 20 20 20 20 20 65 6c 73 65 0a 20 20  ];.      else.  
3170: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
3180: 69 74 65 43 6f 6e 76 65 72 74 2e 44 62 54 79 70  iteConvert.DbTyp
3190: 65 54 6f 54 79 70 65 28 74 2e 54 79 70 65 29 3b  eToType(t.Type);
31a0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 69 76  .    }..    priv
31b0: 61 74 65 20 73 74 61 74 69 63 20 54 79 70 65 5b  ate static Type[
31c0: 5d 20 5f 61 66 66 69 6e 69 74 79 74 6f 74 79 70  ] _affinitytotyp
31d0: 65 20 3d 20 7b 0a 20 20 20 20 20 20 74 79 70 65  e = {.      type
31e0: 6f 66 28 6f 62 6a 65 63 74 29 2c 0a 20 20 20 20  of(object),.    
31f0: 20 20 74 79 70 65 6f 66 28 49 6e 74 36 34 29 2c    typeof(Int64),
3200: 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 44 6f  .      typeof(Do
3210: 75 62 6c 65 29 2c 0a 20 20 20 20 20 20 74 79 70  uble),.      typ
3220: 65 6f 66 28 73 74 72 69 6e 67 29 2c 0a 20 20 20  eof(string),.   
3230: 20 20 20 74 79 70 65 6f 66 28 62 79 74 65 5b 5d     typeof(byte[]
3240: 29 2c 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28  ),.      typeof(
3250: 6f 62 6a 65 63 74 29 2c 0a 20 20 20 20 20 20 74  object),.      t
3260: 79 70 65 6f 66 28 44 61 74 65 54 69 6d 65 29 2c  ypeof(DateTime),
3270: 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 6f 62  .      typeof(ob
3280: 6a 65 63 74 29 0a 20 20 20 20 7d 3b 0a 0a 20 20  ject).    };..  
3290: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
32a0: 20 20 20 20 2f 2f 2f 20 46 6f 72 20 61 20 67 69      /// For a gi
32b0: 76 65 6e 20 69 6e 74 72 69 6e 73 69 63 20 74 79  ven intrinsic ty
32c0: 70 65 2c 20 72 65 74 75 72 6e 20 61 20 44 62 54  pe, return a DbT
32d0: 79 70 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ype.    /// </su
32e0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
32f0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22  param name="typ"
3300: 3e 54 68 65 20 6e 61 74 69 76 65 20 74 79 70 65  >The native type
3310: 20 74 6f 20 63 6f 6e 76 65 72 74 3c 2f 70 61 72   to convert</par
3320: 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  am>.    /// <ret
3330: 75 72 6e 73 3e 54 68 65 20 63 6f 72 72 65 73 70  urns>The corresp
3340: 6f 6e 64 69 6e 67 20 28 63 6c 6f 73 65 73 74 20  onding (closest 
3350: 6d 61 74 63 68 29 20 44 62 54 79 70 65 3c 2f 72  match) DbType</r
3360: 65 74 75 72 6e 73 3e 0a 20 20 20 20 69 6e 74 65  eturns>.    inte
3370: 72 6e 61 6c 20 73 74 61 74 69 63 20 44 62 54 79  rnal static DbTy
3380: 70 65 20 54 79 70 65 54 6f 44 62 54 79 70 65 28  pe TypeToDbType(
3390: 54 79 70 65 20 74 79 70 29 0a 20 20 20 20 7b 0a  Type typ).    {.
33a0: 20 20 20 20 20 20 54 79 70 65 43 6f 64 65 20 74        TypeCode t
33b0: 63 20 3d 20 54 79 70 65 2e 47 65 74 54 79 70 65  c = Type.GetType
33c0: 43 6f 64 65 28 74 79 70 29 3b 0a 20 20 20 20 20  Code(typ);.     
33d0: 20 69 66 20 28 74 63 20 3d 3d 20 54 79 70 65 43   if (tc == TypeC
33e0: 6f 64 65 2e 4f 62 6a 65 63 74 29 0a 20 20 20 20  ode.Object).    
33f0: 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28    {.        if (
3400: 74 79 70 20 3d 3d 20 74 79 70 65 6f 66 28 62 79  typ == typeof(by
3410: 74 65 5b 5d 29 29 20 72 65 74 75 72 6e 20 44 62  te[])) return Db
3420: 54 79 70 65 2e 42 69 6e 61 72 79 3b 0a 20 20 20  Type.Binary;.   
3430: 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20       if (typ == 
3440: 74 79 70 65 6f 66 28 47 75 69 64 29 29 20 72 65  typeof(Guid)) re
3450: 74 75 72 6e 20 44 62 54 79 70 65 2e 47 75 69 64  turn DbType.Guid
3460: 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ;.        return
3470: 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67 3b 0a   DbType.String;.
3480: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65        }.      re
3490: 74 75 72 6e 20 5f 74 79 70 65 74 6f 64 62 74 79  turn _typetodbty
34a0: 70 65 5b 28 69 6e 74 29 74 63 5d 3b 0a 20 20 20  pe[(int)tc];.   
34b0: 20 7d 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20   }..    private 
34c0: 73 74 61 74 69 63 20 44 62 54 79 70 65 5b 5d 20  static DbType[] 
34d0: 5f 74 79 70 65 74 6f 64 62 74 79 70 65 20 3d 20  _typetodbtype = 
34e0: 7b 0a 20 20 20 20 20 20 44 62 54 79 70 65 2e 4f  {.      DbType.O
34f0: 62 6a 65 63 74 2c 0a 20 20 20 20 20 20 44 62 54  bject,.      DbT
3500: 79 70 65 2e 42 69 6e 61 72 79 2c 0a 20 20 20 20  ype.Binary,.    
3510: 20 20 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 2c    DbType.Object,
3520: 0a 20 20 20 20 20 20 44 62 54 79 70 65 2e 42 6f  .      DbType.Bo
3530: 6f 6c 65 61 6e 2c 0a 20 20 20 20 20 20 44 62 54  olean,.      DbT
3540: 79 70 65 2e 53 42 79 74 65 2c 0a 20 20 20 20 20  ype.SByte,.     
3550: 20 44 62 54 79 70 65 2e 53 42 79 74 65 2c 0a 20   DbType.SByte,. 
3560: 20 20 20 20 20 44 62 54 79 70 65 2e 42 79 74 65       DbType.Byte
3570: 2c 0a 20 20 20 20 20 20 44 62 54 79 70 65 2e 49  ,.      DbType.I
3580: 6e 74 31 36 2c 20 2f 2f 20 37 0a 20 20 20 20 20  nt16, // 7.     
3590: 20 44 62 54 79 70 65 2e 55 49 6e 74 31 36 2c 0a   DbType.UInt16,.
35a0: 20 20 20 20 20 20 44 62 54 79 70 65 2e 49 6e 74        DbType.Int
35b0: 33 32 2c 0a 20 20 20 20 20 20 44 62 54 79 70 65  32,.      DbType
35c0: 2e 55 49 6e 74 33 32 2c 0a 20 20 20 20 20 20 44  .UInt32,.      D
35d0: 62 54 79 70 65 2e 49 6e 74 36 34 2c 20 2f 2f 20  bType.Int64, // 
35e0: 31 31 0a 20 20 20 20 20 20 44 62 54 79 70 65 2e  11.      DbType.
35f0: 55 49 6e 74 36 34 2c 0a 20 20 20 20 20 20 44 62  UInt64,.      Db
3600: 54 79 70 65 2e 53 69 6e 67 6c 65 2c 0a 20 20 20  Type.Single,.   
3610: 20 20 20 44 62 54 79 70 65 2e 44 6f 75 62 6c 65     DbType.Double
3620: 2c 0a 20 20 20 20 20 20 44 62 54 79 70 65 2e 44  ,.      DbType.D
3630: 65 63 69 6d 61 6c 2c 0a 20 20 20 20 20 20 44 62  ecimal,.      Db
3640: 54 79 70 65 2e 44 61 74 65 54 69 6d 65 2c 0a 20  Type.DateTime,. 
3650: 20 20 20 20 20 44 62 54 79 70 65 2e 4f 62 6a 65       DbType.Obje
3660: 63 74 2c 0a 20 20 20 20 20 20 44 62 54 79 70 65  ct,.      DbType
3670: 2e 53 74 72 69 6e 67 2c 0a 20 20 20 20 7d 3b 0a  .String,.    };.
3680: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
3690: 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  y>.    /// Retur
36a0: 6e 73 20 74 68 65 20 43 6f 6c 75 6d 6e 53 69 7a  ns the ColumnSiz
36b0: 65 20 66 6f 72 20 74 68 65 20 67 69 76 65 6e 20  e for the given 
36c0: 44 62 54 79 70 65 0a 20 20 20 20 2f 2f 2f 20 3c  DbType.    /// <
36d0: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  /summary>.    //
36e0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74  / <param name="t
36f0: 79 70 22 3e 54 68 65 20 44 62 54 79 70 65 20 74  yp">The DbType t
3700: 6f 20 67 65 74 20 74 68 65 20 73 69 7a 65 20 6f  o get the size o
3710: 66 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f  f</param>.    //
3720: 2f 20 3c 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74  / <returns></ret
3730: 75 72 6e 73 3e 0a 20 20 20 20 69 6e 74 65 72 6e  urns>.    intern
3740: 61 6c 20 73 74 61 74 69 63 20 69 6e 74 20 44 62  al static int Db
3750: 54 79 70 65 54 6f 43 6f 6c 75 6d 6e 53 69 7a 65  TypeToColumnSize
3760: 28 44 62 54 79 70 65 20 74 79 70 29 0a 20 20 20  (DbType typ).   
3770: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
3780: 5f 64 62 74 79 70 65 74 6f 63 6f 6c 75 6d 6e 73  _dbtypetocolumns
3790: 69 7a 65 5b 28 69 6e 74 29 74 79 70 5d 3b 0a 20  ize[(int)typ];. 
37a0: 20 20 20 7d 0a 0a 20 20 20 20 70 72 69 76 61 74     }..    privat
37b0: 65 20 73 74 61 74 69 63 20 69 6e 74 5b 5d 20 5f  e static int[] _
37c0: 64 62 74 79 70 65 74 6f 63 6f 6c 75 6d 6e 73 69  dbtypetocolumnsi
37d0: 7a 65 20 3d 20 7b 0a 20 20 20 20 20 20 32 31 34  ze = {.      214
37e0: 37 34 38 33 36 34 37 2c 20 20 20 2f 2f 20 30 0a  7483647,   // 0.
37f0: 20 20 20 20 20 20 32 31 34 37 34 38 33 36 34 37        2147483647
3800: 2c 20 20 20 2f 2f 20 31 0a 20 20 20 20 20 20 31  ,   // 1.      1
3810: 2c 20 20 20 20 20 2f 2f 20 32 0a 20 20 20 20 20  ,     // 2.     
3820: 20 31 2c 20 20 20 20 20 2f 2f 20 33 0a 20 20 20   1,     // 3.   
3830: 20 20 20 38 2c 20 20 2f 2f 20 34 0a 20 20 20 20     8,  // 4.    
3840: 20 20 38 2c 20 2f 2f 20 35 0a 20 20 20 20 20 20    8, // 5.      
3850: 38 2c 20 2f 2f 20 36 0a 20 20 20 20 20 20 38 2c  8, // 6.      8,
3860: 20 20 2f 2f 20 37 0a 20 20 20 20 20 20 38 2c 20    // 7.      8, 
3870: 20 20 2f 2f 20 38 0a 20 20 20 20 20 20 31 36 2c    // 8.      16,
3880: 20 20 20 20 20 2f 2f 20 39 0a 20 20 20 20 20 20       // 9.      
3890: 32 2c 0a 20 20 20 20 20 20 34 2c 0a 20 20 20 20  2,.      4,.    
38a0: 20 20 38 2c 0a 20 20 20 20 20 20 32 31 34 37 34    8,.      21474
38b0: 38 33 36 34 37 2c 0a 20 20 20 20 20 20 31 2c 0a  83647,.      1,.
38c0: 20 20 20 20 20 20 34 2c 0a 20 20 20 20 20 20 32        4,.      2
38d0: 31 34 37 34 38 33 36 34 37 2c 0a 20 20 20 20 20  147483647,.     
38e0: 20 38 2c 0a 20 20 20 20 20 20 32 2c 0a 20 20 20   8,.      2,.   
38f0: 20 20 20 34 2c 0a 20 20 20 20 20 20 38 2c 0a 20     4,.      8,. 
3900: 20 20 20 20 20 38 2c 0a 20 20 20 20 20 20 32 31       8,.      21
3910: 34 37 34 38 33 36 34 37 2c 0a 20 20 20 20 20 20  47483647,.      
3920: 32 31 34 37 34 38 33 36 34 37 2c 0a 20 20 20 20  2147483647,.    
3930: 20 20 32 31 34 37 34 38 33 36 34 37 2c 0a 20 20    2147483647,.  
3940: 20 20 20 20 32 31 34 37 34 38 33 36 34 37 2c 20      2147483647, 
3950: 20 20 2f 2f 20 32 35 20 28 58 6d 6c 29 0a 20 20    // 25 (Xml).  
3960: 20 20 7d 3b 0a 0a 20 20 20 20 69 6e 74 65 72 6e    };..    intern
3970: 61 6c 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74  al static object
3980: 20 44 62 54 79 70 65 54 6f 4e 75 6d 65 72 69 63   DbTypeToNumeric
3990: 50 72 65 63 69 73 69 6f 6e 28 44 62 54 79 70 65  Precision(DbType
39a0: 20 74 79 70 29 0a 20 20 20 20 7b 0a 20 20 20 20   typ).    {.    
39b0: 20 20 72 65 74 75 72 6e 20 5f 64 62 74 79 70 65    return _dbtype
39c0: 74 6f 6e 75 6d 65 72 69 63 70 72 65 63 69 73 69  tonumericprecisi
39d0: 6f 6e 5b 28 69 6e 74 29 74 79 70 5d 3b 0a 20 20  on[(int)typ];.  
39e0: 20 20 7d 0a 0a 20 20 20 20 70 72 69 76 61 74 65    }..    private
39f0: 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 5b 5d   static object[]
3a00: 20 5f 64 62 74 79 70 65 74 6f 6e 75 6d 65 72 69   _dbtypetonumeri
3a10: 63 70 72 65 63 69 73 69 6f 6e 20 3d 20 7b 0a 20  cprecision = {. 
3a20: 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75       DBNull.Valu
3a30: 65 2c 20 2f 2f 20 30 0a 20 20 20 20 20 20 44 42  e, // 0.      DB
3a40: 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20 31  Null.Value, // 1
3a50: 0a 20 20 20 20 20 20 33 2c 0a 20 20 20 20 20 20  .      3,.      
3a60: 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 0a 20 20  DBNull.Value,.  
3a70: 20 20 20 20 31 39 2c 0a 20 20 20 20 20 20 44 42      19,.      DB
3a80: 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20 35  Null.Value, // 5
3a90: 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61  .      DBNull.Va
3aa0: 6c 75 65 2c 20 2f 2f 20 36 0a 20 20 20 20 20 20  lue, // 6.      
3ab0: 35 33 2c 0a 20 20 20 20 20 20 35 33 2c 0a 20 20  53,.      53,.  
3ac0: 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65      DBNull.Value
3ad0: 2c 0a 20 20 20 20 20 20 35 2c 0a 20 20 20 20 20  ,.      5,.     
3ae0: 20 31 30 2c 0a 20 20 20 20 20 20 31 39 2c 0a 20   10,.      19,. 
3af0: 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75       DBNull.Valu
3b00: 65 2c 0a 20 20 20 20 20 20 33 2c 0a 20 20 20 20  e,.      3,.    
3b10: 20 20 32 34 2c 0a 20 20 20 20 20 20 44 42 4e 75    24,.      DBNu
3b20: 6c 6c 2e 56 61 6c 75 65 2c 0a 20 20 20 20 20 20  ll.Value,.      
3b30: 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 0a 20 20  DBNull.Value,.  
3b40: 20 20 20 20 35 2c 0a 20 20 20 20 20 20 31 30 2c      5,.      10,
3b50: 0a 20 20 20 20 20 20 31 39 2c 0a 20 20 20 20 20  .      19,.     
3b60: 20 35 33 2c 0a 20 20 20 20 20 20 44 42 4e 75 6c   53,.      DBNul
3b70: 6c 2e 56 61 6c 75 65 2c 0a 20 20 20 20 20 20 44  l.Value,.      D
3b80: 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 0a 20 20 20  BNull.Value,.   
3b90: 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 0a     DBNull.Value.
3ba0: 20 20 20 20 7d 3b 0a 0a 20 20 20 20 69 6e 74 65      };..    inte
3bb0: 72 6e 61 6c 20 73 74 61 74 69 63 20 6f 62 6a 65  rnal static obje
3bc0: 63 74 20 44 62 54 79 70 65 54 6f 4e 75 6d 65 72  ct DbTypeToNumer
3bd0: 69 63 53 63 61 6c 65 28 44 62 54 79 70 65 20 74  icScale(DbType t
3be0: 79 70 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  yp).    {.      
3bf0: 72 65 74 75 72 6e 20 5f 64 62 74 79 70 65 74 6f  return _dbtypeto
3c00: 6e 75 6d 65 72 69 63 73 63 61 6c 65 5b 28 69 6e  numericscale[(in
3c10: 74 29 74 79 70 5d 3b 0a 20 20 20 20 7d 0a 0a 20  t)typ];.    }.. 
3c20: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
3c30: 63 20 6f 62 6a 65 63 74 5b 5d 20 5f 64 62 74 79  c object[] _dbty
3c40: 70 65 74 6f 6e 75 6d 65 72 69 63 73 63 61 6c 65  petonumericscale
3c50: 20 3d 20 7b 0a 20 20 20 20 20 20 44 42 4e 75 6c   = {.      DBNul
3c60: 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20 30 0a 20 20  l.Value, // 0.  
3c70: 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65      DBNull.Value
3c80: 2c 20 2f 2f 20 31 0a 20 20 20 20 20 20 30 2c 0a  , // 1.      0,.
3c90: 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c        DBNull.Val
3ca0: 75 65 2c 0a 20 20 20 20 20 20 34 2c 0a 20 20 20  ue,.      4,.   
3cb0: 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c     DBNull.Value,
3cc0: 20 2f 2f 20 35 0a 20 20 20 20 20 20 44 42 4e 75   // 5.      DBNu
3cd0: 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20 36 0a 20  ll.Value, // 6. 
3ce0: 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75       DBNull.Valu
3cf0: 65 2c 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e  e,.      DBNull.
3d00: 56 61 6c 75 65 2c 0a 20 20 20 20 20 20 44 42 4e  Value,.      DBN
3d10: 75 6c 6c 2e 56 61 6c 75 65 2c 0a 20 20 20 20 20  ull.Value,.     
3d20: 20 30 2c 0a 20 20 20 20 20 20 30 2c 0a 20 20 20   0,.      0,.   
3d30: 20 20 20 30 2c 0a 20 20 20 20 20 20 44 42 4e 75     0,.      DBNu
3d40: 6c 6c 2e 56 61 6c 75 65 2c 0a 20 20 20 20 20 20  ll.Value,.      
3d50: 30 2c 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e  0,.      DBNull.
3d60: 56 61 6c 75 65 2c 0a 20 20 20 20 20 20 44 42 4e  Value,.      DBN
3d70: 75 6c 6c 2e 56 61 6c 75 65 2c 0a 20 20 20 20 20  ull.Value,.     
3d80: 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 0a 20   DBNull.Value,. 
3d90: 20 20 20 20 20 30 2c 0a 20 20 20 20 20 20 30 2c       0,.      0,
3da0: 0a 20 20 20 20 20 20 30 2c 0a 20 20 20 20 20 20  .      0,.      
3db0: 30 2c 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e  0,.      DBNull.
3dc0: 56 61 6c 75 65 2c 0a 20 20 20 20 20 20 44 42 4e  Value,.      DBN
3dd0: 75 6c 6c 2e 56 61 6c 75 65 2c 0a 20 20 20 20 20  ull.Value,.     
3de0: 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 0a 20 20   DBNull.Value.  
3df0: 20 20 7d 3b 0a 0a 20 20 20 20 69 6e 74 65 72 6e    };..    intern
3e00: 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  al static string
3e10: 20 44 62 54 79 70 65 54 6f 54 79 70 65 4e 61 6d   DbTypeToTypeNam
3e20: 65 28 44 62 54 79 70 65 20 74 79 70 29 0a 20 20  e(DbType typ).  
3e30: 20 20 7b 0a 20 20 20 20 20 20 66 6f 72 20 28 69    {.      for (i
3e40: 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 5f 64  nt n = 0; n < _d
3e50: 62 74 79 70 65 4e 61 6d 65 73 2e 4c 65 6e 67 74  btypeNames.Lengt
3e60: 68 3b 20 6e 2b 2b 29 0a 20 20 20 20 20 20 7b 0a  h; n++).      {.
3e70: 20 20 20 20 20 20 20 20 69 66 20 28 5f 64 62 74          if (_dbt
3e80: 79 70 65 4e 61 6d 65 73 5b 6e 5d 2e 64 61 74 61  ypeNames[n].data
3e90: 54 79 70 65 20 3d 3d 20 74 79 70 29 0a 20 20 20  Type == typ).   
3ea0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 64         return _d
3eb0: 62 74 79 70 65 4e 61 6d 65 73 5b 6e 5d 2e 74 79  btypeNames[n].ty
3ec0: 70 65 4e 61 6d 65 3b 0a 20 20 20 20 20 20 7d 0a  peName;.      }.
3ed0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74  .      return St
3ee0: 72 69 6e 67 2e 45 6d 70 74 79 3b 0a 20 20 20 20  ring.Empty;.    
3ef0: 7d 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  }..    private s
3f00: 74 61 74 69 63 20 53 51 4c 69 74 65 54 79 70 65  tatic SQLiteType
3f10: 4e 61 6d 65 73 5b 5d 20 5f 64 62 74 79 70 65 4e  Names[] _dbtypeN
3f20: 61 6d 65 73 20 3d 20 7b 0a 20 20 20 20 20 20 6e  ames = {.      n
3f30: 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d  ew SQLiteTypeNam
3f40: 65 73 28 22 49 4e 54 45 47 45 52 22 2c 20 44 62  es("INTEGER", Db
3f50: 54 79 70 65 2e 49 6e 74 36 34 29 2c 0a 20 20 20  Type.Int64),.   
3f60: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
3f70: 65 4e 61 6d 65 73 28 22 54 49 4e 59 49 4e 54 22  eNames("TINYINT"
3f80: 2c 20 44 62 54 79 70 65 2e 42 79 74 65 29 2c 0a  , DbType.Byte),.
3f90: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
3fa0: 54 79 70 65 4e 61 6d 65 73 28 22 49 4e 54 22 2c  TypeNames("INT",
3fb0: 20 44 62 54 79 70 65 2e 49 6e 74 33 32 29 2c 0a   DbType.Int32),.
3fc0: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
3fd0: 54 79 70 65 4e 61 6d 65 73 28 22 56 41 52 43 48  TypeNames("VARCH
3fe0: 41 52 22 2c 20 44 62 54 79 70 65 2e 41 6e 73 69  AR", DbType.Ansi
3ff0: 53 74 72 69 6e 67 29 2c 0a 20 20 20 20 20 20 6e  String),.      n
4000: 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d  ew SQLiteTypeNam
4010: 65 73 28 22 4e 56 41 52 43 48 41 52 22 2c 20 44  es("NVARCHAR", D
4020: 62 54 79 70 65 2e 53 74 72 69 6e 67 29 2c 0a 20  bType.String),. 
4030: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54       new SQLiteT
4040: 79 70 65 4e 61 6d 65 73 28 22 43 48 41 52 22 2c  ypeNames("CHAR",
4050: 20 44 62 54 79 70 65 2e 41 6e 73 69 53 74 72 69   DbType.AnsiStri
4060: 6e 67 46 69 78 65 64 4c 65 6e 67 74 68 29 2c 0a  ngFixedLength),.
4070: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
4080: 54 79 70 65 4e 61 6d 65 73 28 22 4e 43 48 41 52  TypeNames("NCHAR
4090: 22 2c 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67  ", DbType.String
40a0: 46 69 78 65 64 4c 65 6e 67 74 68 29 2c 0a 20 20  FixedLength),.  
40b0: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
40c0: 70 65 4e 61 6d 65 73 28 22 46 4c 4f 41 54 22 2c  peNames("FLOAT",
40d0: 20 44 62 54 79 70 65 2e 44 6f 75 62 6c 65 29 2c   DbType.Double),
40e0: 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74  .      new SQLit
40f0: 65 54 79 70 65 4e 61 6d 65 73 28 22 52 45 41 4c  eTypeNames("REAL
4100: 22 2c 20 44 62 54 79 70 65 2e 53 69 6e 67 6c 65  ", DbType.Single
4110: 29 2c 20 20 20 20 20 20 20 20 20 20 0a 20 20 20  ),          .   
4120: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
4130: 65 4e 61 6d 65 73 28 22 42 49 54 22 2c 20 44 62  eNames("BIT", Db
4140: 54 79 70 65 2e 42 6f 6f 6c 65 61 6e 29 2c 0a 20  Type.Boolean),. 
4150: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54       new SQLiteT
4160: 79 70 65 4e 61 6d 65 73 28 22 44 45 43 49 4d 41  ypeNames("DECIMA
4170: 4c 22 2c 20 44 62 54 79 70 65 2e 44 65 63 69 6d  L", DbType.Decim
4180: 61 6c 29 2c 0a 20 20 20 20 20 20 6e 65 77 20 53  al),.      new S
4190: 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22  QLiteTypeNames("
41a0: 44 41 54 45 54 49 4d 45 22 2c 20 44 62 54 79 70  DATETIME", DbTyp
41b0: 65 2e 44 61 74 65 54 69 6d 65 29 2c 0a 20 20 20  e.DateTime),.   
41c0: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
41d0: 65 4e 61 6d 65 73 28 22 42 4c 4f 42 22 2c 20 44  eNames("BLOB", D
41e0: 62 54 79 70 65 2e 42 69 6e 61 72 79 29 2c 0a 20  bType.Binary),. 
41f0: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54       new SQLiteT
4200: 79 70 65 4e 61 6d 65 73 28 22 55 4e 49 51 55 45  ypeNames("UNIQUE
4210: 49 44 45 4e 54 49 46 49 45 52 22 2c 20 44 62 54  IDENTIFIER", DbT
4220: 79 70 65 2e 47 75 69 64 29 2c 0a 20 20 20 20 20  ype.Guid),.     
4230: 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e   new SQLiteTypeN
4240: 61 6d 65 73 28 22 53 4d 41 4c 4c 49 4e 54 22 2c  ames("SMALLINT",
4250: 20 44 62 54 79 70 65 2e 49 6e 74 31 36 29 2c 0a   DbType.Int16),.
4260: 20 20 20 20 7d 3b 0a 20 20 20 20 2f 2f 2f 20 3c      };.    /// <
4270: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
4280: 20 43 6f 6e 76 65 72 74 20 61 20 44 62 54 79 70   Convert a DbTyp
4290: 65 20 74 6f 20 61 20 54 79 70 65 0a 20 20 20 20  e to a Type.    
42a0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
42b0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
42c0: 6d 65 3d 22 74 79 70 22 3e 54 68 65 20 44 62 54  me="typ">The DbT
42d0: 79 70 65 20 74 6f 20 63 6f 6e 76 65 72 74 20 66  ype to convert f
42e0: 72 6f 6d 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  rom</param>.    
42f0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65  /// <returns>The
4300: 20 63 6c 6f 73 65 73 74 2d 6d 61 74 63 68 20 2e   closest-match .
4310: 4e 45 54 20 74 79 70 65 3c 2f 72 65 74 75 72 6e  NET type</return
4320: 73 3e 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  s>.    internal 
4330: 73 74 61 74 69 63 20 54 79 70 65 20 44 62 54 79  static Type DbTy
4340: 70 65 54 6f 54 79 70 65 28 44 62 54 79 70 65 20  peToType(DbType 
4350: 74 79 70 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  typ).    {.     
4360: 20 72 65 74 75 72 6e 20 5f 64 62 74 79 70 65 54   return _dbtypeT
4370: 6f 54 79 70 65 5b 28 69 6e 74 29 74 79 70 5d 3b  oType[(int)typ];
4380: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 69 76  .    }..    priv
4390: 61 74 65 20 73 74 61 74 69 63 20 54 79 70 65 5b  ate static Type[
43a0: 5d 20 5f 64 62 74 79 70 65 54 6f 54 79 70 65 20  ] _dbtypeToType 
43b0: 3d 20 7b 0a 20 20 20 20 20 20 74 79 70 65 6f 66  = {.      typeof
43c0: 28 73 74 72 69 6e 67 29 2c 20 20 20 2f 2f 20 30  (string),   // 0
43d0: 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 62 79  .      typeof(by
43e0: 74 65 5b 5d 29 2c 20 20 20 2f 2f 20 31 0a 20 20  te[]),   // 1.  
43f0: 20 20 20 20 74 79 70 65 6f 66 28 62 79 74 65 29      typeof(byte)
4400: 2c 20 20 20 20 20 2f 2f 20 32 0a 20 20 20 20 20  ,     // 2.     
4410: 20 74 79 70 65 6f 66 28 62 6f 6f 6c 29 2c 20 20   typeof(bool),  
4420: 20 20 20 2f 2f 20 33 0a 20 20 20 20 20 20 74 79     // 3.      ty
4430: 70 65 6f 66 28 64 65 63 69 6d 61 6c 29 2c 20 20  peof(decimal),  
4440: 2f 2f 20 34 0a 20 20 20 20 20 20 74 79 70 65 6f  // 4.      typeo
4450: 66 28 44 61 74 65 54 69 6d 65 29 2c 20 2f 2f 20  f(DateTime), // 
4460: 35 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 44  5.      typeof(D
4470: 61 74 65 54 69 6d 65 29 2c 20 2f 2f 20 36 0a 20  ateTime), // 6. 
4480: 20 20 20 20 20 74 79 70 65 6f 66 28 64 65 63 69       typeof(deci
4490: 6d 61 6c 29 2c 20 20 2f 2f 20 37 0a 20 20 20 20  mal),  // 7.    
44a0: 20 20 74 79 70 65 6f 66 28 64 6f 75 62 6c 65 29    typeof(double)
44b0: 2c 20 20 20 2f 2f 20 38 0a 20 20 20 20 20 20 74  ,   // 8.      t
44c0: 79 70 65 6f 66 28 47 75 69 64 29 2c 20 20 20 20  ypeof(Guid),    
44d0: 20 2f 2f 20 39 0a 20 20 20 20 20 20 74 79 70 65   // 9.      type
44e0: 6f 66 28 49 6e 74 31 36 29 2c 0a 20 20 20 20 20  of(Int16),.     
44f0: 20 74 79 70 65 6f 66 28 49 6e 74 33 32 29 2c 0a   typeof(Int32),.
4500: 20 20 20 20 20 20 74 79 70 65 6f 66 28 49 6e 74        typeof(Int
4510: 36 34 29 2c 0a 20 20 20 20 20 20 74 79 70 65 6f  64),.      typeo
4520: 66 28 6f 62 6a 65 63 74 29 2c 0a 20 20 20 20 20  f(object),.     
4530: 20 74 79 70 65 6f 66 28 73 62 79 74 65 29 2c 0a   typeof(sbyte),.
4540: 20 20 20 20 20 20 74 79 70 65 6f 66 28 66 6c 6f        typeof(flo
4550: 61 74 29 2c 0a 20 20 20 20 20 20 74 79 70 65 6f  at),.      typeo
4560: 66 28 73 74 72 69 6e 67 29 2c 0a 20 20 20 20 20  f(string),.     
4570: 20 74 79 70 65 6f 66 28 44 61 74 65 54 69 6d 65   typeof(DateTime
4580: 29 2c 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28  ),.      typeof(
4590: 55 49 6e 74 31 36 29 2c 0a 20 20 20 20 20 20 74  UInt16),.      t
45a0: 79 70 65 6f 66 28 55 49 6e 74 33 32 29 2c 0a 20  ypeof(UInt32),. 
45b0: 20 20 20 20 20 74 79 70 65 6f 66 28 55 49 6e 74       typeof(UInt
45c0: 36 34 29 2c 0a 20 20 20 20 20 20 74 79 70 65 6f  64),.      typeo
45d0: 66 28 64 6f 75 62 6c 65 29 2c 0a 20 20 20 20 20  f(double),.     
45e0: 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29 2c   typeof(string),
45f0: 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 73 74  .      typeof(st
4600: 72 69 6e 67 29 2c 0a 20 20 20 20 20 20 74 79 70  ring),.      typ
4610: 65 6f 66 28 73 74 72 69 6e 67 29 2c 0a 20 20 20  eof(string),.   
4620: 20 20 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67     typeof(string
4630: 29 2c 20 20 20 2f 2f 20 32 35 20 28 58 6d 6c 29  ),   // 25 (Xml)
4640: 0a 20 20 20 20 7d 3b 0a 0a 20 20 20 20 2f 2f 2f  .    };..    ///
4650: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
4660: 2f 2f 20 46 6f 72 20 61 20 67 69 76 65 6e 20 74  // For a given t
4670: 79 70 65 2c 20 72 65 74 75 72 6e 20 74 68 65 20  ype, return the 
4680: 63 6c 6f 73 65 73 74 2d 6d 61 74 63 68 20 53 51  closest-match SQ
4690: 4c 69 74 65 20 54 79 70 65 41 66 66 69 6e 69 74  Lite TypeAffinit
46a0: 79 2c 20 77 68 69 63 68 20 6f 6e 6c 79 20 75 6e  y, which only un
46b0: 64 65 72 73 74 61 6e 64 73 20 61 20 76 65 72 79  derstands a very
46c0: 20 6c 69 6d 69 74 65 64 20 73 75 62 73 65 74 20   limited subset 
46d0: 6f 66 20 74 79 70 65 73 2e 0a 20 20 20 20 2f 2f  of types..    //
46e0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
46f0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
4700: 3d 22 74 79 70 22 3e 54 68 65 20 74 79 70 65 20  ="typ">The type 
4710: 74 6f 20 65 76 61 6c 75 61 74 65 3c 2f 70 61 72  to evaluate</par
4720: 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  am>.    /// <ret
4730: 75 72 6e 73 3e 54 68 65 20 53 51 4c 69 74 65 20  urns>The SQLite 
4740: 74 79 70 65 20 61 66 66 69 6e 69 74 79 20 66 6f  type affinity fo
4750: 72 20 74 68 61 74 20 74 79 70 65 2e 3c 2f 72 65  r that type.</re
4760: 74 75 72 6e 73 3e 0a 20 20 20 20 69 6e 74 65 72  turns>.    inter
4770: 6e 61 6c 20 73 74 61 74 69 63 20 54 79 70 65 41  nal static TypeA
4780: 66 66 69 6e 69 74 79 20 54 79 70 65 54 6f 41 66  ffinity TypeToAf
4790: 66 69 6e 69 74 79 28 54 79 70 65 20 74 79 70 29  finity(Type typ)
47a0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 54 79 70  .    {.      Typ
47b0: 65 43 6f 64 65 20 74 63 20 3d 20 54 79 70 65 2e  eCode tc = Type.
47c0: 47 65 74 54 79 70 65 43 6f 64 65 28 74 79 70 29  GetTypeCode(typ)
47d0: 3b 0a 20 20 20 20 20 20 69 66 20 28 74 63 20 3d  ;.      if (tc =
47e0: 3d 20 54 79 70 65 43 6f 64 65 2e 4f 62 6a 65 63  = TypeCode.Objec
47f0: 74 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  t).      {.     
4800: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 74 79     if (typ == ty
4810: 70 65 6f 66 28 62 79 74 65 5b 5d 29 20 7c 7c 20  peof(byte[]) || 
4820: 74 79 70 20 3d 3d 20 74 79 70 65 6f 66 28 47 75  typ == typeof(Gu
4830: 69 64 29 29 0a 20 20 20 20 20 20 20 20 20 20 72  id)).          r
4840: 65 74 75 72 6e 20 54 79 70 65 41 66 66 69 6e 69  eturn TypeAffini
4850: 74 79 2e 42 6c 6f 62 3b 0a 20 20 20 20 20 20 20  ty.Blob;.       
4860: 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20 20 20   else.          
4870: 72 65 74 75 72 6e 20 54 79 70 65 41 66 66 69 6e  return TypeAffin
4880: 69 74 79 2e 54 65 78 74 3b 0a 20 20 20 20 20 20  ity.Text;.      
4890: 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f  }.      return _
48a0: 74 79 70 65 63 6f 64 65 41 66 66 69 6e 69 74 69  typecodeAffiniti
48b0: 65 73 5b 28 69 6e 74 29 74 63 5d 3b 0a 20 20 20  es[(int)tc];.   
48c0: 20 7d 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20   }..    private 
48d0: 73 74 61 74 69 63 20 54 79 70 65 41 66 66 69 6e  static TypeAffin
48e0: 69 74 79 5b 5d 20 5f 74 79 70 65 63 6f 64 65 41  ity[] _typecodeA
48f0: 66 66 69 6e 69 74 69 65 73 20 3d 20 7b 0a 20 20  ffinities = {.  
4900: 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79      TypeAffinity
4910: 2e 4e 75 6c 6c 2c 0a 20 20 20 20 20 20 54 79 70  .Null,.      Typ
4920: 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 2c 0a  eAffinity.Blob,.
4930: 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69        TypeAffini
4940: 74 79 2e 4e 75 6c 6c 2c 0a 20 20 20 20 20 20 54  ty.Null,.      T
4950: 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36  ypeAffinity.Int6
4960: 34 2c 0a 20 20 20 20 20 20 54 79 70 65 41 66 66  4,.      TypeAff
4970: 69 6e 69 74 79 2e 49 6e 74 36 34 2c 0a 20 20 20  inity.Int64,.   
4980: 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e     TypeAffinity.
4990: 49 6e 74 36 34 2c 0a 20 20 20 20 20 20 54 79 70  Int64,.      Typ
49a0: 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 2c  eAffinity.Int64,
49b0: 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e  .      TypeAffin
49c0: 69 74 79 2e 49 6e 74 36 34 2c 20 2f 2f 20 37 0a  ity.Int64, // 7.
49d0: 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69        TypeAffini
49e0: 74 79 2e 49 6e 74 36 34 2c 0a 20 20 20 20 20 20  ty.Int64,.      
49f0: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74  TypeAffinity.Int
4a00: 36 34 2c 0a 20 20 20 20 20 20 54 79 70 65 41 66  64,.      TypeAf
4a10: 66 69 6e 69 74 79 2e 49 6e 74 36 34 2c 0a 20 20  finity.Int64,.  
4a20: 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79      TypeAffinity
4a30: 2e 49 6e 74 36 34 2c 20 2f 2f 20 31 31 0a 20 20  .Int64, // 11.  
4a40: 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79      TypeAffinity
4a50: 2e 49 6e 74 36 34 2c 0a 20 20 20 20 20 20 54 79  .Int64,.      Ty
4a60: 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c  peAffinity.Doubl
4a70: 65 2c 0a 20 20 20 20 20 20 54 79 70 65 41 66 66  e,.      TypeAff
4a80: 69 6e 69 74 79 2e 44 6f 75 62 6c 65 2c 0a 20 20  inity.Double,.  
4a90: 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79      TypeAffinity
4aa0: 2e 44 6f 75 62 6c 65 2c 0a 20 20 20 20 20 20 54  .Double,.      T
4ab0: 79 70 65 41 66 66 69 6e 69 74 79 2e 44 61 74 65  ypeAffinity.Date
4ac0: 54 69 6d 65 2c 0a 20 20 20 20 20 20 54 79 70 65  Time,.      Type
4ad0: 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 2c 0a 20  Affinity.Null,. 
4ae0: 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74       TypeAffinit
4af0: 79 2e 54 65 78 74 2c 0a 20 20 20 20 7d 3b 0a 0a  y.Text,.    };..
4b00: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
4b10: 3e 0a 20 20 20 20 2f 2f 2f 20 46 6f 72 20 61 20  >.    /// For a 
4b20: 67 69 76 65 6e 20 74 79 70 65 20 6e 61 6d 65 2c  given type name,
4b30: 20 72 65 74 75 72 6e 20 61 20 63 6c 6f 73 65 73   return a closes
4b40: 74 2d 6d 61 74 63 68 20 2e 4e 45 54 20 74 79 70  t-match .NET typ
4b50: 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  e.    /// </summ
4b60: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ary>.    /// <pa
4b70: 72 61 6d 20 6e 61 6d 65 3d 22 4e 61 6d 65 22 3e  ram name="Name">
4b80: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
4b90: 74 79 70 65 20 74 6f 20 6d 61 74 63 68 3c 2f 70  type to match</p
4ba0: 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72  aram>.    /// <r
4bb0: 65 74 75 72 6e 73 3e 54 68 65 20 2e 4e 45 54 20  eturns>The .NET 
4bc0: 44 42 54 79 70 65 20 74 68 65 20 74 65 78 74 20  DBType the text 
4bd0: 65 76 61 6c 75 61 74 65 73 20 74 6f 2e 3c 2f 72  evaluates to.</r
4be0: 65 74 75 72 6e 73 3e 0a 20 20 20 20 69 6e 74 65  eturns>.    inte
4bf0: 72 6e 61 6c 20 73 74 61 74 69 63 20 44 62 54 79  rnal static DbTy
4c00: 70 65 20 54 79 70 65 4e 61 6d 65 54 6f 44 62 54  pe TypeNameToDbT
4c10: 79 70 65 28 73 74 72 69 6e 67 20 4e 61 6d 65 29  ype(string Name)
4c20: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66 20  .    {.      if 
4c30: 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
4c40: 45 6d 70 74 79 28 4e 61 6d 65 29 29 20 72 65 74  Empty(Name)) ret
4c50: 75 72 6e 20 44 62 54 79 70 65 2e 4f 62 6a 65 63  urn DbType.Objec
4c60: 74 3b 0a 0a 20 20 20 20 20 20 69 6e 74 20 78 20  t;..      int x 
4c70: 3d 20 5f 74 79 70 65 4e 61 6d 65 73 2e 4c 65 6e  = _typeNames.Len
4c80: 67 74 68 3b 0a 20 20 20 20 20 20 66 6f 72 20 28  gth;.      for (
4c90: 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 78  int n = 0; n < x
4ca0: 3b 20 6e 2b 2b 29 0a 20 20 20 20 20 20 7b 0a 20  ; n++).      {. 
4cb0: 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
4cc0: 67 2e 43 6f 6d 70 61 72 65 28 4e 61 6d 65 2c 20  g.Compare(Name, 
4cd0: 30 2c 20 5f 74 79 70 65 4e 61 6d 65 73 5b 6e 5d  0, _typeNames[n]
4ce0: 2e 74 79 70 65 4e 61 6d 65 2c 20 30 2c 20 5f 74  .typeName, 0, _t
4cf0: 79 70 65 4e 61 6d 65 73 5b 6e 5d 2e 74 79 70 65  ypeNames[n].type
4d00: 4e 61 6d 65 2e 4c 65 6e 67 74 68 2c 20 74 72 75  Name.Length, tru
4d10: 65 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49  e, CultureInfo.I
4d20: 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29  nvariantCulture)
4d30: 20 3d 3d 20 30 29 0a 20 20 20 20 20 20 20 20 20   == 0).         
4d40: 20 72 65 74 75 72 6e 20 5f 74 79 70 65 4e 61 6d   return _typeNam
4d50: 65 73 5b 6e 5d 2e 64 61 74 61 54 79 70 65 3b 20  es[n].dataType; 
4d60: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
4d70: 65 74 75 72 6e 20 44 62 54 79 70 65 2e 4f 62 6a  eturn DbType.Obj
4d80: 65 63 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 23  ect;.    }.    #
4d90: 65 6e 64 72 65 67 69 6f 6e 0a 0a 20 20 20 20 70  endregion..    p
4da0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 53 51  rivate static SQ
4db0: 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 5b 5d 20  LiteTypeNames[] 
4dc0: 5f 74 79 70 65 4e 61 6d 65 73 20 3d 20 7b 0a 20  _typeNames = {. 
4dd0: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54       new SQLiteT
4de0: 79 70 65 4e 61 6d 65 73 28 22 43 4f 55 4e 54 45  ypeNames("COUNTE
4df0: 52 22 2c 20 44 62 54 79 70 65 2e 49 6e 74 36 34  R", DbType.Int64
4e00: 29 2c 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c  ),.      new SQL
4e10: 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 41 55  iteTypeNames("AU
4e20: 54 4f 49 4e 43 52 45 4d 45 4e 54 22 2c 20 44 62  TOINCREMENT", Db
4e30: 54 79 70 65 2e 49 6e 74 36 34 29 2c 0a 20 20 20  Type.Int64),.   
4e40: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
4e50: 65 4e 61 6d 65 73 28 22 49 44 45 4e 54 49 54 59  eNames("IDENTITY
4e60: 22 2c 20 44 62 54 79 70 65 2e 49 6e 74 36 34 29  ", DbType.Int64)
4e70: 2c 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69  ,.      new SQLi
4e80: 74 65 54 79 70 65 4e 61 6d 65 73 28 22 4c 4f 4e  teTypeNames("LON
4e90: 47 54 45 58 54 22 2c 20 44 62 54 79 70 65 2e 53  GTEXT", DbType.S
4ea0: 74 72 69 6e 67 29 2c 0a 20 20 20 20 20 20 6e 65  tring),.      ne
4eb0: 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  w SQLiteTypeName
4ec0: 73 28 22 4c 4f 4e 47 43 48 41 52 22 2c 20 44 62  s("LONGCHAR", Db
4ed0: 54 79 70 65 2e 53 74 72 69 6e 67 29 2c 0a 20 20  Type.String),.  
4ee0: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
4ef0: 70 65 4e 61 6d 65 73 28 22 4c 4f 4e 47 56 41 52  peNames("LONGVAR
4f00: 43 48 41 52 22 2c 20 44 62 54 79 70 65 2e 53 74  CHAR", DbType.St
4f10: 72 69 6e 67 29 2c 0a 20 20 20 20 20 20 6e 65 77  ring),.      new
4f20: 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73   SQLiteTypeNames
4f30: 28 22 4c 4f 4e 47 22 2c 20 44 62 54 79 70 65 2e  ("LONG", DbType.
4f40: 49 6e 74 36 34 29 2c 0a 20 20 20 20 20 20 6e 65  Int64),.      ne
4f50: 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  w SQLiteTypeName
4f60: 73 28 22 54 49 4e 59 49 4e 54 22 2c 20 44 62 54  s("TINYINT", DbT
4f70: 79 70 65 2e 42 79 74 65 29 2c 0a 20 20 20 20 20  ype.Byte),.     
4f80: 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e   new SQLiteTypeN
4f90: 61 6d 65 73 28 22 49 4e 54 45 47 45 52 22 2c 20  ames("INTEGER", 
4fa0: 44 62 54 79 70 65 2e 49 6e 74 36 34 29 2c 0a 20  DbType.Int64),. 
4fb0: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54       new SQLiteT
4fc0: 79 70 65 4e 61 6d 65 73 28 22 49 4e 54 22 2c 20  ypeNames("INT", 
4fd0: 44 62 54 79 70 65 2e 49 6e 74 33 32 29 2c 0a 20  DbType.Int32),. 
4fe0: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54       new SQLiteT
4ff0: 79 70 65 4e 61 6d 65 73 28 22 56 41 52 43 48 41  ypeNames("VARCHA
5000: 52 22 2c 20 44 62 54 79 70 65 2e 53 74 72 69 6e  R", DbType.Strin
5010: 67 29 2c 0a 20 20 20 20 20 20 6e 65 77 20 53 51  g),.      new SQ
5020: 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 4e  LiteTypeNames("N
5030: 56 41 52 43 48 41 52 22 2c 20 44 62 54 79 70 65  VARCHAR", DbType
5040: 2e 53 74 72 69 6e 67 29 2c 0a 20 20 20 20 20 20  .String),.      
5050: 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61  new SQLiteTypeNa
5060: 6d 65 73 28 22 43 48 41 52 22 2c 20 44 62 54 79  mes("CHAR", DbTy
5070: 70 65 2e 53 74 72 69 6e 67 29 2c 0a 20 20 20 20  pe.String),.    
5080: 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65    new SQLiteType
5090: 4e 61 6d 65 73 28 22 4e 43 48 41 52 22 2c 20 44  Names("NCHAR", D
50a0: 62 54 79 70 65 2e 53 74 72 69 6e 67 29 2c 0a 20  bType.String),. 
50b0: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54       new SQLiteT
50c0: 79 70 65 4e 61 6d 65 73 28 22 54 45 58 54 22 2c  ypeNames("TEXT",
50d0: 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67 29 2c   DbType.String),
50e0: 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74  .      new SQLit
50f0: 65 54 79 70 65 4e 61 6d 65 73 28 22 4e 54 45 58  eTypeNames("NTEX
5100: 54 22 2c 20 44 62 54 79 70 65 2e 53 74 72 69 6e  T", DbType.Strin
5110: 67 29 2c 0a 20 20 20 20 20 20 6e 65 77 20 53 51  g),.      new SQ
5120: 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 53  LiteTypeNames("S
5130: 54 52 49 4e 47 22 2c 20 44 62 54 79 70 65 2e 53  TRING", DbType.S
5140: 74 72 69 6e 67 29 2c 0a 20 20 20 20 20 20 6e 65  tring),.      ne
5150: 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  w SQLiteTypeName
5160: 73 28 22 44 4f 55 42 4c 45 22 2c 20 44 62 54 79  s("DOUBLE", DbTy
5170: 70 65 2e 44 6f 75 62 6c 65 29 2c 0a 20 20 20 20  pe.Double),.    
5180: 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65    new SQLiteType
5190: 4e 61 6d 65 73 28 22 46 4c 4f 41 54 22 2c 20 44  Names("FLOAT", D
51a0: 62 54 79 70 65 2e 44 6f 75 62 6c 65 29 2c 0a 20  bType.Double),. 
51b0: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54       new SQLiteT
51c0: 79 70 65 4e 61 6d 65 73 28 22 52 45 41 4c 22 2c  ypeNames("REAL",
51d0: 20 44 62 54 79 70 65 2e 53 69 6e 67 6c 65 29 2c   DbType.Single),
51e0: 20 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 20            .     
51f0: 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e   new SQLiteTypeN
5200: 61 6d 65 73 28 22 42 49 54 22 2c 20 44 62 54 79  ames("BIT", DbTy
5210: 70 65 2e 42 6f 6f 6c 65 61 6e 29 2c 0a 20 20 20  pe.Boolean),.   
5220: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
5230: 65 4e 61 6d 65 73 28 22 59 45 53 4e 4f 22 2c 20  eNames("YESNO", 
5240: 44 62 54 79 70 65 2e 42 6f 6f 6c 65 61 6e 29 2c  DbType.Boolean),
5250: 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74  .      new SQLit
5260: 65 54 79 70 65 4e 61 6d 65 73 28 22 4c 4f 47 49  eTypeNames("LOGI
5270: 43 41 4c 22 2c 20 44 62 54 79 70 65 2e 42 6f 6f  CAL", DbType.Boo
5280: 6c 65 61 6e 29 2c 0a 20 20 20 20 20 20 6e 65 77  lean),.      new
5290: 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73   SQLiteTypeNames
52a0: 28 22 42 4f 4f 4c 22 2c 20 44 62 54 79 70 65 2e  ("BOOL", DbType.
52b0: 42 6f 6f 6c 65 61 6e 29 2c 0a 20 20 20 20 20 20  Boolean),.      
52c0: 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61  new SQLiteTypeNa
52d0: 6d 65 73 28 22 4e 55 4d 45 52 49 43 22 2c 20 44  mes("NUMERIC", D
52e0: 62 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 2c 0a  bType.Decimal),.
52f0: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
5300: 54 79 70 65 4e 61 6d 65 73 28 22 44 45 43 49 4d  TypeNames("DECIM
5310: 41 4c 22 2c 20 44 62 54 79 70 65 2e 44 65 63 69  AL", DbType.Deci
5320: 6d 61 6c 29 2c 0a 20 20 20 20 20 20 6e 65 77 20  mal),.      new 
5330: 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28  SQLiteTypeNames(
5340: 22 4d 4f 4e 45 59 22 2c 20 44 62 54 79 70 65 2e  "MONEY", DbType.
5350: 44 65 63 69 6d 61 6c 29 2c 0a 20 20 20 20 20 20  Decimal),.      
5360: 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61  new SQLiteTypeNa
5370: 6d 65 73 28 22 43 55 52 52 45 4e 43 59 22 2c 20  mes("CURRENCY", 
5380: 44 62 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 2c  DbType.Decimal),
5390: 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74  .      new SQLit
53a0: 65 54 79 70 65 4e 61 6d 65 73 28 22 54 49 4d 45  eTypeNames("TIME
53b0: 22 2c 20 44 62 54 79 70 65 2e 44 61 74 65 54 69  ", DbType.DateTi
53c0: 6d 65 29 2c 0a 20 20 20 20 20 20 6e 65 77 20 53  me),.      new S
53d0: 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22  QLiteTypeNames("
53e0: 44 41 54 45 22 2c 20 44 62 54 79 70 65 2e 44 61  DATE", DbType.Da
53f0: 74 65 54 69 6d 65 29 2c 0a 20 20 20 20 20 20 6e  teTime),.      n
5400: 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d  ew SQLiteTypeNam
5410: 65 73 28 22 53 4d 41 4c 4c 44 41 54 45 22 2c 20  es("SMALLDATE", 
5420: 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d 65 29  DbType.DateTime)
5430: 2c 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69  ,.      new SQLi
5440: 74 65 54 79 70 65 4e 61 6d 65 73 28 22 42 4c 4f  teTypeNames("BLO
5450: 42 22 2c 20 44 62 54 79 70 65 2e 42 69 6e 61 72  B", DbType.Binar
5460: 79 29 2c 0a 20 20 20 20 20 20 6e 65 77 20 53 51  y),.      new SQ
5470: 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 42  LiteTypeNames("B
5480: 49 4e 41 52 59 22 2c 20 44 62 54 79 70 65 2e 42  INARY", DbType.B
5490: 69 6e 61 72 79 29 2c 0a 20 20 20 20 20 20 6e 65  inary),.      ne
54a0: 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  w SQLiteTypeName
54b0: 73 28 22 56 41 52 42 49 4e 41 52 59 22 2c 20 44  s("VARBINARY", D
54c0: 62 54 79 70 65 2e 42 69 6e 61 72 79 29 2c 0a 20  bType.Binary),. 
54d0: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54       new SQLiteT
54e0: 79 70 65 4e 61 6d 65 73 28 22 49 4d 41 47 45 22  ypeNames("IMAGE"
54f0: 2c 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79 29  , DbType.Binary)
5500: 2c 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69  ,.      new SQLi
5510: 74 65 54 79 70 65 4e 61 6d 65 73 28 22 47 45 4e  teTypeNames("GEN
5520: 45 52 41 4c 22 2c 20 44 62 54 79 70 65 2e 42 69  ERAL", DbType.Bi
5530: 6e 61 72 79 29 2c 0a 20 20 20 20 20 20 6e 65 77  nary),.      new
5540: 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73   SQLiteTypeNames
5550: 28 22 4f 4c 45 4f 42 4a 45 43 54 22 2c 20 44 62  ("OLEOBJECT", Db
5560: 54 79 70 65 2e 42 69 6e 61 72 79 29 2c 0a 20 20  Type.Binary),.  
5570: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
5580: 70 65 4e 61 6d 65 73 28 22 47 55 49 44 22 2c 20  peNames("GUID", 
5590: 44 62 54 79 70 65 2e 47 75 69 64 29 2c 0a 20 20  DbType.Guid),.  
55a0: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
55b0: 70 65 4e 61 6d 65 73 28 22 55 4e 49 51 55 45 49  peNames("UNIQUEI
55c0: 44 45 4e 54 49 46 49 45 52 22 2c 20 44 62 54 79  DENTIFIER", DbTy
55d0: 70 65 2e 47 75 69 64 29 2c 0a 20 20 20 20 20 20  pe.Guid),.      
55e0: 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61  new SQLiteTypeNa
55f0: 6d 65 73 28 22 4d 45 4d 4f 22 2c 20 44 62 54 79  mes("MEMO", DbTy
5600: 70 65 2e 53 74 72 69 6e 67 29 2c 0a 20 20 20 20  pe.String),.    
5610: 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65    new SQLiteType
5620: 4e 61 6d 65 73 28 22 4e 4f 54 45 22 2c 20 44 62  Names("NOTE", Db
5630: 54 79 70 65 2e 53 74 72 69 6e 67 29 2c 0a 20 20  Type.String),.  
5640: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
5650: 70 65 4e 61 6d 65 73 28 22 53 4d 41 4c 4c 49 4e  peNames("SMALLIN
5660: 54 22 2c 20 44 62 54 79 70 65 2e 49 6e 74 31 36  T", DbType.Int16
5670: 29 2c 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c  ),.      new SQL
5680: 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 42 49  iteTypeNames("BI
5690: 47 49 4e 54 22 2c 20 44 62 54 79 70 65 2e 49 6e  GINT", DbType.In
56a0: 74 36 34 29 2c 0a 20 20 20 20 7d 3b 0a 20 20 7d  t64),.    };.  }
56b0: 0a 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79  ..  /// <summary
56c0: 3e 0a 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 68  >.  /// SQLite h
56d0: 61 73 20 76 65 72 79 20 6c 69 6d 69 74 65 64 20  as very limited 
56e0: 74 79 70 65 73 2c 20 61 6e 64 20 69 73 20 69 6e  types, and is in
56f0: 68 65 72 65 6e 74 6c 79 20 74 65 78 74 2d 62 61  herently text-ba
5700: 73 65 64 2e 20 20 54 68 65 20 66 69 72 73 74 20  sed.  The first 
5710: 35 20 74 79 70 65 73 20 62 65 6c 6f 77 20 72 65  5 types below re
5720: 70 72 65 73 65 6e 74 20 74 68 65 20 73 75 6d 20  present the sum 
5730: 6f 66 20 61 6c 6c 20 74 79 70 65 73 20 53 51 4c  of all types SQL
5740: 69 74 65 0a 20 20 2f 2f 2f 20 75 6e 64 65 72 73  ite.  /// unders
5750: 74 61 6e 64 73 2e 20 20 54 68 65 20 44 61 74 65  tands.  The Date
5760: 54 69 6d 65 20 65 78 74 65 6e 73 69 6f 6e 20 74  Time extension t
5770: 6f 20 74 68 65 20 73 70 65 63 20 69 73 20 66 6f  o the spec is fo
5780: 72 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 20 6f  r internal use o
5790: 6e 6c 79 2e 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d  nly..  /// </sum
57a0: 6d 61 72 79 3e 0a 20 20 70 75 62 6c 69 63 20 65  mary>.  public e
57b0: 6e 75 6d 20 54 79 70 65 41 66 66 69 6e 69 74 79  num TypeAffinity
57c0: 0a 20 20 7b 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  .  {.    /// <su
57d0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 4e  mmary>.    /// N
57e0: 6f 74 20 75 73 65 64 0a 20 20 20 20 2f 2f 2f 20  ot used.    /// 
57f0: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 55  </summary>.    U
5800: 6e 69 6e 69 74 69 61 6c 69 7a 65 64 20 3d 20 30  ninitialized = 0
5810: 2c 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ,.    /// <summa
5820: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 41 6c 6c 20  ry>.    /// All 
5830: 69 6e 74 65 67 65 72 73 20 69 6e 20 53 51 4c 69  integers in SQLi
5840: 74 65 20 64 65 66 61 75 6c 74 20 74 6f 20 49 6e  te default to In
5850: 74 36 34 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  t64.    /// </su
5860: 6d 6d 61 72 79 3e 0a 20 20 20 20 49 6e 74 36 34  mmary>.    Int64
5870: 20 3d 20 31 2c 0a 20 20 20 20 2f 2f 2f 20 3c 73   = 1,.    /// <s
5880: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
5890: 41 6c 6c 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  All floating poi
58a0: 6e 74 20 6e 75 6d 62 65 72 73 20 69 6e 20 53 51  nt numbers in SQ
58b0: 4c 69 74 65 20 64 65 66 61 75 6c 74 20 74 6f 20  Lite default to 
58c0: 64 6f 75 62 6c 65 0a 20 20 20 20 2f 2f 2f 20 3c  double.    /// <
58d0: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 44 6f  /summary>.    Do
58e0: 75 62 6c 65 20 3d 20 32 2c 0a 20 20 20 20 2f 2f  uble = 2,.    //
58f0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
5900: 2f 2f 2f 20 54 68 65 20 64 65 66 61 75 6c 74 20  /// The default 
5910: 64 61 74 61 20 74 79 70 65 20 6f 66 20 53 51 4c  data type of SQL
5920: 69 74 65 20 69 73 20 74 65 78 74 0a 20 20 20 20  ite is text.    
5930: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
5940: 20 20 20 54 65 78 74 20 3d 20 33 2c 0a 20 20 20     Text = 3,.   
5950: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
5960: 20 20 20 2f 2f 2f 20 54 79 70 69 63 61 6c 6c 79     /// Typically
5970: 20 62 6c 6f 62 20 74 79 70 65 73 20 61 72 65 20   blob types are 
5980: 6f 6e 6c 79 20 73 65 65 6e 20 77 68 65 6e 20 72  only seen when r
5990: 65 74 75 72 6e 65 64 20 66 72 6f 6d 20 61 20 66  eturned from a f
59a0: 75 6e 63 74 69 6f 6e 0a 20 20 20 20 2f 2f 2f 20  unction.    /// 
59b0: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 42  </summary>.    B
59c0: 6c 6f 62 20 3d 20 34 2c 0a 20 20 20 20 2f 2f 2f  lob = 4,.    ///
59d0: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
59e0: 2f 2f 20 4e 75 6c 6c 20 74 79 70 65 73 20 63 61  // Null types ca
59f0: 6e 20 62 65 20 72 65 74 75 72 6e 65 64 20 66 72  n be returned fr
5a00: 6f 6d 20 66 75 6e 63 74 69 6f 6e 73 0a 20 20 20  om functions.   
5a10: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
5a20: 20 20 20 20 4e 75 6c 6c 20 3d 20 35 2c 0a 20 20      Null = 5,.  
5a30: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
5a40: 20 20 20 20 2f 2f 2f 20 55 73 65 64 20 69 6e 74      /// Used int
5a50: 65 72 6e 61 6c 6c 79 20 62 79 20 74 68 69 73 20  ernally by this 
5a60: 70 72 6f 76 69 64 65 72 0a 20 20 20 20 2f 2f 2f  provider.    ///
5a70: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
5a80: 44 61 74 65 54 69 6d 65 20 3d 20 31 30 2c 0a 20  DateTime = 10,. 
5a90: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
5aa0: 0a 20 20 20 20 2f 2f 2f 20 55 73 65 64 20 69 6e  .    /// Used in
5ab0: 74 65 72 6e 61 6c 6c 79 0a 20 20 20 20 2f 2f 2f  ternally.    ///
5ac0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
5ad0: 4e 6f 6e 65 20 3d 20 31 31 2c 0a 20 20 7d 0a 0a  None = 11,.  }..
5ae0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
5af0: 20 20 2f 2f 2f 20 54 68 69 73 20 69 6d 70 6c 65    /// This imple
5b00: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 53 51 4c  mentation of SQL
5b10: 69 74 65 20 66 6f 72 20 41 44 4f 2e 4e 45 54 20  ite for ADO.NET 
5b20: 63 61 6e 20 70 72 6f 63 65 73 73 20 64 61 74 65  can process date
5b30: 2f 74 69 6d 65 20 66 69 65 6c 64 73 20 69 6e 20  /time fields in 
5b40: 64 61 74 61 62 61 73 65 73 20 69 6e 20 6f 6e 6c  databases in onl
5b50: 79 20 6f 6e 65 20 6f 66 20 74 68 72 65 65 20 66  y one of three f
5b60: 6f 72 6d 61 74 73 2e 20 20 54 69 63 6b 73 2c 20  ormats.  Ticks, 
5b70: 49 53 4f 38 36 30 31 0a 20 20 2f 2f 2f 20 61 6e  ISO8601.  /// an
5b80: 64 20 4a 75 6c 69 61 6e 44 61 79 2e 0a 20 20 2f  d JulianDay..  /
5b90: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
5ba0: 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0a 20 20  /// <remarks>.  
5bb0: 2f 2f 2f 20 49 53 4f 38 36 30 31 20 69 73 20 6d  /// ISO8601 is m
5bc0: 6f 72 65 20 63 6f 6d 70 61 74 69 62 6c 65 2c 20  ore compatible, 
5bd0: 72 65 61 64 61 62 6c 65 2c 20 66 75 6c 6c 79 2d  readable, fully-
5be0: 70 72 6f 63 65 73 73 61 62 6c 65 2c 20 62 75 74  processable, but
5bf0: 20 6c 65 73 73 20 61 63 63 75 72 61 74 65 20 61   less accurate a
5c00: 73 20 69 74 20 64 6f 65 73 6e 27 74 20 70 72 6f  s it doesn't pro
5c10: 76 69 64 65 20 74 69 6d 65 20 64 6f 77 6e 20 74  vide time down t
5c20: 6f 20 66 72 61 63 74 69 6f 6e 73 20 6f 66 20 61  o fractions of a
5c30: 20 73 65 63 6f 6e 64 2e 0a 20 20 2f 2f 2f 20 4a   second..  /// J
5c40: 75 6c 69 61 6e 44 61 79 20 69 73 20 74 68 65 20  ulianDay is the 
5c50: 6e 75 6d 65 72 69 63 20 66 6f 72 6d 61 74 20 74  numeric format t
5c60: 68 65 20 53 51 4c 69 74 65 20 75 73 65 73 20 69  he SQLite uses i
5c70: 6e 74 65 72 6e 61 6c 6c 79 20 61 6e 64 20 69 73  nternally and is
5c80: 20 61 72 67 75 61 62 6c 79 20 74 68 65 20 6d 6f   arguably the mo
5c90: 73 74 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 69  st compatible wi
5ca0: 74 68 20 33 72 64 20 70 61 72 74 79 20 74 6f 6f  th 3rd party too
5cb0: 6c 73 2e 20 20 49 74 20 69 73 0a 20 20 2f 2f 2f  ls.  It is.  ///
5cc0: 20 6e 6f 74 20 72 65 61 64 61 62 6c 65 20 61 73   not readable as
5cd0: 20 74 65 78 74 20 77 69 74 68 6f 75 74 20 70 6f   text without po
5ce0: 73 74 2d 70 72 6f 63 65 73 73 69 6e 67 2e 0a 20  st-processing.. 
5cf0: 20 2f 2f 2f 20 54 69 63 6b 73 20 6c 65 73 73 20   /// Ticks less 
5d00: 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20  compatible with 
5d10: 33 72 64 20 70 61 72 74 79 20 74 6f 6f 6c 73 20  3rd party tools 
5d20: 74 68 61 74 20 71 75 65 72 79 20 74 68 65 20 64  that query the d
5d30: 61 74 61 62 61 73 65 2c 20 61 6e 64 20 72 65 6e  atabase, and ren
5d40: 64 65 72 73 20 74 68 65 20 44 61 74 65 54 69 6d  ders the DateTim
5d50: 65 20 66 69 65 6c 64 20 75 6e 72 65 61 64 61 62  e field unreadab
5d60: 6c 65 20 61 73 20 74 65 78 74 20 77 69 74 68 6f  le as text witho
5d70: 75 74 20 70 6f 73 74 2d 70 72 6f 63 65 73 73 69  ut post-processi
5d80: 6e 67 2e 0a 20 20 2f 2f 2f 20 0a 20 20 2f 2f 2f  ng..  /// .  ///
5d90: 20 54 68 65 20 70 72 65 66 65 72 72 65 64 20 6f   The preferred o
5da0: 72 64 65 72 20 6f 66 20 63 68 6f 6f 73 69 6e 67  rder of choosing
5db0: 20 61 20 64 61 74 65 74 69 6d 65 20 66 6f 72 6d   a datetime form
5dc0: 61 74 20 69 73 20 4a 75 6c 69 61 6e 44 61 79 2c  at is JulianDay,
5dd0: 20 49 53 4f 38 36 30 31 2c 20 61 6e 64 20 74 68   ISO8601, and th
5de0: 65 6e 20 54 69 63 6b 73 2e 20 20 54 69 63 6b 73  en Ticks.  Ticks
5df0: 20 69 73 20 6d 61 69 6e 6c 79 20 70 72 65 73 65   is mainly prese
5e00: 6e 74 20 66 6f 72 20 6c 65 67 61 63 79 20 0a 20  nt for legacy . 
5e10: 20 2f 2f 2f 20 63 6f 64 65 20 73 75 70 70 6f 72   /// code suppor
5e20: 74 2e 0a 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72  t..  /// </remar
5e30: 6b 73 3e 0a 20 20 70 75 62 6c 69 63 20 65 6e 75  ks>.  public enu
5e40: 6d 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  m SQLiteDateForm
5e50: 61 74 73 0a 20 20 7b 0a 20 20 20 20 2f 2f 2f 20  ats.  {.    /// 
5e60: 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  <summary>.    //
5e70: 2f 20 55 73 69 6e 67 20 74 69 63 6b 73 20 69 73  / Using ticks is
5e80: 20 6e 6f 74 20 72 65 63 6f 6d 6d 65 6e 64 65 64   not recommended
5e90: 20 61 6e 64 20 69 73 20 6e 6f 74 20 77 65 6c 6c   and is not well
5ea0: 20 73 75 70 70 6f 72 74 65 64 20 77 69 74 68 20   supported with 
5eb0: 4c 49 4e 51 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f  LINQ..    /// </
5ec0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 54 69 63  summary>.    Tic
5ed0: 6b 73 20 3d 20 30 2c 0a 20 20 20 20 2f 2f 2f 20  ks = 0,.    /// 
5ee0: 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  <summary>.    //
5ef0: 2f 20 54 68 65 20 64 65 66 61 75 6c 74 20 66 6f  / The default fo
5f00: 72 6d 61 74 20 66 6f 72 20 74 68 69 73 20 70 72  rmat for this pr
5f10: 6f 76 69 64 65 72 2e 0a 20 20 20 20 2f 2f 2f 20  ovider..    /// 
5f20: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 49  </summary>.    I
5f30: 53 4f 38 36 30 31 20 3d 20 31 2c 0a 20 20 20 20  SO8601 = 1,.    
5f40: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
5f50: 20 20 2f 2f 2f 20 4a 75 6c 69 61 6e 44 61 79 20    /// JulianDay 
5f60: 66 6f 72 6d 61 74 2c 20 77 68 69 63 68 20 69 73  format, which is
5f70: 20 77 68 61 74 20 53 51 4c 69 74 65 20 75 73 65   what SQLite use
5f80: 73 20 69 6e 74 65 72 6e 61 6c 6c 79 0a 20 20 20  s internally.   
5f90: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
5fa0: 20 20 20 20 4a 75 6c 69 61 6e 44 61 79 20 3d 20      JulianDay = 
5fb0: 32 0a 20 20 7d 0a 0a 20 20 2f 2f 2f 20 3c 73 75  2.  }..  /// <su
5fc0: 6d 6d 61 72 79 3e 0a 20 20 2f 2f 2f 20 54 68 69  mmary>.  /// Thi
5fd0: 73 20 65 6e 75 6d 20 64 65 74 65 72 6d 69 6e 65  s enum determine
5fe0: 73 20 68 6f 77 20 53 51 4c 69 74 65 20 74 72 65  s how SQLite tre
5ff0: 61 74 73 20 69 74 73 20 6a 6f 75 72 6e 61 6c 20  ats its journal 
6000: 66 69 6c 65 2e 0a 20 20 2f 2f 2f 20 3c 2f 73 75  file..  /// </su
6010: 6d 6d 61 72 79 3e 0a 20 20 2f 2f 2f 20 3c 72 65  mmary>.  /// <re
6020: 6d 61 72 6b 73 3e 0a 20 20 2f 2f 2f 20 42 79 20  marks>.  /// By 
6030: 64 65 66 61 75 6c 74 20 53 51 4c 69 74 65 20 77  default SQLite w
6040: 69 6c 6c 20 63 72 65 61 74 65 20 61 6e 64 20 64  ill create and d
6050: 65 6c 65 74 65 20 74 68 65 20 6a 6f 75 72 6e 61  elete the journa
6060: 6c 20 66 69 6c 65 20 77 68 65 6e 20 6e 65 65 64  l file when need
6070: 65 64 20 64 75 72 69 6e 67 20 61 20 74 72 61 6e  ed during a tran
6080: 73 61 63 74 69 6f 6e 2e 0a 20 20 2f 2f 2f 20 48  saction..  /// H
6090: 6f 77 65 76 65 72 2c 20 66 6f 72 20 73 6f 6d 65  owever, for some
60a0: 20 63 6f 6d 70 75 74 65 72 73 20 72 75 6e 6e 69   computers runni
60b0: 6e 67 20 63 65 72 74 61 69 6e 20 66 69 6c 65 73  ng certain files
60c0: 79 73 74 65 6d 20 6d 6f 6e 69 74 6f 72 69 6e 67  ystem monitoring
60d0: 20 74 6f 6f 6c 73 2c 20 74 68 65 20 72 61 70 69   tools, the rapi
60e0: 64 0a 20 20 2f 2f 2f 20 63 72 65 61 74 69 6f 6e  d.  /// creation
60f0: 20 61 6e 64 20 64 65 6c 65 74 69 6f 6e 20 6f 66   and deletion of
6100: 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c   the journal fil
6110: 65 20 63 61 6e 20 63 61 75 73 65 20 74 68 6f 73  e can cause thos
6120: 65 20 70 72 6f 67 72 61 6d 73 20 74 6f 20 66 61  e programs to fa
6130: 69 6c 2c 20 6f 72 20 74 6f 20 69 6e 74 65 72 66  il, or to interf
6140: 65 72 65 20 77 69 74 68 20 53 51 4c 69 74 65 2e  ere with SQLite.
6150: 0a 20 20 2f 2f 2f 20 0a 20 20 2f 2f 2f 20 49 66  .  /// .  /// If
6160: 20 61 20 70 72 6f 67 72 61 6d 20 6f 72 20 76 69   a program or vi
6170: 72 75 73 20 73 63 61 6e 6e 65 72 20 69 73 20 69  rus scanner is i
6180: 6e 74 65 72 66 65 72 69 6e 67 20 77 69 74 68 20  nterfering with 
6190: 53 51 4c 69 74 65 27 73 20 6a 6f 75 72 6e 61 6c  SQLite's journal
61a0: 20 66 69 6c 65 2c 20 79 6f 75 20 6d 61 79 20 72   file, you may r
61b0: 65 63 65 69 76 65 20 65 72 72 6f 72 73 20 6c 69  eceive errors li
61c0: 6b 65 20 22 75 6e 61 62 6c 65 20 74 6f 20 6f 70  ke "unable to op
61d0: 65 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  en database file
61e0: 22 0a 20 20 2f 2f 2f 20 77 68 65 6e 20 73 74 61  ".  /// when sta
61f0: 72 74 69 6e 67 20 61 20 74 72 61 6e 73 61 63 74  rting a transact
6200: 69 6f 6e 2e 20 20 49 66 20 74 68 69 73 20 69 73  ion.  If this is
6210: 20 68 61 70 70 65 6e 69 6e 67 2c 20 79 6f 75 20   happening, you 
6220: 6d 61 79 20 77 61 6e 74 20 74 6f 20 63 68 61 6e  may want to chan
6230: 67 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 6a  ge the default j
6240: 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 74 6f 20 50  ournal mode to P
6250: 65 72 73 69 73 74 2e 0a 20 20 2f 2f 2f 20 3c 2f  ersist..  /// </
6260: 72 65 6d 61 72 6b 73 3e 0a 20 20 70 75 62 6c 69  remarks>.  publi
6270: 63 20 65 6e 75 6d 20 53 51 4c 69 74 65 4a 6f 75  c enum SQLiteJou
6280: 72 6e 61 6c 4d 6f 64 65 45 6e 75 6d 0a 20 20 7b  rnalModeEnum.  {
6290: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
62a0: 79 3e 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 64  y>.    /// The d
62b0: 65 66 61 75 6c 74 20 6d 6f 64 65 2c 20 74 68 69  efault mode, thi
62c0: 73 20 63 61 75 73 65 73 20 53 51 4c 69 74 65 20  s causes SQLite 
62d0: 74 6f 20 63 72 65 61 74 65 20 61 6e 64 20 64 65  to create and de
62e0: 73 74 72 6f 79 20 74 68 65 20 6a 6f 75 72 6e 61  stroy the journa
62f0: 6c 20 66 69 6c 65 20 61 73 2d 6e 65 65 64 65 64  l file as-needed
6300: 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
6310: 61 72 79 3e 0a 20 20 20 20 44 65 6c 65 74 65 20  ary>.    Delete 
6320: 3d 20 30 2c 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  = 0,.    /// <su
6330: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 57  mmary>.    /// W
6340: 68 65 6e 20 74 68 69 73 20 69 73 20 73 65 74 2c  hen this is set,
6350: 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 6b 65 65   SQLite will kee
6360: 70 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69  p the journal fi
6370: 6c 65 20 65 76 65 6e 20 61 66 74 65 72 20 61 20  le even after a 
6380: 74 72 61 6e 73 61 63 74 69 6f 6e 20 68 61 73 20  transaction has 
6390: 63 6f 6d 70 6c 65 74 65 64 2e 20 20 49 74 27 73  completed.  It's
63a0: 20 63 6f 6e 74 65 6e 74 73 20 77 69 6c 6c 20 62   contents will b
63b0: 65 20 65 72 61 73 65 64 2c 0a 20 20 20 20 2f 2f  e erased,.    //
63c0: 2f 20 61 6e 64 20 74 68 65 20 6a 6f 75 72 6e 61  / and the journa
63d0: 6c 20 72 65 2d 75 73 65 64 20 61 73 20 6f 66 74  l re-used as oft
63e0: 65 6e 20 61 73 20 6e 65 65 64 65 64 2e 20 20 49  en as needed.  I
63f0: 66 20 69 74 20 69 73 20 64 65 6c 65 74 65 64 2c  f it is deleted,
6400: 20 69 74 20 77 69 6c 6c 20 62 65 20 72 65 63 72   it will be recr
6410: 65 61 74 65 64 20 74 68 65 20 6e 65 78 74 20 74  eated the next t
6420: 69 6d 65 20 69 74 20 69 73 20 6e 65 65 64 65 64  ime it is needed
6430: 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
6440: 61 72 79 3e 0a 20 20 20 20 50 65 72 73 69 73 74  ary>.    Persist
6450: 20 3d 20 31 2c 0a 20 20 20 20 2f 2f 2f 20 3c 73   = 1,.    /// <s
6460: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
6470: 54 68 69 73 20 6f 70 74 69 6f 6e 20 64 69 73 61  This option disa
6480: 62 6c 65 73 20 74 68 65 20 72 6f 6c 6c 62 61 63  bles the rollbac
6490: 6b 20 6a 6f 75 72 6e 61 6c 20 65 6e 74 69 72 65  k journal entire
64a0: 6c 79 2e 20 20 49 6e 74 65 72 72 75 70 74 65 64  ly.  Interrupted
64b0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 6f 72   transactions or
64c0: 20 61 20 70 72 6f 67 72 61 6d 20 63 72 61 73 68   a program crash
64d0: 20 63 61 6e 20 63 61 75 73 65 20 64 61 74 61 62   can cause datab
64e0: 61 73 65 0a 20 20 20 20 2f 2f 2f 20 63 6f 72 72  ase.    /// corr
64f0: 75 70 74 69 6f 6e 20 69 6e 20 74 68 69 73 20 6d  uption in this m
6500: 6f 64 65 21 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ode!.    /// </s
6510: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 4f 66 66 20  ummary>.    Off 
6520: 3d 20 32 0a 20 20 7d 0a 0a 20 20 2f 2f 2f 20 3c  = 2.  }..  /// <
6530: 73 75 6d 6d 61 72 79 3e 0a 20 20 2f 2f 2f 20 53  summary>.  /// S
6540: 74 72 75 63 74 20 75 73 65 64 20 69 6e 74 65 72  truct used inter
6550: 6e 61 6c 6c 79 20 74 6f 20 64 65 74 65 72 6d 69  nally to determi
6560: 6e 65 20 74 68 65 20 64 61 74 61 74 79 70 65 20  ne the datatype 
6570: 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  of a column in a
6580: 20 72 65 73 75 6c 74 73 65 74 0a 20 20 2f 2f 2f   resultset.  ///
6590: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 69 6e   </summary>.  in
65a0: 74 65 72 6e 61 6c 20 63 6c 61 73 73 20 53 51 4c  ternal class SQL
65b0: 69 74 65 54 79 70 65 0a 20 20 7b 0a 20 20 20 20  iteType.  {.    
65c0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
65d0: 20 20 2f 2f 2f 20 54 68 65 20 44 62 54 79 70 65    /// The DbType
65e0: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20   of the column, 
65f0: 6f 72 20 44 62 54 79 70 65 2e 4f 62 6a 65 63 74  or DbType.Object
6600: 20 69 66 20 69 74 20 63 61 6e 6e 6f 74 20 62 65   if it cannot be
6610: 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20 20 20   determined.    
6620: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
6630: 20 20 20 69 6e 74 65 72 6e 61 6c 20 44 62 54 79     internal DbTy
6640: 70 65 20 54 79 70 65 3b 0a 20 20 20 20 2f 2f 2f  pe Type;.    ///
6650: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
6660: 2f 2f 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  // The affinity 
6670: 6f 66 20 61 20 63 6f 6c 75 6d 6e 2c 20 75 73 65  of a column, use
6680: 64 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e  d for expression
6690: 73 20 6f 72 20 77 68 65 6e 20 54 79 70 65 20 69  s or when Type i
66a0: 73 20 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 0a  s DbType.Object.
66b0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
66c0: 79 3e 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  y>.    internal 
66d0: 54 79 70 65 41 66 66 69 6e 69 74 79 20 41 66 66  TypeAffinity Aff
66e0: 69 6e 69 74 79 3b 0a 20 20 7d 0a 0a 20 20 69 6e  inity;.  }..  in
66f0: 74 65 72 6e 61 6c 20 73 74 72 75 63 74 20 53 51  ternal struct SQ
6700: 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 0a 20 20  LiteTypeNames.  
6710: 7b 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53  {.    internal S
6720: 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 73  QLiteTypeNames(s
6730: 74 72 69 6e 67 20 6e 65 77 74 79 70 65 4e 61 6d  tring newtypeNam
6740: 65 2c 20 44 62 54 79 70 65 20 6e 65 77 64 61 74  e, DbType newdat
6750: 61 54 79 70 65 29 0a 20 20 20 20 7b 0a 20 20 20  aType).    {.   
6760: 20 20 20 74 79 70 65 4e 61 6d 65 20 3d 20 6e 65     typeName = ne
6770: 77 74 79 70 65 4e 61 6d 65 3b 0a 20 20 20 20 20  wtypeName;.     
6780: 20 64 61 74 61 54 79 70 65 20 3d 20 6e 65 77 64   dataType = newd
6790: 61 74 61 54 79 70 65 3b 0a 20 20 20 20 7d 0a 0a  ataType;.    }..
67a0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 72      internal str
67b0: 69 6e 67 20 74 79 70 65 4e 61 6d 65 3b 0a 20 20  ing typeName;.  
67c0: 20 20 69 6e 74 65 72 6e 61 6c 20 44 62 54 79 70    internal DbTyp
67d0: 65 20 64 61 74 61 54 79 70 65 3b 0a 20 20 7d 0a  e dataType;.  }.
67e0: 7d 0a                                            }.