System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact e8157d9181d1ce3d85ea91db6e79bc368721d8aa:


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: 6e 61 6d 65 73 70 61 63 65 20 53 51 4c 69 74 65  namespace SQLite
0130: 2e 44 65 73 69 67 6e 65 72 2e 44 65 73 69 67 6e  .Designer.Design
0140: 0a 7b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65  .{.  using Syste
0150: 6d 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65  m;.  using Syste
0160: 6d 2e 44 61 74 61 2e 43 6f 6d 6d 6f 6e 3b 0a 20  m.Data.Common;. 
0170: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 43 6f   using System.Co
0180: 6d 70 6f 6e 65 6e 74 4d 6f 64 65 6c 2e 44 65 73  mponentModel.Des
0190: 69 67 6e 3b 0a 20 20 75 73 69 6e 67 20 53 79 73  ign;.  using Sys
01a0: 74 65 6d 2e 43 6f 6d 70 6f 6e 65 6e 74 4d 6f 64  tem.ComponentMod
01b0: 65 6c 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74  el;.  using Syst
01c0: 65 6d 2e 44 72 61 77 69 6e 67 2e 44 65 73 69 67  em.Drawing.Desig
01d0: 6e 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65  n;.  using Syste
01e0: 6d 2e 43 6f 6c 6c 65 63 74 69 6f 6e 73 2e 47 65  m.Collections.Ge
01f0: 6e 65 72 69 63 3b 0a 20 20 75 73 69 6e 67 20 53  neric;.  using S
0200: 79 73 74 65 6d 2e 44 61 74 61 3b 0a 20 20 75 73  ystem.Data;.  us
0210: 69 6e 67 20 53 79 73 74 65 6d 2e 54 65 78 74 3b  ing System.Text;
0220: 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e  .  using System.
0230: 47 6c 6f 62 61 6c 69 7a 61 74 69 6f 6e 3b 0a 20  Globalization;. 
0240: 20 75 73 69 6e 67 20 53 51 4c 69 74 65 2e 44 65   using SQLite.De
0250: 73 69 67 6e 65 72 2e 45 64 69 74 6f 72 73 3b 0a  signer.Editors;.
0260: 0a 20 20 69 6e 74 65 72 6e 61 6c 20 63 6c 61 73  .  internal clas
0270: 73 20 56 69 65 77 20 3a 20 56 69 65 77 54 61 62  s View : ViewTab
0280: 6c 65 42 61 73 65 2c 20 49 43 75 73 74 6f 6d 54  leBase, ICustomT
0290: 79 70 65 44 65 73 63 72 69 70 74 6f 72 0a 20 20  ypeDescriptor.  
02a0: 7b 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74  {.    private st
02b0: 72 69 6e 67 20 5f 6e 61 6d 65 3b 0a 20 20 20 20  ring _name;.    
02c0: 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 5f  private string _
02d0: 6f 6c 64 6e 61 6d 65 3b 0a 20 20 20 20 70 72 69  oldname;.    pri
02e0: 76 61 74 65 20 73 74 72 69 6e 67 20 5f 73 71 6c  vate string _sql
02f0: 3b 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74  ;.    private st
0300: 72 69 6e 67 20 5f 6f 6c 64 73 71 6c 3b 0a 20 20  ring _oldsql;.  
0310: 20 20 70 72 69 76 61 74 65 20 56 69 65 77 44 65    private ViewDe
0320: 73 69 67 6e 65 72 44 6f 63 20 5f 6f 77 6e 65 72  signerDoc _owner
0330: 3b 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74  ;.    private st
0340: 72 69 6e 67 20 5f 63 61 74 61 6c 6f 67 3b 0a 20  ring _catalog;. 
0350: 20 20 20 70 72 69 76 61 74 65 20 44 62 43 6f 6e     private DbCon
0360: 6e 65 63 74 69 6f 6e 20 5f 63 6f 6e 6e 65 63 74  nection _connect
0370: 69 6f 6e 3b 0a 20 20 20 20 4c 69 73 74 3c 56 69  ion;.    List<Vi
0380: 65 77 54 72 69 67 67 65 72 3e 20 5f 74 72 69 67  ewTrigger> _trig
0390: 67 65 72 73 20 3d 20 6e 65 77 20 4c 69 73 74 3c  gers = new List<
03a0: 56 69 65 77 54 72 69 67 67 65 72 3e 28 29 3b 0a  ViewTrigger>();.
03b0: 20 20 20 20 4c 69 73 74 3c 56 69 65 77 54 72 69      List<ViewTri
03c0: 67 67 65 72 3e 20 5f 6f 6c 64 74 72 69 67 67 65  gger> _oldtrigge
03d0: 72 73 20 3d 20 6e 65 77 20 4c 69 73 74 3c 56 69  rs = new List<Vi
03e0: 65 77 54 72 69 67 67 65 72 3e 28 29 3b 0a 0a 20  ewTrigger>();.. 
03f0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 56 69 65 77     internal View
0400: 28 73 74 72 69 6e 67 20 76 69 65 77 4e 61 6d 65  (string viewName
0410: 2c 20 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 63  , DbConnection c
0420: 6f 6e 6e 65 63 74 69 6f 6e 2c 20 56 69 65 77 44  onnection, ViewD
0430: 65 73 69 67 6e 65 72 44 6f 63 20 70 61 72 65 6e  esignerDoc paren
0440: 74 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 5f  t).    {.      _
0450: 6f 77 6e 65 72 20 3d 20 70 61 72 65 6e 74 3b 0a  owner = parent;.
0460: 20 20 20 20 20 20 5f 6e 61 6d 65 20 3d 20 76 69        _name = vi
0470: 65 77 4e 61 6d 65 3b 0a 20 20 20 20 20 20 5f 6f  ewName;.      _o
0480: 6c 64 6e 61 6d 65 20 3d 20 76 69 65 77 4e 61 6d  ldname = viewNam
0490: 65 3b 0a 20 20 20 20 20 20 5f 63 61 74 61 6c 6f  e;.      _catalo
04a0: 67 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 44  g = connection.D
04b0: 61 74 61 62 61 73 65 3b 0a 20 20 20 20 20 20 5f  atabase;.      _
04c0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 63 6f 6e  connection = con
04d0: 6e 65 63 74 69 6f 6e 3b 0a 20 20 20 20 20 20 5f  nection;.      _
04e0: 6f 77 6e 65 72 2e 4e 61 6d 65 20 3d 20 5f 6e 61  owner.Name = _na
04f0: 6d 65 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 53  me;..      if (S
0500: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
0510: 70 74 79 28 76 69 65 77 4e 61 6d 65 29 20 3d 3d  pty(viewName) ==
0520: 20 66 61 6c 73 65 29 0a 20 20 20 20 20 20 7b 0a   false).      {.
0530: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 44          using (D
0540: 61 74 61 54 61 62 6c 65 20 74 62 6c 20 3d 20 63  ataTable tbl = c
0550: 6f 6e 6e 65 63 74 69 6f 6e 2e 47 65 74 53 63 68  onnection.GetSch
0560: 65 6d 61 28 22 56 69 65 77 73 22 2c 20 6e 65 77  ema("Views", new
0570: 20 73 74 72 69 6e 67 5b 5d 20 7b 20 43 61 74 61   string[] { Cata
0580: 6c 6f 67 2c 20 6e 75 6c 6c 2c 20 4e 61 6d 65 20  log, null, Name 
0590: 7d 29 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20  })).        {.  
05a0: 20 20 20 20 20 20 20 20 69 66 20 28 74 62 6c 2e          if (tbl.
05b0: 52 6f 77 73 2e 43 6f 75 6e 74 20 3e 20 30 29 0a  Rows.Count > 0).
05c0: 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20            {.    
05d0: 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 74          _sql = t
05e0: 62 6c 2e 52 6f 77 73 5b 30 5d 5b 22 56 49 45 57  bl.Rows[0]["VIEW
05f0: 5f 44 45 46 49 4e 49 54 49 4f 4e 22 5d 2e 54 6f  _DEFINITION"].To
0600: 53 74 72 69 6e 67 28 29 3b 0a 0a 20 20 20 20 20  String();..     
0610: 20 20 20 20 20 20 20 53 74 72 69 6e 67 42 75 69         StringBui
0620: 6c 64 65 72 20 62 75 69 6c 64 65 72 20 3d 20 6e  lder builder = n
0630: 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72  ew StringBuilder
0640: 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ();.            
0650: 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 5f  builder.Append(_
0660: 73 71 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20  sql);.          
0670: 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64    builder.Append
0680: 4c 69 6e 65 28 22 3b 22 29 3b 0a 0a 20 20 20 20  Line(";");..    
0690: 20 20 20 20 20 20 20 20 5f 74 72 69 67 67 65 72          _trigger
06a0: 73 2e 43 6c 65 61 72 28 29 3b 0a 20 20 20 20 20  s.Clear();.     
06b0: 20 20 20 20 20 20 20 5f 6f 6c 64 74 72 69 67 67         _oldtrigg
06c0: 65 72 73 2e 43 6c 65 61 72 28 29 3b 0a 0a 20 20  ers.Clear();..  
06d0: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
06e0: 28 44 61 74 61 54 61 62 6c 65 20 74 74 62 6c 20  (DataTable ttbl 
06f0: 3d 20 5f 63 6f 6e 6e 65 63 74 69 6f 6e 2e 47 65  = _connection.Ge
0700: 74 53 63 68 65 6d 61 28 22 54 72 69 67 67 65 72  tSchema("Trigger
0710: 73 22 2c 20 6e 65 77 20 73 74 72 69 6e 67 5b 5d  s", new string[]
0720: 20 7b 20 43 61 74 61 6c 6f 67 2c 20 6e 75 6c 6c   { Catalog, null
0730: 2c 20 4e 61 6d 65 20 7d 29 29 0a 20 20 20 20 20  , Name })).     
0740: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
0750: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
0760: 44 61 74 61 52 6f 77 20 72 6f 77 20 69 6e 20 74  DataRow row in t
0770: 74 62 6c 2e 52 6f 77 73 29 0a 20 20 20 20 20 20  tbl.Rows).      
0780: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
0790: 20 20 20 20 20 20 20 20 20 20 56 69 65 77 54 72            ViewTr
07a0: 69 67 67 65 72 20 74 20 3d 20 6e 65 77 20 56 69  igger t = new Vi
07b0: 65 77 54 72 69 67 67 65 72 28 74 68 69 73 2c 20  ewTrigger(this, 
07c0: 72 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20  row);.          
07d0: 20 20 20 20 20 20 5f 74 72 69 67 67 65 72 73 2e        _triggers.
07e0: 41 64 64 28 74 29 3b 0a 20 20 20 20 20 20 20 20  Add(t);.        
07f0: 20 20 20 20 20 20 20 20 5f 6f 6c 64 74 72 69 67          _oldtrig
0800: 67 65 72 73 2e 41 64 64 28 28 28 49 43 6c 6f 6e  gers.Add(((IClon
0810: 65 61 62 6c 65 29 74 29 2e 43 6c 6f 6e 65 28 29  eable)t).Clone()
0820: 20 61 73 20 56 69 65 77 54 72 69 67 67 65 72 29   as ViewTrigger)
0830: 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
0840: 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e     builder.Appen
0850: 64 46 6f 72 6d 61 74 28 22 7b 30 7d 3b 5c 72 5c  dFormat("{0};\r\
0860: 6e 22 2c 20 74 2e 4f 72 69 67 69 6e 61 6c 53 71  n", t.OriginalSq
0870: 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  l);.            
0880: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
0890: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 6f  }.            _o
08a0: 6c 64 73 71 6c 20 3d 20 62 75 69 6c 64 65 72 2e  ldsql = builder.
08b0: 54 6f 53 74 72 69 6e 67 28 29 3b 0a 20 20 20 20  ToString();.    
08c0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
08d0: 20 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20 20    else.         
08e0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f   {.            _
08f0: 6f 6c 64 6e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0a  oldname = null;.
0900: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
0910: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
0920: 20 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63 20    }..    public 
0930: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 4d 61  override void Ma
0940: 6b 65 44 69 72 74 79 28 29 0a 20 20 20 20 7b 0a  keDirty().    {.
0950: 20 20 20 20 20 20 5f 6f 77 6e 65 72 2e 4d 61 6b        _owner.Mak
0960: 65 44 69 72 74 79 28 29 3b 0a 20 20 20 20 7d 0a  eDirty();.    }.
0970: 0a 20 20 20 20 5b 42 72 6f 77 73 61 62 6c 65 28  .    [Browsable(
0980: 66 61 6c 73 65 29 5d 0a 20 20 20 20 70 75 62 6c  false)].    publ
0990: 69 63 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65  ic override obje
09a0: 63 74 20 54 72 69 67 67 65 72 73 0a 20 20 20 20  ct Triggers.    
09b0: 7b 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72 65  {.      get { re
09c0: 74 75 72 6e 20 5f 74 72 69 67 67 65 72 73 3b 20  turn _triggers; 
09d0: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 75 62  }.    }..    pub
09e0: 6c 69 63 20 76 6f 69 64 20 43 6f 6d 6d 69 74 74  lic void Committ
09f0: 65 64 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  ed().    {.     
0a00: 20 5f 6f 6c 64 73 71 6c 20 3d 20 5f 73 71 6c 3b   _oldsql = _sql;
0a10: 0a 20 20 20 20 20 20 5f 6f 6c 64 6e 61 6d 65 20  .      _oldname 
0a20: 3d 20 5f 6e 61 6d 65 3b 0a 0a 20 20 20 20 20 20  = _name;..      
0a30: 5f 6f 6c 64 74 72 69 67 67 65 72 73 20 3d 20 5f  _oldtriggers = _
0a40: 74 72 69 67 67 65 72 73 3b 0a 20 20 20 20 20 20  triggers;.      
0a50: 5f 74 72 69 67 67 65 72 73 2e 43 6c 65 61 72 28  _triggers.Clear(
0a60: 29 3b 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68  );.      foreach
0a70: 20 28 56 69 65 77 54 72 69 67 67 65 72 20 74 72   (ViewTrigger tr
0a80: 69 67 20 69 6e 20 5f 6f 6c 64 74 72 69 67 67 65  ig in _oldtrigge
0a90: 72 73 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  rs).      {.    
0aa0: 20 20 20 20 5f 74 72 69 67 67 65 72 73 2e 41 64      _triggers.Ad
0ab0: 64 28 28 28 49 43 6c 6f 6e 65 61 62 6c 65 29 74  d(((ICloneable)t
0ac0: 72 69 67 29 2e 43 6c 6f 6e 65 28 29 20 61 73 20  rig).Clone() as 
0ad0: 56 69 65 77 54 72 69 67 67 65 72 29 3b 0a 20 20  ViewTrigger);.  
0ae0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20      }.    }..   
0af0: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
0b00: 20 73 74 72 69 6e 67 20 54 6f 53 74 72 69 6e 67   string ToString
0b10: 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72  ().    {.      r
0b20: 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72  eturn String.For
0b30: 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e  mat(CultureInfo.
0b40: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
0b50: 2c 20 22 5b 7b 30 7d 5d 2e 5b 7b 31 7d 5d 22 2c  , "[{0}].[{1}]",
0b60: 20 43 61 74 61 6c 6f 67 2c 20 4e 61 6d 65 29 3b   Catalog, Name);
0b70: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5b 43 61 74  .    }..    [Cat
0b80: 65 67 6f 72 79 28 22 53 74 6f 72 61 67 65 22 29  egory("Storage")
0b90: 5d 0a 20 20 20 20 5b 52 65 66 72 65 73 68 50 72  ].    [RefreshPr
0ba0: 6f 70 65 72 74 69 65 73 28 52 65 66 72 65 73 68  operties(Refresh
0bb0: 50 72 6f 70 65 72 74 69 65 73 2e 41 6c 6c 29 5d  Properties.All)]
0bc0: 0a 20 20 20 20 5b 50 61 72 65 6e 74 68 65 73 69  .    [Parenthesi
0bd0: 7a 65 50 72 6f 70 65 72 74 79 4e 61 6d 65 28 74  zePropertyName(t
0be0: 72 75 65 29 5d 0a 20 20 20 20 70 75 62 6c 69 63  rue)].    public
0bf0: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
0c00: 20 4e 61 6d 65 0a 20 20 20 20 7b 0a 20 20 20 20   Name.    {.    
0c10: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f    get { return _
0c20: 6e 61 6d 65 3b 20 7d 0a 20 20 20 20 20 20 73 65  name; }.      se
0c30: 74 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20  t.      {.      
0c40: 20 20 69 66 20 28 5f 6e 61 6d 65 20 21 3d 20 76    if (_name != v
0c50: 61 6c 75 65 29 0a 20 20 20 20 20 20 20 20 7b 0a  alue).        {.
0c60: 20 20 20 20 20 20 20 20 20 20 5f 6e 61 6d 65 20            _name 
0c70: 3d 20 76 61 6c 75 65 3b 0a 20 20 20 20 20 20 20  = value;.       
0c80: 20 20 20 5f 6f 77 6e 65 72 2e 4e 61 6d 65 20 3d     _owner.Name =
0c90: 20 76 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20   value;.        
0ca0: 20 20 5f 6f 77 6e 65 72 2e 4d 61 6b 65 44 69 72    _owner.MakeDir
0cb0: 74 79 28 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ty();.        }.
0cc0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20        }.    }.. 
0cd0: 20 20 20 5b 42 72 6f 77 73 61 62 6c 65 28 66 61     [Browsable(fa
0ce0: 6c 73 65 29 5d 0a 20 20 20 20 70 75 62 6c 69 63  lse)].    public
0cf0: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
0d00: 20 4f 6c 64 4e 61 6d 65 0a 20 20 20 20 7b 0a 20   OldName.    {. 
0d10: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
0d20: 6e 20 5f 6f 6c 64 6e 61 6d 65 3b 20 7d 0a 20 20  n _oldname; }.  
0d30: 20 20 7d 0a 0a 20 20 20 20 5b 43 61 74 65 67 6f    }..    [Catego
0d40: 72 79 28 22 53 74 6f 72 61 67 65 22 29 5d 0a 20  ry("Storage")]. 
0d50: 20 20 20 5b 45 64 69 74 6f 72 28 74 79 70 65 6f     [Editor(typeo
0d60: 66 28 43 61 74 61 6c 6f 67 54 79 70 65 45 64 69  f(CatalogTypeEdi
0d70: 74 6f 72 29 2c 20 74 79 70 65 6f 66 28 55 49 54  tor), typeof(UIT
0d80: 79 70 65 45 64 69 74 6f 72 29 29 5d 0a 20 20 20  ypeEditor))].   
0d90: 20 5b 44 65 66 61 75 6c 74 56 61 6c 75 65 28 22   [DefaultValue("
0da0: 6d 61 69 6e 22 29 5d 0a 20 20 20 20 5b 52 65 66  main")].    [Ref
0db0: 72 65 73 68 50 72 6f 70 65 72 74 69 65 73 28 52  reshProperties(R
0dc0: 65 66 72 65 73 68 50 72 6f 70 65 72 74 69 65 73  efreshProperties
0dd0: 2e 41 6c 6c 29 5d 0a 20 20 20 20 70 75 62 6c 69  .All)].    publi
0de0: 63 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  c override strin
0df0: 67 20 43 61 74 61 6c 6f 67 0a 20 20 20 20 7b 0a  g Catalog.    {.
0e00: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
0e10: 72 6e 20 5f 63 61 74 61 6c 6f 67 3b 20 7d 0a 20  rn _catalog; }. 
0e20: 20 20 20 7d 0a 0a 20 20 20 20 5b 43 61 74 65 67     }..    [Categ
0e30: 6f 72 79 28 22 53 74 6f 72 61 67 65 22 29 5d 0a  ory("Storage")].
0e40: 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
0e50: 67 20 44 61 74 61 62 61 73 65 0a 20 20 20 20 7b  g Database.    {
0e60: 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74  .      get { ret
0e70: 75 72 6e 20 5f 63 6f 6e 6e 65 63 74 69 6f 6e 2e  urn _connection.
0e80: 44 61 74 61 53 6f 75 72 63 65 3b 20 7d 0a 20 20  DataSource; }.  
0e90: 20 20 7d 0a 0a 20 20 20 20 5b 42 72 6f 77 73 61    }..    [Browsa
0ea0: 62 6c 65 28 66 61 6c 73 65 29 5d 0a 20 20 20 20  ble(false)].    
0eb0: 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 53 71  public string Sq
0ec0: 6c 54 65 78 74 0a 20 20 20 20 7b 0a 20 20 20 20  lText.    {.    
0ed0: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f    get { return _
0ee0: 73 71 6c 3b 20 7d 0a 20 20 20 20 20 20 73 65 74  sql; }.      set
0ef0: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
0f00: 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70   if (String.Comp
0f10: 61 72 65 28 5f 73 71 6c 2c 20 76 61 6c 75 65 2c  are(_sql, value,
0f20: 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
0f30: 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43  n.OrdinalIgnoreC
0f40: 61 73 65 29 20 21 3d 20 30 29 0a 20 20 20 20 20  ase) != 0).     
0f50: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 5f     {.          _
0f60: 73 71 6c 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20  sql = value;.   
0f70: 20 20 20 20 20 20 20 5f 6f 77 6e 65 72 2e 4d 61         _owner.Ma
0f80: 6b 65 44 69 72 74 79 28 29 3b 0a 20 20 20 20 20  keDirty();.     
0f90: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
0fa0: 20 7d 0a 0a 20 20 20 20 5b 42 72 6f 77 73 61 62   }..    [Browsab
0fb0: 6c 65 28 66 61 6c 73 65 29 5d 0a 20 20 20 20 70  le(false)].    p
0fc0: 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4f 72 69  ublic string Ori
0fd0: 67 69 6e 61 6c 53 71 6c 0a 20 20 20 20 7b 0a 20  ginalSql.    {. 
0fe0: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
0ff0: 6e 20 5f 6f 6c 64 73 71 6c 3b 20 7d 0a 20 20 20  n _oldsql; }.   
1000: 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 73   }..    public s
1010: 74 72 69 6e 67 20 47 65 74 53 71 6c 54 65 78 74  tring GetSqlText
1020: 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69  ().    {.      i
1030: 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72  f (String.Compar
1040: 65 28 5f 73 71 6c 2c 20 5f 6f 6c 64 73 71 6c 2c  e(_sql, _oldsql,
1050: 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
1060: 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43  n.OrdinalIgnoreC
1070: 61 73 65 29 20 3d 3d 20 30 20 26 26 20 53 74 72  ase) == 0 && Str
1080: 69 6e 67 2e 43 6f 6d 70 61 72 65 28 5f 6e 61 6d  ing.Compare(_nam
1090: 65 2c 20 5f 6f 6c 64 6e 61 6d 65 2c 20 53 74 72  e, _oldname, Str
10a0: 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
10b0: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
10c0: 20 3d 3d 20 30 29 20 72 65 74 75 72 6e 20 6e 75   == 0) return nu
10d0: 6c 6c 3b 0a 0a 20 20 20 20 20 20 53 74 72 69 6e  ll;..      Strin
10e0: 67 42 75 69 6c 64 65 72 20 62 75 69 6c 64 65 72  gBuilder builder
10f0: 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69   = new StringBui
1100: 6c 64 65 72 28 29 3b 0a 0a 20 20 20 20 20 20 69  lder();..      i
1110: 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
1120: 4f 72 45 6d 70 74 79 28 5f 6f 6c 64 6e 61 6d 65  OrEmpty(_oldname
1130: 29 20 3d 3d 20 66 61 6c 73 65 29 0a 20 20 20 20  ) == false).    
1140: 20 20 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 65    {.        fore
1150: 61 63 68 20 28 56 69 65 77 54 72 69 67 67 65 72  ach (ViewTrigger
1160: 20 74 72 69 67 20 69 6e 20 5f 6f 6c 64 74 72 69   trig in _oldtri
1170: 67 67 65 72 73 29 0a 20 20 20 20 20 20 20 20 7b  ggers).        {
1180: 0a 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64  .          build
1190: 65 72 2e 41 70 70 65 6e 64 46 6f 72 6d 61 74 28  er.AppendFormat(
11a0: 22 44 52 4f 50 20 54 52 49 47 47 45 52 20 5b 7b  "DROP TRIGGER [{
11b0: 30 7d 5d 2e 5b 7b 31 7d 5d 3b 5c 72 5c 6e 22 2c  0}].[{1}];\r\n",
11c0: 20 43 61 74 61 6c 6f 67 2c 20 74 72 69 67 2e 4e   Catalog, trig.N
11d0: 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ame);.        }.
11e0: 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e          builder.
11f0: 41 70 70 65 6e 64 46 6f 72 6d 61 74 28 22 44 52  AppendFormat("DR
1200: 4f 50 20 56 49 45 57 20 5b 7b 30 7d 5d 2e 5b 7b  OP VIEW [{0}].[{
1210: 31 7d 5d 3b 5c 72 5c 6e 22 2c 20 43 61 74 61 6c  1}];\r\n", Catal
1220: 6f 67 2c 20 5f 6f 6c 64 6e 61 6d 65 29 3b 0a 20  og, _oldname);. 
1230: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 62 75       }..      bu
1240: 69 6c 64 65 72 2e 41 70 70 65 6e 64 46 6f 72 6d  ilder.AppendForm
1250: 61 74 28 22 43 52 45 41 54 45 20 56 49 45 57 20  at("CREATE VIEW 
1260: 5b 7b 30 7d 5d 2e 5b 7b 31 7d 5d 20 41 53 20 7b  [{0}].[{1}] AS {
1270: 32 7d 3b 5c 72 5c 6e 22 2c 20 43 61 74 61 6c 6f  2};\r\n", Catalo
1280: 67 2c 20 4e 61 6d 65 2c 20 53 71 6c 54 65 78 74  g, Name, SqlText
1290: 29 3b 0a 0a 20 20 20 20 20 20 73 74 72 69 6e 67  );..      string
12a0: 20 73 65 70 20 3d 20 22 22 3b 0a 20 20 20 20 20   sep = "";.     
12b0: 20 66 6f 72 65 61 63 68 20 28 56 69 65 77 54 72   foreach (ViewTr
12c0: 69 67 67 65 72 20 74 72 69 67 20 69 6e 20 5f 74  igger trig in _t
12d0: 72 69 67 67 65 72 73 29 0a 20 20 20 20 20 20 7b  riggers).      {
12e0: 0a 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72  .        builder
12f0: 2e 41 70 70 65 6e 64 28 73 65 70 29 3b 0a 20 20  .Append(sep);.  
1300: 20 20 20 20 20 20 74 72 69 67 2e 57 72 69 74 65        trig.Write
1310: 53 71 6c 28 62 75 69 6c 64 65 72 29 3b 0a 20 20  Sql(builder);.  
1320: 20 20 20 20 20 20 73 65 70 20 3d 20 22 5c 72 5c        sep = "\r\
1330: 6e 22 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  n";.      }..   
1340: 20 20 20 72 65 74 75 72 6e 20 62 75 69 6c 64 65     return builde
1350: 72 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0a 20 20  r.ToString();.  
1360: 20 20 7d 0a 0a 20 20 20 20 23 72 65 67 69 6f 6e    }..    #region
1370: 20 49 43 75 73 74 6f 6d 54 79 70 65 44 65 73 63   ICustomTypeDesc
1380: 72 69 70 74 6f 72 20 4d 65 6d 62 65 72 73 0a 0a  riptor Members..
1390: 20 20 20 20 41 74 74 72 69 62 75 74 65 43 6f 6c      AttributeCol
13a0: 6c 65 63 74 69 6f 6e 20 49 43 75 73 74 6f 6d 54  lection ICustomT
13b0: 79 70 65 44 65 73 63 72 69 70 74 6f 72 2e 47 65  ypeDescriptor.Ge
13c0: 74 41 74 74 72 69 62 75 74 65 73 28 29 0a 20 20  tAttributes().  
13d0: 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e    {.      return
13e0: 20 54 79 70 65 44 65 73 63 72 69 70 74 6f 72 2e   TypeDescriptor.
13f0: 47 65 74 41 74 74 72 69 62 75 74 65 73 28 47 65  GetAttributes(Ge
1400: 74 54 79 70 65 28 29 29 3b 0a 20 20 20 20 7d 0a  tType());.    }.
1410: 0a 20 20 20 20 73 74 72 69 6e 67 20 49 43 75 73  .    string ICus
1420: 74 6f 6d 54 79 70 65 44 65 73 63 72 69 70 74 6f  tomTypeDescripto
1430: 72 2e 47 65 74 43 6c 61 73 73 4e 61 6d 65 28 29  r.GetClassName()
1440: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74  .    {.      ret
1450: 75 72 6e 20 22 56 69 65 77 20 44 65 73 69 67 6e  urn "View Design
1460: 22 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 74  ";.    }..    st
1470: 72 69 6e 67 20 49 43 75 73 74 6f 6d 54 79 70 65  ring ICustomType
1480: 44 65 73 63 72 69 70 74 6f 72 2e 47 65 74 43 6f  Descriptor.GetCo
1490: 6d 70 6f 6e 65 6e 74 4e 61 6d 65 28 29 0a 20 20  mponentName().  
14a0: 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e    {.      return
14b0: 20 54 6f 53 74 72 69 6e 67 28 29 3b 0a 20 20 20   ToString();.   
14c0: 20 7d 0a 0a 20 20 20 20 54 79 70 65 43 6f 6e 76   }..    TypeConv
14d0: 65 72 74 65 72 20 49 43 75 73 74 6f 6d 54 79 70  erter ICustomTyp
14e0: 65 44 65 73 63 72 69 70 74 6f 72 2e 47 65 74 43  eDescriptor.GetC
14f0: 6f 6e 76 65 72 74 65 72 28 29 0a 20 20 20 20 7b  onverter().    {
1500: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 79  .      return Ty
1510: 70 65 44 65 73 63 72 69 70 74 6f 72 2e 47 65 74  peDescriptor.Get
1520: 43 6f 6e 76 65 72 74 65 72 28 47 65 74 54 79 70  Converter(GetTyp
1530: 65 28 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  e());.    }..   
1540: 20 45 76 65 6e 74 44 65 73 63 72 69 70 74 6f 72   EventDescriptor
1550: 20 49 43 75 73 74 6f 6d 54 79 70 65 44 65 73 63   ICustomTypeDesc
1560: 72 69 70 74 6f 72 2e 47 65 74 44 65 66 61 75 6c  riptor.GetDefaul
1570: 74 45 76 65 6e 74 28 29 0a 20 20 20 20 7b 0a 20  tEvent().    {. 
1580: 20 20 20 20 20 72 65 74 75 72 6e 20 54 79 70 65       return Type
1590: 44 65 73 63 72 69 70 74 6f 72 2e 47 65 74 44 65  Descriptor.GetDe
15a0: 66 61 75 6c 74 45 76 65 6e 74 28 47 65 74 54 79  faultEvent(GetTy
15b0: 70 65 28 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  pe());.    }..  
15c0: 20 20 50 72 6f 70 65 72 74 79 44 65 73 63 72 69    PropertyDescri
15d0: 70 74 6f 72 20 49 43 75 73 74 6f 6d 54 79 70 65  ptor ICustomType
15e0: 44 65 73 63 72 69 70 74 6f 72 2e 47 65 74 44 65  Descriptor.GetDe
15f0: 66 61 75 6c 74 50 72 6f 70 65 72 74 79 28 29 0a  faultProperty().
1600: 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75      {.      retu
1610: 72 6e 20 54 79 70 65 44 65 73 63 72 69 70 74 6f  rn TypeDescripto
1620: 72 2e 47 65 74 44 65 66 61 75 6c 74 50 72 6f 70  r.GetDefaultProp
1630: 65 72 74 79 28 47 65 74 54 79 70 65 28 29 29 3b  erty(GetType());
1640: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6f 62 6a 65  .    }..    obje
1650: 63 74 20 49 43 75 73 74 6f 6d 54 79 70 65 44 65  ct ICustomTypeDe
1660: 73 63 72 69 70 74 6f 72 2e 47 65 74 45 64 69 74  scriptor.GetEdit
1670: 6f 72 28 54 79 70 65 20 65 64 69 74 6f 72 42 61  or(Type editorBa
1680: 73 65 54 79 70 65 29 0a 20 20 20 20 7b 0a 20 20  seType).    {.  
1690: 20 20 20 20 72 65 74 75 72 6e 20 54 79 70 65 44      return TypeD
16a0: 65 73 63 72 69 70 74 6f 72 2e 47 65 74 45 64 69  escriptor.GetEdi
16b0: 74 6f 72 28 47 65 74 54 79 70 65 28 29 2c 20 65  tor(GetType(), e
16c0: 64 69 74 6f 72 42 61 73 65 54 79 70 65 29 3b 0a  ditorBaseType);.
16d0: 20 20 20 20 7d 0a 0a 20 20 20 20 45 76 65 6e 74      }..    Event
16e0: 44 65 73 63 72 69 70 74 6f 72 43 6f 6c 6c 65 63  DescriptorCollec
16f0: 74 69 6f 6e 20 49 43 75 73 74 6f 6d 54 79 70 65  tion ICustomType
1700: 44 65 73 63 72 69 70 74 6f 72 2e 47 65 74 45 76  Descriptor.GetEv
1710: 65 6e 74 73 28 41 74 74 72 69 62 75 74 65 5b 5d  ents(Attribute[]
1720: 20 61 74 74 72 69 62 75 74 65 73 29 0a 20 20 20   attributes).   
1730: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
1740: 54 79 70 65 44 65 73 63 72 69 70 74 6f 72 2e 47  TypeDescriptor.G
1750: 65 74 45 76 65 6e 74 73 28 47 65 74 54 79 70 65  etEvents(GetType
1760: 28 29 2c 20 61 74 74 72 69 62 75 74 65 73 29 3b  (), attributes);
1770: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 45 76 65 6e  .    }..    Even
1780: 74 44 65 73 63 72 69 70 74 6f 72 43 6f 6c 6c 65  tDescriptorColle
1790: 63 74 69 6f 6e 20 49 43 75 73 74 6f 6d 54 79 70  ction ICustomTyp
17a0: 65 44 65 73 63 72 69 70 74 6f 72 2e 47 65 74 45  eDescriptor.GetE
17b0: 76 65 6e 74 73 28 29 0a 20 20 20 20 7b 0a 20 20  vents().    {.  
17c0: 20 20 20 20 72 65 74 75 72 6e 20 54 79 70 65 44      return TypeD
17d0: 65 73 63 72 69 70 74 6f 72 2e 47 65 74 45 76 65  escriptor.GetEve
17e0: 6e 74 73 28 47 65 74 54 79 70 65 28 29 29 3b 0a  nts(GetType());.
17f0: 20 20 20 20 7d 0a 0a 20 20 20 20 50 72 6f 70 65      }..    Prope
1800: 72 74 79 44 65 73 63 72 69 70 74 6f 72 43 6f 6c  rtyDescriptorCol
1810: 6c 65 63 74 69 6f 6e 20 49 43 75 73 74 6f 6d 54  lection ICustomT
1820: 79 70 65 44 65 73 63 72 69 70 74 6f 72 2e 47 65  ypeDescriptor.Ge
1830: 74 50 72 6f 70 65 72 74 69 65 73 28 41 74 74 72  tProperties(Attr
1840: 69 62 75 74 65 5b 5d 20 61 74 74 72 69 62 75 74  ibute[] attribut
1850: 65 73 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  es).    {.      
1860: 72 65 74 75 72 6e 20 54 79 70 65 44 65 73 63 72  return TypeDescr
1870: 69 70 74 6f 72 2e 47 65 74 50 72 6f 70 65 72 74  iptor.GetPropert
1880: 69 65 73 28 47 65 74 54 79 70 65 28 29 2c 20 61  ies(GetType(), a
1890: 74 74 72 69 62 75 74 65 73 29 3b 0a 20 20 20 20  ttributes);.    
18a0: 7d 0a 0a 20 20 20 20 50 72 6f 70 65 72 74 79 44  }..    PropertyD
18b0: 65 73 63 72 69 70 74 6f 72 43 6f 6c 6c 65 63 74  escriptorCollect
18c0: 69 6f 6e 20 49 43 75 73 74 6f 6d 54 79 70 65 44  ion ICustomTypeD
18d0: 65 73 63 72 69 70 74 6f 72 2e 47 65 74 50 72 6f  escriptor.GetPro
18e0: 70 65 72 74 69 65 73 28 29 0a 20 20 20 20 7b 0a  perties().    {.
18f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 79 70        return Typ
1900: 65 44 65 73 63 72 69 70 74 6f 72 2e 47 65 74 50  eDescriptor.GetP
1910: 72 6f 70 65 72 74 69 65 73 28 47 65 74 54 79 70  roperties(GetTyp
1920: 65 28 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  e());.    }..   
1930: 20 6f 62 6a 65 63 74 20 49 43 75 73 74 6f 6d 54   object ICustomT
1940: 79 70 65 44 65 73 63 72 69 70 74 6f 72 2e 47 65  ypeDescriptor.Ge
1950: 74 50 72 6f 70 65 72 74 79 4f 77 6e 65 72 28 50  tPropertyOwner(P
1960: 72 6f 70 65 72 74 79 44 65 73 63 72 69 70 74 6f  ropertyDescripto
1970: 72 20 70 64 29 0a 20 20 20 20 7b 0a 20 20 20 20  r pd).    {.    
1980: 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 20    return this;. 
1990: 20 20 20 7d 0a 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
19a0: 67 69 6f 6e 0a 0a 20 20 20 20 5b 42 72 6f 77 73  gion..    [Brows
19b0: 61 62 6c 65 28 66 61 6c 73 65 29 5d 0a 20 20 20  able(false)].   
19c0: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
19d0: 20 56 69 65 77 54 61 62 6c 65 42 61 73 65 20 44   ViewTableBase D
19e0: 65 73 69 67 6e 54 61 62 6c 65 0a 20 20 20 20 7b  esignTable.    {
19f0: 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74  .      get { ret
1a00: 75 72 6e 20 74 68 69 73 3b 20 7d 0a 20 20 20 20  urn this; }.    
1a10: 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  }..    public ov
1a20: 65 72 72 69 64 65 20 44 62 43 6f 6e 6e 65 63 74  erride DbConnect
1a30: 69 6f 6e 20 47 65 74 43 6f 6e 6e 65 63 74 69 6f  ion GetConnectio
1a40: 6e 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  n().    {.      
1a50: 72 65 74 75 72 6e 20 5f 63 6f 6e 6e 65 63 74 69  return _connecti
1a60: 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a  on;.    }.  }.}.