System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 2034bbc2dfa38bf1cf404b09c5005bd5cd824408:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 41 44 4f  *********. * ADO
0040: 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50 72  .NET 2.0 Data Pr
0050: 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69 74  ovider for SQLit
0060: 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0a 20 2a  e Version 3.X. *
0070: 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f 62 65   Written by Robe
0080: 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f 62 65  rt Simpson (robe
0090: 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65 73 6f  rt@blackcastleso
00a0: 66 74 2e 63 6f 6d 29 0a 20 2a 20 0a 20 2a 20 52  ft.com). * . * R
00b0: 65 6c 65 61 73 65 64 20 74 6f 20 74 68 65 20 70  eleased to the p
00c0: 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c 20 75 73  ublic domain, us
00d0: 65 20 61 74 20 79 6f 75 72 20 6f 77 6e 20 72 69  e at your own ri
00e0: 73 6b 21 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  sk!. ***********
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 2f 0a 0a  *************/..
0120: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
0130: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0a 6e  MPACTFRAMEWORK.n
0140: 61 6d 65 73 70 61 63 65 20 53 79 73 74 65 6d 2e  amespace System.
0150: 44 61 74 61 2e 53 51 4c 69 74 65 0a 7b 0a 20 20  Data.SQLite.{.  
0160: 75 73 69 6e 67 20 53 79 73 74 65 6d 3b 0a 20 20  using System;.  
0170: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74  using System.Dat
0180: 61 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65  a;.  using Syste
0190: 6d 2e 44 61 74 61 2e 43 6f 6d 6d 6f 6e 3b 0a 20  m.Data.Common;. 
01a0: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 54 72   using System.Tr
01b0: 61 6e 73 61 63 74 69 6f 6e 73 3b 0a 0a 20 20 69  ansactions;..  i
01c0: 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73 20 53 51  nternal class SQ
01d0: 4c 69 74 65 45 6e 6c 69 73 74 6d 65 6e 74 20 3a  LiteEnlistment :
01e0: 20 49 45 6e 6c 69 73 74 6d 65 6e 74 4e 6f 74 69   IEnlistmentNoti
01f0: 66 69 63 61 74 69 6f 6e 0a 20 20 7b 0a 20 20 20  fication.  {.   
0200: 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 54   private SQLiteT
0210: 72 61 6e 73 61 63 74 69 6f 6e 20 5f 74 72 61 6e  ransaction _tran
0220: 73 61 63 74 69 6f 6e 3b 0a 0a 20 20 20 20 69 6e  saction;..    in
0230: 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 45 6e 6c  ternal SQLiteEnl
0240: 69 73 74 6d 65 6e 74 28 53 51 4c 69 74 65 43 6f  istment(SQLiteCo
0250: 6e 6e 65 63 74 69 6f 6e 20 63 6e 6e 29 0a 20 20  nnection cnn).  
0260: 20 20 7b 0a 20 20 20 20 20 20 5f 74 72 61 6e 73    {.      _trans
0270: 61 63 74 69 6f 6e 20 3d 20 63 6e 6e 2e 42 65 67  action = cnn.Beg
0280: 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 29 3b  inTransaction();
0290: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 72 65 67  .    }..    #reg
02a0: 69 6f 6e 20 49 45 6e 6c 69 73 74 6d 65 6e 74 4e  ion IEnlistmentN
02b0: 6f 74 69 66 69 63 61 74 69 6f 6e 20 4d 65 6d 62  otification Memb
02c0: 65 72 73 0a 0a 20 20 20 20 70 75 62 6c 69 63 20  ers..    public 
02d0: 76 6f 69 64 20 43 6f 6d 6d 69 74 28 45 6e 6c 69  void Commit(Enli
02e0: 73 74 6d 65 6e 74 20 65 6e 6c 69 73 74 6d 65 6e  stment enlistmen
02f0: 74 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 5f  t).    {.      _
0300: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 43 6f 6e 6e  transaction.Conn
0310: 65 63 74 69 6f 6e 2e 5f 65 6e 6c 69 73 74 6d 65  ection._enlistme
0320: 6e 74 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20  nt = null;.     
0330: 20 74 72 79 0a 20 20 20 20 20 20 7b 0a 20 20 20   try.      {.   
0340: 20 20 20 20 20 5f 74 72 61 6e 73 61 63 74 69 6f       _transactio
0350: 6e 2e 49 73 56 61 6c 69 64 28 29 3b 0a 20 20 20  n.IsValid();.   
0360: 20 20 20 20 20 5f 74 72 61 6e 73 61 63 74 69 6f       _transactio
0370: 6e 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 74 72  n.Connection._tr
0380: 61 6e 73 61 63 74 69 6f 6e 4c 65 76 65 6c 20 3d  ansactionLevel =
0390: 20 31 3b 0a 20 20 20 20 20 20 20 20 5f 74 72 61   1;.        _tra
03a0: 6e 73 61 63 74 69 6f 6e 2e 43 6f 6d 6d 69 74 28  nsaction.Commit(
03b0: 29 3b 0a 0a 20 20 20 20 20 20 20 20 65 6e 6c 69  );..        enli
03c0: 73 74 6d 65 6e 74 2e 44 6f 6e 65 28 29 3b 0a 20  stment.Done();. 
03d0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 66 69 6e       }.      fin
03e0: 61 6c 6c 79 0a 20 20 20 20 20 20 7b 0a 20 20 20  ally.      {.   
03f0: 20 20 20 20 20 5f 74 72 61 6e 73 61 63 74 69 6f       _transactio
0400: 6e 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  n = null;.      
0410: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 75 62  }.    }..    pub
0420: 6c 69 63 20 76 6f 69 64 20 49 6e 44 6f 75 62 74  lic void InDoubt
0430: 28 45 6e 6c 69 73 74 6d 65 6e 74 20 65 6e 6c 69  (Enlistment enli
0440: 73 74 6d 65 6e 74 29 0a 20 20 20 20 7b 0a 20 20  stment).    {.  
0450: 20 20 20 20 65 6e 6c 69 73 74 6d 65 6e 74 2e 44      enlistment.D
0460: 6f 6e 65 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  one();.    }..  
0470: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 50 72    public void Pr
0480: 65 70 61 72 65 28 50 72 65 70 61 72 69 6e 67 45  epare(PreparingE
0490: 6e 6c 69 73 74 6d 65 6e 74 20 70 72 65 70 61 72  nlistment prepar
04a0: 69 6e 67 45 6e 6c 69 73 74 6d 65 6e 74 29 0a 20  ingEnlistment). 
04b0: 20 20 20 7b 0a 20 20 20 20 20 20 74 72 79 0a 20     {.      try. 
04c0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 5f       {.        _
04d0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 49 73 56 61  transaction.IsVa
04e0: 6c 69 64 28 29 3b 0a 20 20 20 20 20 20 7d 0a 20  lid();.      }. 
04f0: 20 20 20 20 20 63 61 74 63 68 28 45 78 63 65 70       catch(Excep
0500: 74 69 6f 6e 20 65 29 0a 20 20 20 20 20 20 7b 0a  tion e).      {.
0510: 20 20 20 20 20 20 20 20 70 72 65 70 61 72 69 6e          preparin
0520: 67 45 6e 6c 69 73 74 6d 65 6e 74 2e 46 6f 72 63  gEnlistment.Forc
0530: 65 52 6f 6c 6c 62 61 63 6b 28 65 29 3b 0a 20 20  eRollback(e);.  
0540: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20        return;.  
0550: 20 20 20 20 7d 0a 20 20 20 20 20 20 70 72 65 70      }.      prep
0560: 61 72 69 6e 67 45 6e 6c 69 73 74 6d 65 6e 74 2e  aringEnlistment.
0570: 50 72 65 70 61 72 65 64 28 29 3b 0a 20 20 20 20  Prepared();.    
0580: 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 76 6f  }..    public vo
0590: 69 64 20 52 6f 6c 6c 62 61 63 6b 28 45 6e 6c 69  id Rollback(Enli
05a0: 73 74 6d 65 6e 74 20 65 6e 6c 69 73 74 6d 65 6e  stment enlistmen
05b0: 74 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 5f  t).    {.      _
05c0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 43 6f 6e 6e  transaction.Conn
05d0: 65 63 74 69 6f 6e 2e 5f 65 6e 6c 69 73 74 6d 65  ection._enlistme
05e0: 6e 74 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20  nt = null;.     
05f0: 20 74 72 79 0a 20 20 20 20 20 20 7b 0a 20 20 20   try.      {.   
0600: 20 20 20 20 20 5f 74 72 61 6e 73 61 63 74 69 6f       _transactio
0610: 6e 2e 52 6f 6c 6c 62 61 63 6b 28 29 3b 0a 20 20  n.Rollback();.  
0620: 20 20 20 20 20 20 65 6e 6c 69 73 74 6d 65 6e 74        enlistment
0630: 2e 44 6f 6e 65 28 29 3b 0a 20 20 20 20 20 20 7d  .Done();.      }
0640: 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0a 20  .      finally. 
0650: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 5f       {.        _
0660: 74 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 6e 75  transaction = nu
0670: 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ll;.      }.    
0680: 7d 0a 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
0690: 6e 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 20 2f  n.  }.}.#endif /
06a0: 2f 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  / !PLATFORM_COMP
06b0: 41 43 54 5f 46 52 41 4d 45 57 4f 52 4b           ACT_FRAMEWORK