CVE-2020-26207: Deserialization of Untrusted Data (CWE-502)
value: DatabaseSchemaViewer before version 2.7.4.3 is vulnerable to arbitrary code execution if a user is tricked into opening a specially crafted `.dbschema` file. The patch was released in v2.7.4.3. As a workaround, ensure `.dbschema` files from untrusted sources are not opened.
CWE description: The product deserializes untrusted data without sufficiently verifying that the resulting data will be valid.
CVSS v3 base score: 8
Published: 2020-11-04T22:15Z
Repository: https://github.com/martinjw/dbschemareader
Language: C#
Files changed: DatabaseSchemaReader.sln, DatabaseSchemaReader/Data/InsertWriter.cs, DatabaseSchemaReader/Data/ScriptWriter.cs, DatabaseSchemaReader/SqlGen/ConstraintWriterBase.cs, DatabaseSchemaReader/SqlGen/Db2/TablesGenerator.cs, DatabaseSchemaReader/SqlGen/DropTables.cs, DatabaseSchemaReader/SqlGen/IMigrationGenerator.cs, DatabaseSchemaReader/SqlGen/ITableGenerator.cs, DatabaseSchemaReader/SqlGen/ITablesGenerator.cs, DatabaseSchemaReader/SqlGen/MigrationGenerator.cs, DatabaseSchemaReader/SqlGen/MySql/TablesGenerator.cs, DatabaseSchemaReader/SqlGen/SqlServer/TableGenerator.cs, DatabaseSchemaReader/SqlGen/SqlServer/TablesGenerator.cs, DatabaseSchemaReader/SqlGen/TableGeneratorBase.cs, DatabaseSchemaReader/SqlGen/TablesGeneratorBase.cs, DatabaseSchemaReader/SqlWriter.cs, DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationAddColumn.cs, DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationAddForeignKey.cs, DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationAddIndex.cs, DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationAddPrimaryKey.cs, DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationCreateTable.cs, DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationDropColumn.cs, DatabaseSchemaViewer/DatabaseSchemaViewer.csproj, DatabaseSchemaViewer/Form1.Designer.cs, DatabaseSchemaViewer/Form1.cs, DatabaseSchemaViewer/Form1.resx, DatabaseSchemaViewer/Properties/Resources.Designer.cs, DatabaseSchemaViewer/Properties/Settings.Designer.cs, DatabaseSchemaViewer/SqlTasks.cs, DatabaseSchemaViewer/app.config, DatabaseSchemaViewer/packages.config, build.proj
Commit date: 2020-09-03 18:00:28 +0200
Commit message: SqlGen - EscapeNames property to disable escaping

Diff: diff --git a/DatabaseSchemaReader.sln b/DatabaseSchemaReader.sln
index 54e4d26..5a9ae23 100644
--- a/DatabaseSchemaReader.sln
+++ b/DatabaseSchemaReader.sln
@@ -1,9 +1,9 @@
 ﻿
 Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 15
-VisualStudioVersion = 15.0.26228.4
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.30225.117
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DatabaseSchemaReader", "DatabaseSchemaReader\DatabaseSchemaReader.csproj", "{8280AFB4-9066-4656-A80E-23B859E5299C}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CoreTest", "CoreTest\CoreTest.csproj", "{2881C1CA-88FC-4635-8B48-C0F1170C39B7}"
 EndProject
@@ -20,10 +20,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CopyToSQLite", "CopyToSQLit
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
 		Debug|x86 = Debug|x86
+		net35|Any CPU = net35|Any CPU
+		net35|x86 = net35|x86
 		Net4|Any CPU = Net4|Any CPU
 		Net4|x86 = Net4|x86
 		net45|Any CPU = net45|Any CPU
 		net45|x86 = net45|x86
 		Release|Any CPU = Release|Any CPU
@@ -32,10 +34,14 @@ Global
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 		{8280AFB4-9066-4656-A80E-23B859E5299C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{8280AFB4-9066-4656-A80E-23B859E5299C}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{8280AFB4-9066-4656-A80E-23B859E5299C}.Debug|x86.ActiveCfg = Debug|Any CPU
 		{8280AFB4-9066-4656-A80E-23B859E5299C}.Debug|x86.Build.0 = Debug|Any CPU
+		{8280AFB4-9066-4656-A80E-23B859E5299C}.net35|Any CPU.ActiveCfg = Release|Any CPU
+		{8280AFB4-9066-4656-A80E-23B859E5299C}.net35|Any CPU.Build.0 = Release|Any CPU
+		{8280AFB4-9066-4656-A80E-23B859E5299C}.net35|x86.ActiveCfg = Release|Any CPU
+		{8280AFB4-9066-4656-A80E-23B859E5299C}.net35|x86.Build.0 = Release|Any CPU
 		{8280AFB4-9066-4656-A80E-23B859E5299C}.Net4|Any CPU.ActiveCfg = Release|Any CPU
 		{8280AFB4-9066-4656-A80E-23B859E5299C}.Net4|Any CPU.Build.0 = Release|Any CPU
 		{8280AFB4-9066-4656-A80E-23B859E5299C}.Net4|x86.ActiveCfg = Release|Any CPU
 		{8280AFB4-9066-4656-A80E-23B859E5299C}.Net4|x86.Build.0 = Release|Any CPU
 		{8280AFB4-9066-4656-A80E-23B859E5299C}.net45|Any CPU.ActiveCfg = Release|Any CPU
@@ -48,10 +54,14 @@ Global
 		{8280AFB4-9066-4656-A80E-23B859E5299C}.Release|x86.Build.0 = Release|Any CPU
 		{2881C1CA-88FC-4635-8B48-C0F1170C39B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{2881C1CA-88FC-4635-8B48-C0F1170C39B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{2881C1CA-88FC-4635-8B48-C0F1170C39B7}.Debug|x86.ActiveCfg = Debug|Any CPU
 		{2881C1CA-88FC-4635-8B48-C0F1170C39B7}.Debug|x86.Build.0 = Debug|Any CPU
+		{2881C1CA-88FC-4635-8B48-C0F1170C39B7}.net35|Any CPU.ActiveCfg = Release|Any CPU
+		{2881C1CA-88FC-4635-8B48-C0F1170C39B7}.net35|Any CPU.Build.0 = Release|Any CPU
+		{2881C1CA-88FC-4635-8B48-C0F1170C39B7}.net35|x86.ActiveCfg = Release|Any CPU
+		{2881C1CA-88FC-4635-8B48-C0F1170C39B7}.net35|x86.Build.0 = Release|Any CPU
 		{2881C1CA-88FC-4635-8B48-C0F1170C39B7}.Net4|Any CPU.ActiveCfg = Release|Any CPU
 		{2881C1CA-88FC-4635-8B48-C0F1170C39B7}.Net4|Any CPU.Build.0 = Release|Any CPU
 		{2881C1CA-88FC-4635-8B48-C0F1170C39B7}.Net4|x86.ActiveCfg = Release|Any CPU
 		{2881C1CA-88FC-4635-8B48-C0F1170C39B7}.Net4|x86.Build.0 = Release|Any CPU
 		{2881C1CA-88FC-4635-8B48-C0F1170C39B7}.net45|Any CPU.ActiveCfg = Release|Any CPU
@@ -64,10 +74,14 @@ Global
 		{2881C1CA-88FC-4635-8B48-C0F1170C39B7}.Release|x86.Build.0 = Release|Any CPU
 		{7EF4F6B5-100C-432A-9858-C7F3FEC14F5C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{7EF4F6B5-100C-432A-9858-C7F3FEC14F5C}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{7EF4F6B5-100C-432A-9858-C7F3FEC14F5C}.Debug|x86.ActiveCfg = Debug|Any CPU
 		{7EF4F6B5-100C-432A-9858-C7F3FEC14F5C}.Debug|x86.Build.0 = Debug|Any CPU
+		{7EF4F6B5-100C-432A-9858-C7F3FEC14F5C}.net35|Any CPU.ActiveCfg = net45|Any CPU
+		{7EF4F6B5-100C-432A-9858-C7F3FEC14F5C}.net35|Any CPU.Build.0 = net45|Any CPU
+		{7EF4F6B5-100C-432A-9858-C7F3FEC14F5C}.net35|x86.ActiveCfg = net45|Any CPU
+		{7EF4F6B5-100C-432A-9858-C7F3FEC14F5C}.net35|x86.Build.0 = net45|Any CPU
 		{7EF4F6B5-100C-432A-9858-C7F3FEC14F5C}.Net4|Any CPU.ActiveCfg = net45|Any CPU
 		{7EF4F6B5-100C-432A-9858-C7F3FEC14F5C}.Net4|Any CPU.Build.0 = net45|Any CPU
 		{7EF4F6B5-100C-432A-9858-C7F3FEC14F5C}.Net4|x86.ActiveCfg = net45|Any CPU
 		{7EF4F6B5-100C-432A-9858-C7F3FEC14F5C}.Net4|x86.Build.0 = net45|Any CPU
 		{7EF4F6B5-100C-432A-9858-C7F3FEC14F5C}.net45|Any CPU.ActiveCfg = net45|Any CPU
@@ -80,10 +94,14 @@ Global
 		{7EF4F6B5-100C-432A-9858-C7F3FEC14F5C}.Release|x86.Build.0 = Release|Any CPU
 		{7BE356E2-11FD-4570-8523-EF512D476797}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{7BE356E2-11FD-4570-8523-EF512D476797}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{7BE356E2-11FD-4570-8523-EF512D476797}.Debug|x86.ActiveCfg = Debug|Any CPU
 		{7BE356E2-11FD-4570-8523-EF512D476797}.Debug|x86.Build.0 = Debug|Any CPU
+		{7BE356E2-11FD-4570-8523-EF512D476797}.net35|Any CPU.ActiveCfg = net35|Any CPU
+		{7BE356E2-11FD-4570-8523-EF512D476797}.net35|Any CPU.Build.0 = net35|Any CPU
+		{7BE356E2-11FD-4570-8523-EF512D476797}.net35|x86.ActiveCfg = net35|Any CPU
+		{7BE356E2-11FD-4570-8523-EF512D476797}.net35|x86.Build.0 = net35|Any CPU
 		{7BE356E2-11FD-4570-8523-EF512D476797}.Net4|Any CPU.ActiveCfg = Net4|Any CPU
 		{7BE356E2-11FD-4570-8523-EF512D476797}.Net4|Any CPU.Build.0 = Net4|Any CPU
 		{7BE356E2-11FD-4570-8523-EF512D476797}.Net4|x86.ActiveCfg = Net4|Any CPU
 		{7BE356E2-11FD-4570-8523-EF512D476797}.Net4|x86.Build.0 = Net4|Any CPU
 		{7BE356E2-11FD-4570-8523-EF512D476797}.net45|Any CPU.ActiveCfg = net45|Any CPU
@@ -95,10 +113,14 @@ Global
 		{7BE356E2-11FD-4570-8523-EF512D476797}.Release|x86.ActiveCfg = Release|Any CPU
 		{7BE356E2-11FD-4570-8523-EF512D476797}.Release|x86.Build.0 = Release|Any CPU
 		{CE4A50D0-62F7-49A4-B216-7DEB7EA57147}.Debug|Any CPU.ActiveCfg = Debug|x86
 		{CE4A50D0-62F7-49A4-B216-7DEB7EA57147}.Debug|x86.ActiveCfg = Debug|x86
 		{CE4A50D0-62F7-49A4-B216-7DEB7EA57147}.Debug|x86.Build.0 = Debug|x86
+		{CE4A50D0-62F7-49A4-B216-7DEB7EA57147}.net35|Any CPU.ActiveCfg = Release|x86
+		{CE4A50D0-62F7-49A4-B216-7DEB7EA57147}.net35|Any CPU.Build.0 = Release|x86
+		{CE4A50D0-62F7-49A4-B216-7DEB7EA57147}.net35|x86.ActiveCfg = net45|x86
+		{CE4A50D0-62F7-49A4-B216-7DEB7EA57147}.net35|x86.Build.0 = net45|x86
 		{CE4A50D0-62F7-49A4-B216-7DEB7EA57147}.Net4|Any CPU.ActiveCfg = net45|x86
 		{CE4A50D0-62F7-49A4-B216-7DEB7EA57147}.Net4|Any CPU.Build.0 = net45|x86
 		{CE4A50D0-62F7-49A4-B216-7DEB7EA57147}.Net4|x86.ActiveCfg = net45|x86
 		{CE4A50D0-62F7-49A4-B216-7DEB7EA57147}.Net4|x86.Build.0 = net45|x86
 		{CE4A50D0-62F7-49A4-B216-7DEB7EA57147}.net45|Any CPU.ActiveCfg = net45|x86
@@ -109,6 +131,9 @@ Global
 		{CE4A50D0-62F7-49A4-B216-7DEB7EA57147}.Release|x86.Build.0 = Release|x86
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
 	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {9D3E963B-CAE9-4937-86C7-E49C5DC2CDED}
+	EndGlobalSection
 EndGlobal
diff --git a/DatabaseSchemaReader/Data/InsertWriter.cs b/DatabaseSchemaReader/Data/InsertWriter.cs
index 218d68b..625ebf7 100644
--- a/DatabaseSchemaReader/Data/InsertWriter.cs
+++ b/DatabaseSchemaReader/Data/InsertWriter.cs
@@ -132,10 +132,15 @@ private void PrepareTypesDataTable()
         /// Include BLOB in INSERTS. This is only practical for small blobs for certain databases (eg it works in SqlServer Northwind).
         /// </summary>
         /// <value><c>true</c> if include blobs; otherwise, <c>false</c>.</value>
         public bool IncludeBlobs { get; set; }
 
+        /// <summary>
+        /// Escape table and column names (default true)
+        /// </summary>
+        public bool EscapeNames { get; set; } = true;
+
         /// <summary>
         /// Writes the INSERTs in the specified SQL dialect
         /// </summary>
         /// <param name="sqlType">Type of the SQL.</param>
         /// <returns></returns>
@@ -265,11 +270,11 @@ public string WriteInsert(IDataRecord record)
 
         private void PrepareTemplate()
         {
             var cols = GetAllColumns();
 
-            _template = "INSERT INTO " + _sqlWriter.EscapedTableName + @" (
+            _template = "INSERT INTO " + (EscapeNames ? _sqlWriter.EscapedTableName : _databaseTable.Name) + @" (
 " + FormattedColumns(cols) + @") VALUES (
 {0}
 );
 ";
         }
@@ -286,11 +291,13 @@ private string[] GetAllColumns()
             var cols = new List<string>();
             foreach (var databaseColumn in _databaseTable.Columns)
             {
                 if (IsNotWriteableType(databaseColumn)) continue;
                 if (!IncludeIdentity && databaseColumn.IsAutoNumber) continue;
-                cols.Add(_sqlWriter.EscapedColumnName(databaseColumn.Name));
+                var name = databaseColumn.Name;
+                if (EscapeNames) name = _sqlWriter.EscapedColumnName(databaseColumn.Name);
+                cols.Add(name);
             }
 
             return cols.ToArray();
         }
 
diff --git a/DatabaseSchemaReader/Data/ScriptWriter.cs b/DatabaseSchemaReader/Data/ScriptWriter.cs
index 05a05f0..461073a 100644
--- a/DatabaseSchemaReader/Data/ScriptWriter.cs
+++ b/DatabaseSchemaReader/Data/ScriptWriter.cs
@@ -12,10 +12,15 @@ namespace DatabaseSchemaReader.Data
     /// </remarks>
     public class ScriptWriter
     {
         private int _pageSize = 1000;
 
+        /// <summary>
+        /// Escape table and column names (default true)
+        /// </summary>
+        public bool EscapeNames { get; set; } = true;
+
         /// <summary>
         /// Gets or sets the maximum number of records returned. Default is 1000.
         /// </summary>
         /// <value>The size of the page.</value>
         public int PageSize
@@ -83,10 +88,11 @@ public string ReadTable(DatabaseTable databaseTable, DbConnection connection)
             r.PageSize = PageSize;
             var dt = r.Read(connection);
             var w = new InsertWriter(databaseTable, dt);
             w.IncludeIdentity = IncludeIdentity;
             w.IncludeBlobs = IncludeBlobs;
+            w.EscapeNames = EscapeNames;
             var providerName = connection.GetType().Namespace;
             return w.Write(FindSqlType(providerName));
         }
         
         /// <summary>
@@ -127,10 +133,11 @@ public string ReadTable(DatabaseTable databaseTable, string connectionString, st
             r.PageSize = PageSize;
             var dt = r.Read();
             var w = new InsertWriter(databaseTable, dt);
             w.IncludeIdentity = IncludeIdentity;
             w.IncludeBlobs = IncludeBlobs;
+            w.EscapeNames = EscapeNames;
             return w.Write(FindSqlType(providerName));
         }
 
         /// <summary>
         /// Reads the table schema and data and returns the INSERT statements
diff --git a/DatabaseSchemaReader/SqlGen/ConstraintWriterBase.cs b/DatabaseSchemaReader/SqlGen/ConstraintWriterBase.cs
index a19ad1d..9bcd947 100644
--- a/DatabaseSchemaReader/SqlGen/ConstraintWriterBase.cs
+++ b/DatabaseSchemaReader/SqlGen/ConstraintWriterBase.cs
@@ -12,17 +12,20 @@ abstract class ConstraintWriterBase
         protected readonly DatabaseTable Table;
 
         protected ConstraintWriterBase(DatabaseTable table)
         {
             Table = table;
+            EscapeNames = true;
         }
 
         protected abstract ISqlFormatProvider SqlFormatProvider();
 
+        public bool EscapeNames { get; set; }
+
         protected string EscapeName(string name)
         {
-            return SqlFormatProvider().Escape(name);
+            return EscapeNames? SqlFormatProvider().Escape(name) : name;
         }
 
         public bool IncludeSchema { get; set; }
 
         public Func<DatabaseConstraint, bool> CheckConstraintExcluder { get; set; }
@@ -72,10 +75,11 @@ public string WriteUniqueKeys()
 
         protected virtual string AddUniqueConstraintFormat
         {
             get { return "ALTER TABLE {0} ADD CONSTRAINT {1} UNIQUE ({2})"; }
         }
+
         private string WriteUniqueKey(DatabaseConstraint uniqueKey)
         {
             var columnList = GetColumnList(uniqueKey.Columns);
 
             var name = ConstraintName(uniqueKey);
diff --git a/DatabaseSchemaReader/SqlGen/Db2/TablesGenerator.cs b/DatabaseSchemaReader/SqlGen/Db2/TablesGenerator.cs
index 6fb34c6..683684f 100644
--- a/DatabaseSchemaReader/SqlGen/Db2/TablesGenerator.cs
+++ b/DatabaseSchemaReader/SqlGen/Db2/TablesGenerator.cs
@@ -48,9 +48,9 @@ protected override ISqlFormatProvider SqlFormatProvider()
             return new SqlFormatProvider();
         }
 
         protected override void WriteDrops(StringBuilder sb)
         {
-            sb.AppendLine(DropTables.Write(Schema, SqlFormatProvider()));
+            sb.AppendLine(DropTables.Write(Schema, SqlFormatProvider(), EscapeNames));
         }
     }
 }
diff --git a/DatabaseSchemaReader/SqlGen/DropTables.cs b/DatabaseSchemaReader/SqlGen/DropTables.cs
index 0d2f5cd..f8cd789 100644
--- a/DatabaseSchemaReader/SqlGen/DropTables.cs
+++ b/DatabaseSchemaReader/SqlGen/DropTables.cs
@@ -4,11 +4,11 @@
 
 namespace DatabaseSchemaReader.SqlGen
 {
     class DropTables
     {
-        public static string Write(DatabaseSchema schema, ISqlFormatProvider formatter)
+        public static string Write(DatabaseSchema schema, ISqlFormatProvider formatter, bool escapeNames)
         {
             var sb = new StringBuilder();
             var lineEnding = formatter.LineEnding();
             //if this is a GO, comment it out too
             if (lineEnding.IndexOf(Environment.NewLine, StringComparison.Ordinal) != -1)
@@ -17,17 +17,17 @@ public static string Write(DatabaseSchema schema, ISqlFormatProvider formatter)
             }
             foreach (var table in schema.Tables)
             {
                 foreach (var foreignKey in table.ForeignKeys)
                 {
-                    sb.AppendLine("-- ALTER TABLE " + formatter.Escape(table.Name) + " DROP CONSTRAINT " + foreignKey.Name + lineEnding);
-
+                    sb.AppendLine("-- ALTER TABLE " + (escapeNames ? formatter.Escape(table.Name) : table.Name) + 
+                                  " DROP CONSTRAINT " + foreignKey.Name + lineEnding);
                 }
             }
             foreach (var table in schema.Tables)
             {
-                sb.AppendLine("-- DROP TABLE " + formatter.Escape(table.Name) + lineEnding);
+                sb.AppendLine("-- DROP TABLE " + (escapeNames ? formatter.Escape(table.Name) : table.Name) + lineEnding);
             }
             return sb.ToString();
         }
     }
 }
diff --git a/DatabaseSchemaReader/SqlGen/IMigrationGenerator.cs b/DatabaseSchemaReader/SqlGen/IMigrationGenerator.cs
index 1d5f97e..702d34a 100644
--- a/DatabaseSchemaReader/SqlGen/IMigrationGenerator.cs
+++ b/DatabaseSchemaReader/SqlGen/IMigrationGenerator.cs
@@ -10,11 +10,15 @@ public interface IMigrationGenerator
         /// <summary>
         /// Include the schema when writing migration sql. Default true (except if detects SQLite, SqlServerCE)
         /// </summary>
         bool IncludeSchema { get; set; }
         /// <summary>
-        /// Adds the table. If any primary key, unqiue or check constraints are attached, they are written too (don't write them individually). Foreign keys must be added separately (use <see cref="AddConstraint"/>)
+        /// Escape the names (default true)
+        /// </summary>
+        bool EscapeNames { get; set; }
+        /// <summary>
+        /// Adds the table. If any primary key, unique or check constraints are attached, they are written too (don't write them individually). Foreign keys must be added separately (use <see cref="AddConstraint"/>)
         /// </summary>
         /// <param name="databaseTable">The database table.</param>
         /// <returns></returns>
         string AddTable(DatabaseTable databaseTable);
         /// <summary>
diff --git a/DatabaseSchemaReader/SqlGen/ITableGenerator.cs b/DatabaseSchemaReader/SqlGen/ITableGenerator.cs
index 6848e31..97b5549 100644
--- a/DatabaseSchemaReader/SqlGen/ITableGenerator.cs
+++ b/DatabaseSchemaReader/SqlGen/ITableGenerator.cs
@@ -10,20 +10,22 @@ public interface ITableGenerator
         /// <summary>
         /// Indicates whether schema will be written in DDL
         /// </summary>
         /// <value><c>true</c> if schema is written; otherwise, <c>false</c>.</value>
         bool IncludeSchema { get; set; }
-
+        /// <summary>
+        /// Escape the names (default true)
+        /// </summary>
+        bool EscapeNames { get; set; }
         /// <summary>
         /// Gets or sets a value indicating whether to include default values while writing column definitions
         /// </summary>
         /// <value>
         /// <c>true</c> if include default values; otherwise, <c>false</c>.
         /// </value>
         bool IncludeDefaultValues { get; set; }
 
-
         /// <summary>
         /// Writes the DDL.
         /// </summary>
         /// <returns></returns>
         string Write();
diff --git a/DatabaseSchemaReader/SqlGen/ITablesGenerator.cs b/DatabaseSchemaReader/SqlGen/ITablesGenerator.cs
index e49513a..c53a8da 100644
--- a/DatabaseSchemaReader/SqlGen/ITablesGenerator.cs
+++ b/DatabaseSchemaReader/SqlGen/ITablesGenerator.cs
@@ -9,10 +9,15 @@ public interface ITablesGenerator
         /// Indicates whether schema will be written in DDL
         /// </summary>
         /// <value><c>true</c> if schema is written; otherwise, <c>false</c>.</value>
         bool IncludeSchema { get; set; }
 
+        /// <summary>
+        /// Escape the table and column names
+        /// </summary>
+        bool EscapeNames { get; set; }
+
         /// <summary>
         /// Writes this ddl script.
         /// </summary>
         /// <returns></returns>
         string Write();
diff --git a/DatabaseSchemaReader/SqlGen/MigrationGenerator.cs b/DatabaseSchemaReader/SqlGen/MigrationGenerator.cs
index bb2b7da..528972b 100644
--- a/DatabaseSchemaReader/SqlGen/MigrationGenerator.cs
+++ b/DatabaseSchemaReader/SqlGen/MigrationGenerator.cs
@@ -2,11 +2,10 @@
 using System.Collections.Generic;
 using System.Globalization;
 using System.Linq;
 using System.Text;
 using DatabaseSchemaReader.DataSchema;
-using DatabaseSchemaReader.SqlGen.SqLite;
 using DatabaseSchemaReader.Utilities;
 
 namespace DatabaseSchemaReader.SqlGen
 {
     class MigrationGenerator : IMigrationGenerator
@@ -17,29 +16,37 @@ class MigrationGenerator : IMigrationGenerator
         public MigrationGenerator(SqlType sqlType)
         {
             _sqlFormatProvider = SqlFormatFactory.Provider(sqlType);
             _ddlFactory = new DdlGeneratorFactory(sqlType);
             IncludeSchema = (sqlType != SqlType.SqlServerCe && sqlType != SqlType.SQLite);
+            EscapeNames = true;
         }
 
         /// <summary>
         /// Include the schema when writing table. Must not be set for SQLite as there is no schema.
         /// </summary>
         public bool IncludeSchema { get; set; }
 
+        /// <summary>
+        /// Escape any names
+        /// </summary>
+        public bool EscapeNames { get; set; }
+
         protected virtual ITableGenerator CreateTableGenerator(DatabaseTable databaseTable)
         {
-            return _ddlFactory.TableGenerator(databaseTable);
+            var tableGenerator = _ddlFactory.TableGenerator(databaseTable);
+            if (!EscapeNames) tableGenerator.EscapeNames = false;
+            return tableGenerator;
         }
         protected virtual ISqlFormatProvider SqlFormatProvider()
         {
             return _sqlFormatProvider;
         }
 
         public string Escape(string name)
         {
-            return SqlFormatProvider().Escape(name);
+            return EscapeNames ? SqlFormatProvider().Escape(name) : name;
         }
         protected virtual string LineEnding()
         {
             return SqlFormatProvider().LineEnding();
         }
@@ -212,10 +219,11 @@ public virtual string AddConstraint(DatabaseTable databaseTable, DatabaseConstra
 
             //use the standard constraint writer for the database
             var constraintWriter = _ddlFactory.ConstraintWriter(databaseTable);
             if (constraintWriter == null) return null;
             constraintWriter.IncludeSchema = IncludeSchema; //cascade setting
+            constraintWriter.EscapeNames = EscapeNames;
             return constraintWriter.WriteConstraint(constraint);
         }
 
         public virtual string DropConstraint(DatabaseTable databaseTable, DatabaseConstraint constraint)
         {
diff --git a/DatabaseSchemaReader/SqlGen/MySql/TablesGenerator.cs b/DatabaseSchemaReader/SqlGen/MySql/TablesGenerator.cs
index cc9669d..ee90dca 100644
--- a/DatabaseSchemaReader/SqlGen/MySql/TablesGenerator.cs
+++ b/DatabaseSchemaReader/SqlGen/MySql/TablesGenerator.cs
@@ -27,9 +27,9 @@ protected override ISqlFormatProvider SqlFormatProvider()
             return new SqlFormatProvider();
         }
 
         protected override void WriteDrops(StringBuilder sb)
         {
-            sb.AppendLine(DropTables.Write(Schema, SqlFormatProvider()));
+            sb.AppendLine(DropTables.Write(Schema, SqlFormatProvider(), EscapeNames));
         }
     }
 }
diff --git a/DatabaseSchemaReader/SqlGen/SqlServer/TableGenerator.cs b/DatabaseSchemaReader/SqlGen/SqlServer/TableGenerator.cs
index 35e8151..6c85e68 100644
--- a/DatabaseSchemaReader/SqlGen/SqlServer/TableGenerator.cs
+++ b/DatabaseSchemaReader/SqlGen/SqlServer/TableGenerator.cs
@@ -95,11 +95,11 @@ private static string TranslateCheckExpression(string expression)
             }
             return expression;
         }
         protected virtual ConstraintWriterBase CreateConstraintWriter()
         {
-            return new ConstraintWriter(Table) { IncludeSchema = IncludeSchema };
+            return new ConstraintWriter(Table) { IncludeSchema = IncludeSchema, EscapeNames = EscapeNames};
         }
         protected virtual IMigrationGenerator CreateMigrationGenerator()
         {
             var migrations = new SqlServerMigrationGenerator();
             //ensure we're not writing schema prefixes
diff --git a/DatabaseSchemaReader/SqlGen/SqlServer/TablesGenerator.cs b/DatabaseSchemaReader/SqlGen/SqlServer/TablesGenerator.cs
index 413c2c9..0345c3e 100644
--- a/DatabaseSchemaReader/SqlGen/SqlServer/TablesGenerator.cs
+++ b/DatabaseSchemaReader/SqlGen/SqlServer/TablesGenerator.cs
@@ -57,9 +57,9 @@ protected override ISqlFormatProvider SqlFormatProvider()
             return new SqlFormatProvider();
         }
 
         protected override void WriteDrops(StringBuilder sb)
         {
-            sb.AppendLine(DropTables.Write(Schema, SqlFormatProvider()));
+            sb.AppendLine(DropTables.Write(Schema, SqlFormatProvider(), EscapeNames));
         }
     }
 }
diff --git a/DatabaseSchemaReader/SqlGen/TableGeneratorBase.cs b/DatabaseSchemaReader/SqlGen/TableGeneratorBase.cs
index 607e379..d0f8f82 100644
--- a/DatabaseSchemaReader/SqlGen/TableGeneratorBase.cs
+++ b/DatabaseSchemaReader/SqlGen/TableGeneratorBase.cs
@@ -14,17 +14,23 @@ protected TableGeneratorBase(DatabaseTable table)
         {
             Table = table;
             TableName = table.Name;
             IncludeSchema = true;
             IncludeDefaultValues = true;
+            EscapeNames = true;
         }
 
         protected abstract ISqlFormatProvider SqlFormatProvider();
 
+        /// <summary>
+        /// Escape any names
+        /// </summary>
+        public bool EscapeNames { get; set; }
+
         private string EscapeName(string name)
         {
-            return SqlFormatProvider().Escape(name);
+            return EscapeNames? SqlFormatProvider().Escape(name) : name;
         }
         protected abstract string WriteDataType(DatabaseColumn column);
         protected abstract string NonNativeAutoIncrementWriter();
 
         protected abstract string ConstraintWriter();
diff --git a/DatabaseSchemaReader/SqlGen/TablesGeneratorBase.cs b/DatabaseSchemaReader/SqlGen/TablesGeneratorBase.cs
index b04e6c0..33a3f91 100644
--- a/DatabaseSchemaReader/SqlGen/TablesGeneratorBase.cs
+++ b/DatabaseSchemaReader/SqlGen/TablesGeneratorBase.cs
@@ -9,23 +9,27 @@ abstract class TablesGeneratorBase : ITablesGenerator
 
         protected TablesGeneratorBase(DatabaseSchema schema)
         {
             Schema = schema;
             IncludeSchema = true;
+            EscapeNames = true;
         }
 
         public bool IncludeSchema { get; set; }
 
+        public bool EscapeNames { get; set; }
+
         public string Write()
         {
             var sb = new StringBuilder();
 
             //do tables
             foreach (var table in Schema.Tables)
             {
                 var tableGenerator = LoadTableGenerator(table);
                 tableGenerator.IncludeSchema = IncludeSchema;
+                tableGenerator.EscapeNames = EscapeNames;
                 sb.AppendLine(tableGenerator.Write());
             }
             sb.AppendLine();
 
             //now we can do foreign keys
@@ -33,10 +37,11 @@ public string Write()
             {
                 var constraintWriter = LoadConstraintWriter(table);
                 //SQLite has no ALTER TABLE support, so this is not supported
                 if (constraintWriter == null) continue;
                 constraintWriter.IncludeSchema = IncludeSchema;
+                constraintWriter.EscapeNames = EscapeNames;
                 sb.AppendLine(constraintWriter.WriteForeignKeys());
             }
             sb.AppendLine();
 
             //in case we want to delete it again
diff --git a/DatabaseSchemaReader/SqlWriter.cs b/DatabaseSchemaReader/SqlWriter.cs
index 361c028..daffa89 100644
--- a/DatabaseSchemaReader/SqlWriter.cs
+++ b/DatabaseSchemaReader/SqlWriter.cs
@@ -12,16 +12,17 @@ namespace DatabaseSchemaReader
     /// Writes simple SQL statements
     /// </summary>
     public class SqlWriter
     {
         private readonly DatabaseTable _table;
-        private readonly char _parameterPrefix;
-        private readonly string _nameEscapeStart;
-        private readonly string _nameEscapeEnd;
+        private char _parameterPrefix;
+        private string _nameEscapeStart;
+        private string _nameEscapeEnd;
         private IList<string> _primaryKeys;
         private readonly SqlType _sqlType;
         private bool _inStoredProcedure;
+        private bool _escapeNames;
 
         /// <summary>
         /// Initializes a new instance of the <see cref="SqlWriter"/> class.
         /// </summary>
         /// <param name="table">The table.</param>
@@ -32,11 +33,17 @@ public SqlWriter(DatabaseTable table, SqlType sqlType)
                 throw new ArgumentNullException("table");
             _table = table;
             _sqlType = sqlType;
             _nameEscapeStart = null;
             _nameEscapeEnd = null;
-            switch (sqlType)
+            _escapeNames = true;
+            ParametersByType();
+        }
+
+        private void ParametersByType()
+        {
+            switch (_sqlType)
             {
                 case SqlType.MySql:
                     _parameterPrefix = '?'; //or @ but can conflict with variables
                     _nameEscapeStart = "`"; //backtick, not single apos
                     _nameEscapeEnd = "`";
@@ -68,10 +75,29 @@ public SqlWriter(DatabaseTable table, SqlType sqlType)
                     _nameEscapeEnd = "]";
                     break;
             }
         }
 
+        /// <summary>
+        /// Escape the names (default true)
+        /// </summary>
+        public bool EscapeNames
+        {
+            get { return _escapeNames; }
+            set
+            {
+                _escapeNames = value;
+                if (value)
+                {
+                    ParametersByType(); //reset the start and end
+                }
+                else
+                {
+                    _nameEscapeStart = _nameEscapeEnd = string.Empty; //empty them out
+                }
+            }
+        }
 
         /// <summary>
         /// In stored procedures, Oracle and MySql do not use the parameter prefix. Ignored for SqlServer (which requires @).
         /// </summary>
         /// <value><c>true</c> if in stored procedure; otherwise, <c>false</c>.</value>
@@ -707,11 +733,11 @@ private string FindIdentityParameter()
             return identityParameter;
         }
 
         private DatabaseColumn FindIdentityColumn()
         {
-            return _table.Columns.Find(delegate(DatabaseColumn col)
+            return _table.Columns.Find(delegate (DatabaseColumn col)
                     {
                         return col.IsAutoNumber;
                     });
         }
 
diff --git a/DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationAddColumn.cs b/DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationAddColumn.cs
index 8f5c5a0..66f5e22 100644
--- a/DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationAddColumn.cs
+++ b/DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationAddColumn.cs
@@ -57,10 +57,29 @@ public void TestSqlServerNoSchema()
 
             //assert
             Assert.IsTrue(sql.StartsWith("ALTER TABLE [Orders] ADD [COUNTRY] VARCHAR (20)", StringComparison.OrdinalIgnoreCase), "names should be quoted correctly");
         }
 
+        [TestMethod]
+        public void TestSqlServerNoEscapeNames()
+        {
+
+            //arrange
+            var migration = new DdlGeneratorFactory(SqlType.SqlServer).MigrationGenerator();
+            migration.EscapeNames = false;
+
+            var table = MigrationCommon.CreateTestTable("Orders");
+            table.SchemaOwner = "dbo";
+            var column = CreateNewColumn();
+
+            //act
+            migration.IncludeSchema = false;
+            var sql = migration.AddColumn(table, column);
+
+            //assert
+            Assert.IsTrue(sql.StartsWith("ALTER TABLE Orders ADD COUNTRY VARCHAR (20)", StringComparison.OrdinalIgnoreCase), "names should be quoted correctly");
+        }
 
         [TestMethod]
         public void TestOracleWithSchema()
         {
 
diff --git a/DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationAddForeignKey.cs b/DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationAddForeignKey.cs
index 85a6f75..5a770cd 100644
--- a/DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationAddForeignKey.cs
+++ b/DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationAddForeignKey.cs
@@ -45,10 +45,29 @@ public void TestSqlServerNoSchema()
 
             //assert
             Assert.IsTrue(sql.StartsWith("ALTER TABLE [Orders] ADD CONSTRAINT [FK_Orders] FOREIGN KEY ([Parent]) REFERENCES [Orders] ([Id])", StringComparison.OrdinalIgnoreCase), "names should be quoted correctly");
         }
 
+        [TestMethod]
+        public void TestSqlServerNoEscapeNames()
+        {
+
+            //arrange
+            var migration = new DdlGeneratorFactory(SqlType.SqlServer).MigrationGenerator();
+            migration.EscapeNames = false;
+
+            var table = MigrationCommon.CreateTestTable("Orders");
+            table.SchemaOwner = "dbo";
+            var fk = MigrationCommon.CreateForeignKey(table);
+
+            //act
+            migration.IncludeSchema = false;
+            var sql = migration.AddConstraint(table, fk);
+
+            //assert
+            Assert.IsTrue(sql.StartsWith("ALTER TABLE Orders ADD CONSTRAINT FK_Orders FOREIGN KEY (Parent) REFERENCES Orders (Id)", StringComparison.OrdinalIgnoreCase), "names should be quoted correctly");
+        }
 
         [TestMethod]
         public void TestOracleWithSchema()
         {
 
@@ -84,10 +103,30 @@ public void TestOracleNoSchema()
 
             //assert
             Assert.IsTrue(sql.StartsWith("ALTER TABLE \"Orders\" ADD CONSTRAINT \"FK_Orders\" FOREIGN KEY (\"Parent\") REFERENCES \"Orders\" (\"Id\")", StringComparison.OrdinalIgnoreCase), "names should be quoted correctly");
         }
 
+        [TestMethod]
+        public void TestOracleNoSchemaNoEscapeNames()
+        {
+
+            //arrange
+            var migration = new DdlGeneratorFactory(SqlType.Oracle).MigrationGenerator();
+            migration.EscapeNames = false;
+
+            var table = MigrationCommon.CreateTestTable("Orders");
+            table.SchemaOwner = "dbo";
+            var fk = MigrationCommon.CreateForeignKey(table);
+
+            //act
+            migration.IncludeSchema = false;
+            var sql = migration.AddConstraint(table, fk);
+
+            //assert
+            Assert.IsTrue(sql.StartsWith("ALTER TABLE Orders ADD CONSTRAINT FK_Orders FOREIGN KEY (Parent) REFERENCES Orders (Id)", StringComparison.OrdinalIgnoreCase), "names should be quoted correctly");
+        }
+
         [TestMethod]
         public void TestMySqlWithSchema()
         {
 
             //arrange
diff --git a/DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationAddIndex.cs b/DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationAddIndex.cs
index 6b183aa..c516e94 100644
--- a/DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationAddIndex.cs
+++ b/DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationAddIndex.cs
@@ -105,10 +105,31 @@ public void TestSqlServerNoSchema()
 
             //assert
             Assert.IsTrue(sql.StartsWith("CREATE UNIQUE INDEX [UI_COUNTRY] ON [Orders]([COUNTRY])", StringComparison.OrdinalIgnoreCase), "names should be quoted correctly");
         }
 
+
+        [TestMethod]
+        public void TestSqlServerNoSchemaNoEscapeNames()
+        {
+            //arrange
+            var migration = new DdlGeneratorFactory(SqlType.SqlServer).MigrationGenerator();
+            migration.EscapeNames = false;
+
+            var table = MigrationCommon.CreateTestTable("Orders");
+            table.SchemaOwner = "dbo";
+            var column = MigrationCommon.CreateNewColumn();
+            var index = MigrationCommon.CreateUniqueIndex(column, "COUNTRY");
+
+            //act
+            migration.IncludeSchema = false;
+            var sql = migration.AddIndex(table, index);
+
+            //assert
+            Assert.IsTrue(sql.StartsWith("CREATE UNIQUE INDEX UI_COUNTRY ON Orders(COUNTRY)", StringComparison.OrdinalIgnoreCase), "names should be quoted correctly");
+        }
+
         [TestMethod]
         public void TestSqlServerNoSchema_NonClustered()
         {
             //arrange
             var migration = new DdlGeneratorFactory(SqlType.SqlServer).MigrationGenerator();
diff --git a/DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationAddPrimaryKey.cs b/DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationAddPrimaryKey.cs
index f4fc4bb..c331bc1 100644
--- a/DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationAddPrimaryKey.cs
+++ b/DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationAddPrimaryKey.cs
@@ -33,10 +33,37 @@ public void TestAddPrimaryKey()
 
             //assert
             Assert.IsTrue(sql.IndexOf("ADD CONSTRAINT [Test_PK] PRIMARY KEY ([Id])", StringComparison.OrdinalIgnoreCase) != -1, "adding a primary key");
         }
 
+        [TestMethod]
+        public void TestAddPrimaryKeyNoEscapeNames()
+        {
+
+            //arrange
+            var migration = new DdlGeneratorFactory(SqlType.SqlServer).MigrationGenerator();
+            migration.EscapeNames = false;
+
+            var schema = new DatabaseSchema(null, SqlType.SqlServer);
+            var table = schema.AddTable("Test")
+                .AddColumn<int>("Id")
+                .AddColumn<string>("Name")
+                .Table;
+            var pk = new DatabaseConstraint
+            {
+                Name = "Test_PK",
+                ConstraintType = ConstraintType.PrimaryKey
+            };
+            pk.Columns.Add("Id");
+
+            //act
+            var sql = migration.AddConstraint(table, pk);
+
+            //assert
+            Assert.IsTrue(sql.IndexOf("ADD CONSTRAINT Test_PK PRIMARY KEY (Id)", StringComparison.OrdinalIgnoreCase) != -1, "adding a primary key");
+        }
+
         [TestMethod]
         public void TestAddPrimaryKeyWithGuid()
         {
 
             //arrange
diff --git a/DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationCreateTable.cs b/DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationCreateTable.cs
index ecc899a..325c83b 100644
--- a/DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationCreateTable.cs
+++ b/DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationCreateTable.cs
@@ -45,10 +45,29 @@ public void TestSqlServerCreateTableNoSchema()
             //assert
             Assert.IsTrue(sql.StartsWith("CREATE TABLE [Orders]", StringComparison.OrdinalIgnoreCase), "table name should be quoted correctly");
             Assert.IsTrue(sql.Contains("ALTER TABLE [Orders] ADD CONSTRAINT [PK_Orders] PRIMARY KEY ([Id])"), "Primary key should be set with name");
         }
 
+        [TestMethod]
+        public void TestSqlServerCreateTableNoSchemaNoEscapeNames()
+        {
+
+            //arrange
+            var migration = new DdlGeneratorFactory(SqlType.SqlServer).MigrationGenerator();
+            migration.EscapeNames = false;
+
+            var table = MigrationCommon.CreateTestTable("Orders");
+            table.SchemaOwner = "dbo";
+
+            //act
+            migration.IncludeSchema = false;
+            var sql = migration.AddTable(table);
+
+            //assert
+            Assert.IsTrue(sql.StartsWith("CREATE TABLE Orders", StringComparison.OrdinalIgnoreCase), "table name should be quoted correctly");
+            Assert.IsTrue(sql.Contains("ALTER TABLE Orders ADD CONSTRAINT PK_Orders PRIMARY KEY (Id)"), "Primary key should be set with name");
+        }
 
         [TestMethod]
         public void TestOracleCreateTableWithSchema()
         {
 
diff --git a/DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationDropColumn.cs b/DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationDropColumn.cs
index ec2a94c..026c8ef 100644
--- a/DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationDropColumn.cs
+++ b/DatabaseSchemaReaderTest/SqlGen/Migrations/UnitTests/MigrationDropColumn.cs
@@ -45,10 +45,29 @@ public void TestSqlServerNoSchema()
 
             //assert
             Assert.IsTrue(sql.StartsWith("ALTER TABLE [Orders] DROP COLUMN [COUNTRY]", StringComparison.OrdinalIgnoreCase), "names should be quoted correctly");
         }
 
+        [TestMethod]
+        public void TestSqlServerNoSchemaNoEscapeNames()
+        {
+
+            //arrange
+            var migration = new DdlGeneratorFactory(SqlType.SqlServer).MigrationGenerator();
+            migration.EscapeNames = false;
+
+            var table = MigrationCommon.CreateTestTable("Orders");
+            table.SchemaOwner = "dbo";
+            var column = MigrationCommon.CreateNewColumn();
+
+            //act
+            migration.IncludeSchema = false;
+            var sql = migration.DropColumn(table, column);
+
+            //assert
+            Assert.IsTrue(sql.StartsWith("ALTER TABLE Orders DROP COLUMN COUNTRY", StringComparison.OrdinalIgnoreCase), "names should be quoted correctly");
+        }
 
         [TestMethod]
         public void TestOracleWithSchema()
         {
 
diff --git a/DatabaseSchemaViewer/DatabaseSchemaViewer.csproj b/DatabaseSchemaViewer/DatabaseSchemaViewer.csproj
index 94a59e6..f4310f5 100644
--- a/DatabaseSchemaViewer/DatabaseSchemaViewer.csproj
+++ b/DatabaseSchemaViewer/DatabaseSchemaViewer.csproj
@@ -8,11 +8,11 @@
     <ProjectGuid>{7BE356E2-11FD-4570-8523-EF512D476797}</ProjectGuid>
     <OutputType>WinExe</OutputType>
     <AppDesignerFolder>Properties</AppDesignerFolder>
     <RootNamespace>DatabaseSchemaViewer</RootNamespace>
     <AssemblyName>DatabaseSchemaViewer</AssemblyName>
-    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
     <FileAlignment>512</FileAlignment>
     <FileUpgradeFlags>
     </FileUpgradeFlags>
     <OldToolsVersion>3.5</OldToolsVersion>
     <UpgradeBackupLocation />
@@ -33,10 +33,11 @@
     <BootstrapperEnabled>true</BootstrapperEnabled>
     <SccProjectName>SAK</SccProjectName>
     <SccLocalPath>SAK</SccLocalPath>
     <SccAuxPath>SAK</SccAuxPath>
     <SccProvider>SAK</SccProvider>
+    <TargetFrameworkProfile />
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
     <DebugType>full</DebugType>
     <Optimize>false</Optimize>
@@ -73,10 +74,26 @@
     <DebugType>pdbonly</DebugType>
     <PlatformTarget>AnyCPU</PlatformTarget>
     <ErrorReport>prompt</ErrorReport>
     <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'net35|AnyCPU'">
+     <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <OutputPath>bin\net35\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup Condition="'$(Configuration)' != 'net35'">
+    <Reference Include="Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=MSIL">
+      <HintPath>..\packages\Oracle.ManagedDataAccess.19.8.0\lib\net40\Oracle.ManagedDataAccess.dll</HintPath>
+    </Reference>
+  </ItemGroup>
   <ItemGroup>
     <Reference Include="System" />
     <Reference Include="System.Configuration" />
     <Reference Include="System.Core">
     </Reference>
@@ -136,10 +153,11 @@
       <DependentUpon>ScriptForm.cs</DependentUpon>
     </EmbeddedResource>
     <None Include="app.config">
       <SubType>Designer</SubType>
     </None>
+    <None Include="packages.config" />
     <None Include="Properties\Settings.settings">
       <Generator>SettingsSingleFileGenerator</Generator>
       <LastGenOutput>Settings.Designer.cs</LastGenOutput>
     </None>
     <Compile Include="Properties\Settings.Designer.cs">
diff --git a/DatabaseSchemaViewer/Form1.Designer.cs b/DatabaseSchemaViewer/Form1.Designer.cs
index 885c1c2..fa75598 100644
--- a/DatabaseSchemaViewer/Form1.Designer.cs
+++ b/DatabaseSchemaViewer/Form1.Designer.cs
@@ -34,10 +34,11 @@ private void InitializeComponent()
             this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel();
             this.splitContainer1 = new System.Windows.Forms.SplitContainer();
             this.toolStrip1 = new System.Windows.Forms.ToolStrip();
             this.openSchema = new System.Windows.Forms.ToolStripButton();
             this.saveSchema = new System.Windows.Forms.ToolStripButton();
+            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
             this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
             this.toolStripButton2 = new System.Windows.Forms.ToolStripButton();
             this.label3 = new System.Windows.Forms.Label();
             this.SchemaOwner = new System.Windows.Forms.TextBox();
             this.ReadSchema = new System.Windows.Forms.Button();
@@ -49,12 +50,13 @@ private void InitializeComponent()
             this.progressBar1 = new System.Windows.Forms.ProgressBar();
             this.treeView1 = new System.Windows.Forms.TreeView();
             this.errorProvider1 = new System.Windows.Forms.ErrorProvider(this.components);
             this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker();
             this.treeContext = new System.Windows.Forms.ContextMenuStrip(this.components);
-            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
+            this.tsbQuote = new System.Windows.Forms.ToolStripButton();
             this.statusStrip1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
             this.splitContainer1.Panel1.SuspendLayout();
             this.splitContainer1.Panel2.SuspendLayout();
             this.splitContainer1.SuspendLayout();
             this.toolStrip1.SuspendLayout();
             ((System.ComponentModel.ISupportInitialize)(this.errorProvider1)).BeginInit();
@@ -107,11 +109,12 @@ private void InitializeComponent()
             this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
             this.openSchema,
             this.saveSchema,
             this.toolStripSeparator1,
             this.toolStripButton1,
-            this.toolStripButton2});
+            this.toolStripButton2,
+            this.tsbQuote});
             this.toolStrip1.Location = new System.Drawing.Point(0, 0);
             this.toolStrip1.Name = "toolStrip1";
             this.toolStrip1.Size = new System.Drawing.Size(625, 25);
             this.toolStrip1.TabIndex = 7;
             this.toolStrip1.Text = "toolStrip1";
@@ -137,10 +140,15 @@ private void InitializeComponent()
             this.saveSchema.Size = new System.Drawing.Size(23, 22);
             this.saveSchema.Text = "Save";
             this.saveSchema.ToolTipText = "Save Schema";
             this.saveSchema.Click += new System.EventHandler(this.SaveSchemaClick);
             // 
+            // toolStripSeparator1
+            // 
+            this.toolStripSeparator1.Name = "toolStripSeparator1";
+            this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
+            // 
             // toolStripButton1
             // 
             this.toolStripButton1.Enabled = false;
             this.toolStripButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton1.Image")));
             this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta;
@@ -267,14 +275,22 @@ private void InitializeComponent()
             // treeContext
             // 
             this.treeContext.Name = "treeContext";
             this.treeContext.Size = new System.Drawing.Size(61, 4);
             // 
-            // toolStripSeparator1
+            // tsbQuote
             // 
-            this.toolStripSeparator1.Name = "toolStripSeparator1";
-            this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
+            this.tsbQuote.Checked = true;
+            this.tsbQuote.CheckOnClick = true;
+            this.tsbQuote.CheckState = System.Windows.Forms.CheckState.Checked;
+            this.tsbQuote.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+            this.tsbQuote.Image = ((System.Drawing.Image)(resources.GetObject("tsbQuote.Image")));
+            this.tsbQuote.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.tsbQuote.Name = "tsbQuote";
+            this.tsbQuote.Size = new System.Drawing.Size(87, 22);
+            this.tsbQuote.Text = "Escape Names";
+            this.tsbQuote.Click += new System.EventHandler(this.tsbQuote_Click);
             // 
             // Form1
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
@@ -288,10 +304,11 @@ private void InitializeComponent()
             this.statusStrip1.ResumeLayout(false);
             this.statusStrip1.PerformLayout();
             this.splitContainer1.Panel1.ResumeLayout(false);
             this.splitContainer1.Panel1.PerformLayout();
             this.splitContainer1.Panel2.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
             this.splitContainer1.ResumeLayout(false);
             this.toolStrip1.ResumeLayout(false);
             this.toolStrip1.PerformLayout();
             ((System.ComponentModel.ISupportInitialize)(this.errorProvider1)).EndInit();
             this.ResumeLayout(false);
@@ -321,8 +338,9 @@ private void InitializeComponent()
         private System.Windows.Forms.ContextMenuStrip connectionContext;
         private System.Windows.Forms.ContextMenuStrip treeContext;
         private System.Windows.Forms.ToolStripButton openSchema;
         private System.Windows.Forms.ToolStripButton saveSchema;
         private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
+        private System.Windows.Forms.ToolStripButton tsbQuote;
     }
 }
 
diff --git a/DatabaseSchemaViewer/Form1.cs b/DatabaseSchemaViewer/Form1.cs
index 74b9e17..bf9b2cd 100644
--- a/DatabaseSchemaViewer/Form1.cs
+++ b/DatabaseSchemaViewer/Form1.cs
@@ -323,14 +323,14 @@ private void TreeMouseUp(object sender, MouseEventArgs e)
             var trigger = node.Tag as DatabaseTrigger;
             var index = node.Tag as DatabaseIndex;
             if (schema != null)
             {
                 var create = new ToolStripMenuItem("CREATE TABLEs to clipboard");
-                create.Click += (s, ea) => new SqlTasks(sqlType).BuildAllTableDdl(schema);
+                create.Click += (s, ea) => BuildSqlTasks(sqlType).BuildAllTableDdl(schema);
                 menu.Items.Add(create);
                 var deletes = new ToolStripMenuItem("DELETE all table data (in logical order) to clipboard");
-                deletes.Click += (s, ea) => new SqlTasks(sqlType).DeleteAllData(schema);
+                deletes.Click += (s, ea) => BuildSqlTasks(sqlType).DeleteAllData(schema);
                 menu.Items.Add(deletes);
             }
             else if (view != null)
             {
                 //views are based on tables, so do them first
@@ -341,73 +341,73 @@ private void TreeMouseUp(object sender, MouseEventArgs e)
                 BuildTableMenu(menu, table, sqlType);
             }
             else if (pack != null)
             {
                 var create = new ToolStripMenuItem("CREATE PACKAGE " + pack.Name + " to clipboard");
-                create.Click += (s, ea) => new SqlTasks(sqlType).BuildPackage(pack);
+                create.Click += (s, ea) => BuildSqlTasks(sqlType).BuildPackage(pack);
                 menu.Items.Add(create);
             }
             else if (fun != null)
             {
                 var create = new ToolStripMenuItem("CREATE FUNCTION " + fun.Name + " to clipboard");
-                create.Click += (s, ea) => new SqlTasks(sqlType).BuildFunction(fun);
+                create.Click += (s, ea) => BuildSqlTasks(sqlType).BuildFunction(fun);
                 menu.Items.Add(create);
             }
             else if (sproc != null)
             {
                 if (!string.IsNullOrEmpty(sproc.Sql))
                 {
                     var create = new ToolStripMenuItem("CREATE STORED PROC " + sproc.Name + " to clipboard");
-                    create.Click += (s, ea) => new SqlTasks(sqlType).BuildProcedure(sproc);
+                    create.Click += (s, ea) => BuildSqlTasks(sqlType).BuildProcedure(sproc);
                     menu.Items.Add(create);
 
                     var bar = new ToolStripSeparator();
                     menu.Items.Add(bar);
                 }
 
                 var code = new ToolStripMenuItem("C# class to clipboard");
-                code.Click += (s, ea) => new SqlTasks(sqlType).BuildProcedureCode(_databaseSchema, sproc);
+                code.Click += (s, ea) => BuildSqlTasks(sqlType).BuildProcedureCode(_databaseSchema, sproc);
                 menu.Items.Add(code);
 
             }
             else if (column != null)
             {
                 var add = new ToolStripMenuItem("ADD COLUMN " + column.Name + " to clipboard");
-                add.Click += (s, ea) => new SqlTasks(sqlType).BuildAddColumn(column);
+                add.Click += (s, ea) => BuildSqlTasks(sqlType).BuildAddColumn(column);
                 menu.Items.Add(add);
                 var alter = new ToolStripMenuItem("ALTER COLUMN " + column.Name + " to clipboard");
-                alter.Click += (s, ea) => new SqlTasks(sqlType).BuildAlterColumn(column);
+                alter.Click += (s, ea) => BuildSqlTasks(sqlType).BuildAlterColumn(column);
                 menu.Items.Add(alter);
             }
             else if (constraint != null)
             {
                 var parentTable = node.Parent.Parent.Tag as DatabaseTable;
                 var add = new ToolStripMenuItem("ADD CONSTRAINT " + constraint.Name + " to clipboard");
-                add.Click += (s, ea) => new SqlTasks(sqlType).BuildAddConstraint(parentTable, constraint);
+                add.Click += (s, ea) => BuildSqlTasks(sqlType).BuildAddConstraint(parentTable, constraint);
                 menu.Items.Add(add);
                 var drop = new ToolStripMenuItem("DROP CONSTRAINT " + constraint.Name + " to clipboard");
-                drop.Click += (s, ea) => new SqlTasks(sqlType).BuildDropConstraint(parentTable, constraint);
+                drop.Click += (s, ea) => BuildSqlTasks(sqlType).BuildDropConstraint(parentTable, constraint);
                 menu.Items.Add(drop);
             }
             else if (trigger != null)
             {
                 var parentTable = node.Parent.Parent.Tag as DatabaseTable;
                 var add = new ToolStripMenuItem("ADD TRIGGER " + trigger.Name + " to clipboard");
-                add.Click += (s, ea) => new SqlTasks(sqlType).BuildAddTrigger(parentTable, trigger);
+                add.Click += (s, ea) => BuildSqlTasks(sqlType).BuildAddTrigger(parentTable, trigger);
                 menu.Items.Add(add);
                 var drop = new ToolStripMenuItem("DROP TRIGGER " + trigger.Name + " to clipboard");
-                drop.Click += (s, ea) => new SqlTasks(sqlType).BuildDropTrigger(trigger);
+                drop.Click += (s, ea) => BuildSqlTasks(sqlType).BuildDropTrigger(trigger);
                 menu.Items.Add(drop);
             }
             else if (index != null)
             {
                 var parentTable = node.Parent.Parent.Tag as DatabaseTable;
                 var add = new ToolStripMenuItem("ADD INDEX " + index.Name + " to clipboard");
-                add.Click += (s, ea) => new SqlTasks(sqlType).BuildAddIndex(parentTable, index);
+                add.Click += (s, ea) => BuildSqlTasks(sqlType).BuildAddIndex(parentTable, index);
                 menu.Items.Add(add);
                 var drop = new ToolStripMenuItem("DROP INDEX " + index.Name + " to clipboard");
-                drop.Click += (s, ea) => new SqlTasks(sqlType).BuildDropIndex(parentTable, index);
+                drop.Click += (s, ea) => BuildSqlTasks(sqlType).BuildDropIndex(parentTable, index);
                 menu.Items.Add(drop);
             }
 
 
             menu.Show(treeView1, p);
@@ -415,70 +415,75 @@ private void TreeMouseUp(object sender, MouseEventArgs e)
             treeView1.SelectedNode = _lastSelectedNode;
             _lastSelectedNode = null;
 
         }
 
+        private SqlTasks BuildSqlTasks(SqlType sqlType)
+        {
+            return new SqlTasks(sqlType, tsbQuote.Checked);
+        }
+
         private void BuildViewMenu(ToolStrip menu, DatabaseView view, SqlType sqlType)
         {
             if (!string.IsNullOrEmpty(view.Sql))
             {
                 var create = new ToolStripMenuItem("CREATE VIEW " + view.Name + " to clipboard");
-                create.Click += (s, ea) => new SqlTasks(sqlType).BuildView(view);
+                create.Click += (s, ea) => BuildSqlTasks(sqlType).BuildView(view);
                 menu.Items.Add(create);
 
                 var bar = new ToolStripSeparator();
                 menu.Items.Add(bar);
             }
 
             var select = new ToolStripMenuItem("SELECT VIEW to clipboard");
-            select.Click += (s, ea) => new SqlTasks(sqlType).BuildTableSelect(view);
+            select.Click += (s, ea) => BuildSqlTasks(sqlType).BuildTableSelect(view);
             menu.Items.Add(select);
 
             var selectPaged = new ToolStripMenuItem("SELECT VIEW PAGED to clipboard");
-            selectPaged.Click += (s, ea) => new SqlTasks(sqlType).BuildTableSelectPaged(view);
+            selectPaged.Click += (s, ea) => BuildSqlTasks(sqlType).BuildTableSelectPaged(view);
             menu.Items.Add(selectPaged);
         }
 
         private void BuildTableMenu(ToolStrip menu, DatabaseTable table, SqlType sqlType)
         {
             if (menu == null) throw new ArgumentNullException("menu");
             var create = new ToolStripMenuItem("CREATE TABLE " + table.Name + " to clipboard");
-            create.Click += (s, ea) => new SqlTasks(sqlType).BuildTableDdl(table);
+            create.Click += (s, ea) => BuildSqlTasks(sqlType).BuildTableDdl(table);
             menu.Items.Add(create);
 
             var drop = new ToolStripMenuItem("DROP TABLE " + table.Name + " to clipboard");
-            drop.Click += (s, ea) => new SqlTasks(sqlType).BuildDropTable(table);
+            drop.Click += (s, ea) => BuildSqlTasks(sqlType).BuildDropTable(table);
             menu.Items.Add(drop);
 
             var bar = new ToolStripSeparator();
             menu.Items.Add(bar);
 
             var select = new ToolStripMenuItem("SELECT TABLE to clipboard");
-            select.Click += (s, ea) => new SqlTasks(sqlType).BuildTableSelect(table);
+            select.Click += (s, ea) => BuildSqlTasks(sqlType).BuildTableSelect(table);
             menu.Items.Add(select);
 
             var selectPaged = new ToolStripMenuItem("SELECT TABLE PAGED to clipboard");
-            selectPaged.Click += (s, ea) => new SqlTasks(sqlType).BuildTableSelectPaged(table);
+            selectPaged.Click += (s, ea) => BuildSqlTasks(sqlType).BuildTableSelectPaged(table);
             menu.Items.Add(selectPaged);
 
             var insert = new ToolStripMenuItem("INSERT TABLE to clipboard");
-            insert.Click += (s, ea) => new SqlTasks(sqlType).BuildTableInsert(table);
+            insert.Click += (s, ea) => BuildSqlTasks(sqlType).BuildTableInsert(table);
             menu.Items.Add(insert);
 
             var update = new ToolStripMenuItem("UPDATE TABLE to clipboard");
-            update.Click += (s, ea) => new SqlTasks(sqlType).BuildTableUpdate(table);
+            update.Click += (s, ea) => BuildSqlTasks(sqlType).BuildTableUpdate(table);
             menu.Items.Add(update);
 
             var bar2 = new ToolStripSeparator();
             menu.Items.Add(bar2);
 
             var code = new ToolStripMenuItem("C# class to clipboard");
-            code.Click += (s, ea) => new SqlTasks(sqlType).BuildClass(table);
+            code.Click += (s, ea) => BuildSqlTasks(sqlType).BuildClass(table);
             menu.Items.Add(code);
 
             var data = new ToolStripMenuItem("INSERT (first 100 rows) to clipboard");
-            data.Click += (s, ea) => new SqlTasks(sqlType).GetData(table, ConnectionString.Text.Trim(), (string)DataProviders.SelectedItem);
+            data.Click += (s, ea) => BuildSqlTasks(sqlType).GetData(table, ConnectionString.Text.Trim(), (string)DataProviders.SelectedItem);
             menu.Items.Add(data);
         }
 
         private SqlType FindSqlType()
         {
@@ -543,7 +548,11 @@ private void OpenSchemaClick(object sender, EventArgs e)
                     }
                 }
             }
         }
 
+        private void tsbQuote_Click(object sender, EventArgs e)
+        {
+            tsbQuote.ForeColor = tsbQuote.Checked ? SystemColors.ControlText : SystemColors.InactiveCaption;
+        }
     }
 }
diff --git a/DatabaseSchemaViewer/Form1.resx b/DatabaseSchemaViewer/Form1.resx
index 0125974..b8d08c1 100644
--- a/DatabaseSchemaViewer/Form1.resx
+++ b/DatabaseSchemaViewer/Form1.resx
@@ -110,102 +110,117 @@
   </resheader>
   <resheader name="version">
     <value>2.0</value>
   </resheader>
   <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
   <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+  <metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>17, 17</value>
   </metadata>
-  <metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+  <metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>402, 17</value>
   </metadata>
-  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
   <data name="openSchema.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJ0SURBVDhPvZNJSBRgGIbn0KFLFpmRBEmWiAWDgSHVIcSK
-        cqVcQcmFyo0yQzHHpRm3UWdxnVLRZkZt1NHKUgwrhEKRCC0XSkzNgqJSTA2V3J7GEYam7OClH97Lz/c+
-        3/v9i0DwP1ZWSbWrpFDH9VwtUpWeZJkmZUN9Q+NV+EQpgldNl5MqrdINsIRMtV9IfAmCxpr8AIP4U611
-        UsW/ukSJSj19YxR4RxUYAQz1aZifajDq56SOxXE1eq2CppqM9PUgPtFKvCML8YgoRtBQpWRustbMvPyl
-        lMWBOGpv51Jdlo26JJ3ygjRuyUUU5yRiBq3TyJj7pjF1XjGYGRLBQMS6+gtwpyKHH5/LjbFXzW2NMqMe
-        6fNo1uVwvzobvToDXbkEreoGlYUplClFqGRJa2mqy7OZ+VDEauzRDjFNtUqWRyUwlmmu94a9kWQYjIc3
-        MfTW+xMb5lUlUKsymB7OhY9yHtQp6HosXyv6fYTXIdDty1KnO/NPXHhXJST6/Mnpqxc8DwoqCsV8fyth
-        rDOVJp2clREx9EeuAXrDDcZAlrq8mG8/xUzrMSYaDyGJsiPQ1bLAeJilylQm+pK4WyOj57khyWCcAXAR
-        eoJZeXGWhWdnmG07zmSTE1/rHOjO2kaQuy1O9lvsjQBVnoj+9jTu1eTBcBq8MsR96cdChwezT12YanZm
-        XC/kk2Y/A3JLxBH7cDxg3WK6yiJpIg3aXAYeRtOdLzCpS76J9pzNtKRvpT7FCnXibm5esyHIbe+Ks6ON
-        mwmQn5lAvvgS0qRQkq8EEBvuRZj/Cc6dPoLrUSGHhXY42O5mj/UOdm63YJelhflD2tCvWqf4F+fW5Qkp
-        G1zGAAAAAElFTkSuQmCC
+        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJ0SURBVDhPvZJZSNRRHEb/Dz30kkVmJEKSJWKBGBhSPYQo
+        Ua6UKyi5UOkoZYZijksz7jqL65SKNuPSqKPVlGJYIRSKRGi5UGJqFhSVYmqo5HYaR5EsH4KgDz643HvP
+        4cflCv8lGcXVztICLddyKslS6UiUaZLWjv4uIbEqvEWKoJX1pYQKs1SDLC5d7RscW4zQWJPnbyi/t6Uu
+        S2GkN4lIXOLhE6XAS5RvFDDYq2FussHYHxNaFsbU6CoV6GvSUteYDfGOVOIVUYB7eBFCQ5WS2YnaDfDS
+        5xIW+mOovZVDdWkm6uJUyvJTuCkXU5Qdz5pnNXUaGbNfNevwsgFmUAz94Zv2D8Ht8my+fypbh1sbZcY+
+        1OXSpM3mXnUmOnUa2jIplarrVBQkUaoUo5IlrMqqyzKZfl9oHHukXYK+VsnSiBRG0zf2nWFvOBEGYuF1
+        FD31fkSHelYJalUaU0M58EHO/ToFnY/kq5d+Hf1VMHT5sNjhxtxjJ95W2SE65zJ15bzHIaG8QMK3N1JG
+        O5LRa+UsD0ugL2IV7AkzgAEsdnoy13aS6ZbjjDceRiqyJsDZNN/4BiXKZMZ7E7hTI6P7mWGSgRiD4AJ0
+        B7H8/AzzT08z03qCCb0DX+ps6crYQaCbFQ4222yMAlWumL62FO7W5MJQCrw0jPvCl/l2d2aeODHZ5MiY
+        zo6PmgP0y02RhO/H/qB5sxFeSWFWPA2VOfQ/iKQrT1hvp3wLbdlbaU7dTn2SGep4C25ctSTQdd+yo72l
+        6xouCHnpceRJLpKVEELiZX+iwzwJ9XPh7KmjOB+z44idNbZWFuw138XunSbsMTXZ+A/+LYLwE+S85Qd1
+        BNSrAAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="saveSchema.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAItSURBVDhPrZPdS5NxFMf9F7zvJvCi25oaw7VYDZ5yDmXZ
-        MKyIUp/wNU2X+UKKpWnU8gWyFS6dtFpNwklFvoApYiKLpWhl5oqmOHxFJ4LBt9/5Rc8v07rJH5zLz+c8
-        55zvExa2E+/F8xCoPO0raHMv45FzAS3NQdyzzaCh/hust/y4XjWJ8rKPKC4aQ0H+CC7k+KD0JrCnG6iv
-        W8e/3tr6BgxJPTiR9IyXInA/XeKCmurFv/IEBxfWcND0EiqVDPNxlxA4H85zQXnZ9LaCX/DnwBIijR4U
-        XZ7CMVOrENibZrngkuXTFsHv8LuJIPZIbuTljiMh3i4EjXcCXJCdNbJJ8Cc84Atgl84JWR6G0WgTgrra
-        r1wgpw0rgu3g7qEvCI9pxslTrxEb2yAEN2qm0NUJdkrgzLk3MJ/u59umhdHM9NnU+Sfci0TzK0iSVQiu
-        VkygwwOWAaDV8Z3dfRVVlXN8qbQwmjkzw6fAcQnt0OurhaCkeByux8AD+wYLTgiG5NxNZTprQXJ6Ke8c
-        F8/goy7odBVCYCkYZTBQezvEO5OAhQSRGgneD7MYnZyDnH8Nhw1tHNYcckCrLRUCiqXtLpTPJgHB5wtv
-        4r1/Hv6ZZVy8YkWUzsHgFkQduA9NTKEQZGa8ZXOv8Jkj9C7s3ifhSUcfPJ0D6OodQv+gF0eMZqi0TYhm
-        8F51I9TqPCHISvcmpqb08XhSwigkdGc6FW2bFkYzU1cqgvdHZwvB//zRPwBCVjq+3Cul5wAAAABJRU5E
-        rkJggg==
+        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIzSURBVDhPrZLrS9NRGMd//0LvexP0orc1NYZrsRr8yjWU
+        ZcOwIrr9wltpuswLKZamUcsLZCtcOmm1moSTiryAKWIii6VoZeaKpji8ohPB4Nt5zn55sqIX0QPPm8P5
+        fM55LtJ/iefPIqD0tS6hxbuIh+45NDWGcdcxhbrar7DfDOJaxThKSz6gsGAEeblDOH8uABWXJAK7OoHa
+        mlX8LVZW12BK6cLhlKc8VVySvE8WuKCqcl69+nsQHJ5bwW7LC2g0CqyHPELgfjDLBaUlk+r1jfED/hRa
+        QIzZh4JLEzhoaRYCZ8M0F1y0fVQRET/Db8fC2CZ7kZM9iqREpxDU3w5xQVbmkIpF41e4LxDCZoMbijII
+        s9khBDXVX7hAOTOoon+GOwc+Y1N8I44cfYWEhDohuF41gY52sFECx0++hvVYL+82NYxqpm/Ty1G4G8nW
+        l5BluxBcKRtDmw9sB4Bm1zc292VUlM/wplLDqOaM9MA6fCCpFUZjpRAUFY7C8wi471xjixOBKTV7Q1pO
+        2JCaVhyFExm83wODoUwIbHnDDAaqb0X4ywSxY8ToZPjfT2N4fAZK7lXsNbVwWLfHBb2+WAhoLR13sP5t
+        EhB8Nv8G3gVnEZxaxIXLdsQaXAxuQuyue9DF5wtBRvobVvcSh7caPdiyQ8bjth742vvQ0T2A3n4/9pmt
+        0OgbEMfg7dp6aLU5QpCZ5k8+faqHrydtGC0JzZlGRd2mhlHN9ColwTvjsoTg30OSvgNCVjq+glI0hgAA
+        AABJRU5ErkJggg==
 </value>
   </data>
   <data name="toolStripButton1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKPSURBVDhPtVPbT9JhGOb/Ka2WmkW2DrpwXiFLFMVBHkCX
-        5IEfCYiVC7SSQ6EVtdKBupRKUVREZyBZnrC5VTYw55qYF61uujDNnl5/NBxzrqu+m2/79j6H93nfj8PZ
-        59xsmscdyyIargdRpw1iv7q4d7t9HRbzMltsvPUWY6PA8NAviITt7Ftfbwjysm6Ul/XsJbS2RDA0uAnv
-        yG9oNDNglAF4CNzv+gmtxoeii3YoazywWiOorQ2gtKQznoTPH8NA/war6h3Zhmc4Cnb2/IDD8Q022zpa
-        CNzcvILqqnHweJq9LqSSUbK8ReBtmE2LyOTdBu98ExoNC6S8yoIZJoCkoyXx4Ie2CDocn3GvdQVD7k1Y
-        74ZxWdGNzo4vaGtbhVrdR/Z9uKEPk/15iMUOul+guroLHFffJAyGZfh925TBFtneQGamheyGkJHegJwL
-        Jlytn0Cu0AZd/QcwqgUKcRLZ/Cc4c/oaEbhew6D/FAtsp+e0NB0qq1zofR7E+3drBHIRwSOyv4AKxRxK
-        ZW8glb7CKarjzEx/RL5oGKK8ZxAXuOGwf4e61g8+vxHB4DrlESaBcchknr/gKXC5RhxPrcSxFMVuFmZT
-        Dy6VD+DB/Qg7KkY5Aamkg0jbIZePxJQFgk4cOVwcH+Lc7BqMRpo9M8aCd9LW65eg00V7jtqeItsB5BeM
-        g3uCQSCwtEvie7mCwsKu2Kjq6mahZCbZnhUElhFYIHBAmOtGgdiPPJGXbSG2xuHQV8hlj3FF5YdWO43E
-        xGKkJFdAVjrKKmdkWHDwQA6Baiibp3Sr0Nrq3btIxUXNSE/X4NxZM62zCVlZJkgo7YQECVsskQwiOUkB
-        p3P235/LbncjlRRPclU4lBgl+C/nD/Vt58a+BN5BAAAAAElFTkSuQmCC
+        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKTSURBVDhPtZLdT5JhGMbf/6e0WmoW2frQhfOIWKIoDvID
+        dEl+8JKCWLlAK/kopKJWOhCXWimKiugMJCs/sLFVNjHnmpgHrU46MM2ubl9NR67Ouk+e7d3zu67rvp6X
+        +dtca5jGTcsM6q6EUKMNYevzv8fhWIbFPM9dNl5/jeEhYKD/B8SiFu5bd9csFMXtKCnu2C1obYqiv28V
+        vsGf0GgmwKqC8BLc4/4OrcaP/HMOqCq9sFqjqKoKoqjQFSsiEAyjt2eFc/UNrsM7sAl3dnyD0/kFdvsy
+        mghubFxARfkI+HzN7hQy6RBFXiN4HWbTDNL5N8A/3YB6Q5icFzmYZYNIOFgYC9+zR9Hq/IjbtgX0e1Zh
+        vRXBBWU7XK2f0Ny8iOrqborvx1V9hOJPQyJx0vkUFRVtYNzdYzAY5hHwr1MHaxR7BenpFoo7i7TUOmSe
+        NeFS7SiyRHboat+BVYepxDGcETzEieOXScD9Agb9h+3CNnZOSdGhrNyNrichvH2zRJCbBO5T/DBKlVMo
+        kr+ETPYcx+geMzH+HjniAYizH0OS64HT8RXVVQEIBPUIhZapjwgZjEAu927Br8DjGXE4uQyHkpQ7XZhN
+        HThf0ou7d6LcU7GqUcikrSTaAoVicNtZKHThwP6C2BKnJpdgNNLbs8McvNG2Xj8HnW5z59/OMlkQObkj
+        4B1hEQzO7Yj4ny0gL69t+6lqaiahYse4nZUEywkWCp0QZXmQKwkgW+zjVtjCGSYy+xkK+QNcVAeg1Y4j
+        Pr4ASYmlkBcNcc5paRbs3ZNJUCV184hONWw2X+waG1OQ34jUVA1OnTTT72xCRoYJUmo7Lk7KXZZK+5CY
+        oERn5+Ru+M9xODxIJsejPDX2xW8K/IdhmF/1befG/fM1WAAAAABJRU5ErkJggg==
 </value>
   </data>
   <data name="toolStripButton2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         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
-        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
+        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
         gg==
 </value>
   </data>
-  <metadata name="connectionContext.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+  <data name="tsbQuote.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
+        YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
+        0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
+        bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
+        VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
+        c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
+        Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
+        mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
+        kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
+        TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+</value>
+  </data>
+  <metadata name="connectionContext.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>501, 17</value>
   </metadata>
-  <metadata name="errorProvider1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+  <metadata name="errorProvider1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>127, 17</value>
   </metadata>
-  <metadata name="backgroundWorker1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+  <metadata name="backgroundWorker1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>250, 17</value>
   </metadata>
-  <metadata name="treeContext.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+  <metadata name="treeContext.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>655, 17</value>
   </metadata>
 </root>
\ No newline at end of file
diff --git a/DatabaseSchemaViewer/Properties/Resources.Designer.cs b/DatabaseSchemaViewer/Properties/Resources.Designer.cs
index 3792332..e47dbf8 100644
--- a/DatabaseSchemaViewer/Properties/Resources.Designer.cs
+++ b/DatabaseSchemaViewer/Properties/Resources.Designer.cs
@@ -1,9 +1,9 @@
 ﻿//------------------------------------------------------------------------------
 // <auto-generated>
 //     This code was generated by a tool.
-//     Runtime Version:4.0.30319.1
+//     Runtime Version:4.0.30319.42000
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     the code is regenerated.
 // </auto-generated>
 //------------------------------------------------------------------------------
@@ -17,11 +17,11 @@ namespace DatabaseSchemaViewer.Properties {
     /// </summary>
     // This class was auto-generated by the StronglyTypedResourceBuilder
     // class via a tool like ResGen or Visual Studio.
     // To add or remove a member, edit your .ResX file then rerun ResGen
     // with the /str option, or rebuild your VS project.
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
     [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
     internal class Resources {
         
         private static global::System.Resources.ResourceManager resourceMan;
diff --git a/DatabaseSchemaViewer/Properties/Settings.Designer.cs b/DatabaseSchemaViewer/Properties/Settings.Designer.cs
index 37c0d5f..7eb569e 100644
--- a/DatabaseSchemaViewer/Properties/Settings.Designer.cs
+++ b/DatabaseSchemaViewer/Properties/Settings.Designer.cs
@@ -1,20 +1,20 @@
 ﻿//------------------------------------------------------------------------------
 // <auto-generated>
 //     This code was generated by a tool.
-//     Runtime Version:4.0.30319.34011
+//     Runtime Version:4.0.30319.42000
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     the code is regenerated.
 // </auto-generated>
 //------------------------------------------------------------------------------
 
 namespace DatabaseSchemaViewer.Properties {
     
     
     [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.6.0.0")]
     internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
         
         private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
         
         public static Settings Default {
diff --git a/DatabaseSchemaViewer/SqlTasks.cs b/DatabaseSchemaViewer/SqlTasks.cs
index da37f2c..65ae0cf 100644
--- a/DatabaseSchemaViewer/SqlTasks.cs
+++ b/DatabaseSchemaViewer/SqlTasks.cs
@@ -19,20 +19,24 @@ namespace DatabaseSchemaViewer
     class SqlTasks
     {
         private readonly IMigrationGenerator _migrationGenerator;
         private readonly SqlType _sqlType;
 
-        public SqlTasks(SqlType sqlType)
+        public SqlTasks(SqlType sqlType, bool escapeNames)
         {
             _sqlType = sqlType;
             _migrationGenerator = new DdlGeneratorFactory(sqlType).MigrationGenerator();
+            EscapeNames = _migrationGenerator.EscapeNames = escapeNames;
         }
 
+        public bool EscapeNames { get; set; }
+
         public void BuildAllTableDdl(DatabaseSchema databaseSchema)
         {
             var tg = new DdlGeneratorFactory(_sqlType).AllTablesGenerator(databaseSchema);
             tg.IncludeSchema = false;
+            tg.EscapeNames = EscapeNames;
             try
             {
                 var txt = tg.Write();
                 Clipboard.SetText(txt, TextDataFormat.UnicodeText);
             }
@@ -54,11 +58,11 @@ public void DeleteAllData(DatabaseSchema databaseSchema)
                     if (databaseTable.ForeignKeyChildren.Contains(databaseTable))
                     {
                         sb.AppendLine("-- WARNING: " + databaseTable.Name + " has SELF-JOIN");
                     }
                     var sqlWriter = new SqlWriter(databaseTable, _sqlType);
-                    sb.AppendLine("DELETE FROM " + sqlWriter.EscapedTableName);
+                    sb.AppendLine("DELETE FROM " + (EscapeNames ? sqlWriter.EscapedTableName : databaseTable.Name));
                 }
                 Clipboard.SetText(sb.ToString(), TextDataFormat.UnicodeText);
             }
             catch (Exception exception)
             {
@@ -72,10 +76,11 @@ public void GetData(DatabaseTable databaseTable, string connectionString, string
             {
                 var sw = new ScriptWriter();
                 sw.IncludeBlobs = false;
                 sw.IncludeIdentity = true;
                 sw.PageSize = 100;
+                sw.EscapeNames = EscapeNames;
                 var txt = sw.ReadTable(databaseTable, connectionString, providerName);
                 Clipboard.SetText(txt, TextDataFormat.UnicodeText);
             }
             catch (Exception exception)
             {
@@ -85,10 +90,11 @@ public void GetData(DatabaseTable databaseTable, string connectionString, string
 
         public void BuildTableDdl(DatabaseTable databaseTable)
         {
             var tg = new DdlGeneratorFactory(_sqlType).TableGenerator(databaseTable);
             tg.IncludeSchema = false;
+            tg.EscapeNames = EscapeNames;
             try
             {
                 var txt = tg.Write();
                 Clipboard.SetText(txt, TextDataFormat.UnicodeText);
             }
@@ -109,26 +115,35 @@ public void BuildDropTable(DatabaseTable table)
             {
                 Debug.WriteLine(exception.Message);
             }
         }
 
-        public void BuildTableSelect(DatabaseTable databaseTable)
+        private SqlWriter BuildSqlWriter(DatabaseTable databaseTable)
         {
             var sqlWriter = new SqlWriter(databaseTable, _sqlType);
+            sqlWriter.EscapeNames = EscapeNames;
+            return sqlWriter;
+        }
+
+        public void BuildTableSelect(DatabaseTable databaseTable)
+        {
+            var sqlWriter = BuildSqlWriter(databaseTable);
             try
             {
                 var txt = sqlWriter.SelectAllSql();
                 Clipboard.SetText(txt, TextDataFormat.UnicodeText);
             }
             catch (Exception exception)
             {
                 Debug.WriteLine(exception.Message);
             }
         }
+
+
         public void BuildTableSelectPaged(DatabaseTable databaseTable)
         {
-            var sqlWriter = new SqlWriter(databaseTable, _sqlType);
+            var sqlWriter = BuildSqlWriter(databaseTable);
             try
             {
                 var txt = sqlWriter.SelectPageSql();
                 Clipboard.SetText(txt, TextDataFormat.UnicodeText);
             }
@@ -137,11 +152,11 @@ public void BuildTableSelectPaged(DatabaseTable databaseTable)
                 Debug.WriteLine(exception.Message);
             }
         }
         public void BuildTableInsert(DatabaseTable databaseTable)
         {
-            var sqlWriter = new SqlWriter(databaseTable, _sqlType);
+            var sqlWriter = BuildSqlWriter(databaseTable);
             try
             {
                 var txt = sqlWriter.InsertSqlWithoutOutputParameter();
                 Clipboard.SetText(txt, TextDataFormat.UnicodeText);
             }
@@ -150,11 +165,11 @@ public void BuildTableInsert(DatabaseTable databaseTable)
                 Debug.WriteLine(exception.Message);
             }
         }
         public void BuildTableUpdate(DatabaseTable databaseTable)
         {
-            var sqlWriter = new SqlWriter(databaseTable, _sqlType);
+            var sqlWriter = BuildSqlWriter(databaseTable);
             try
             {
                 var txt = sqlWriter.UpdateSql();
                 Clipboard.SetText(txt, TextDataFormat.UnicodeText);
             }
diff --git a/DatabaseSchemaViewer/app.config b/DatabaseSchemaViewer/app.config
index 9f280fb..2283fd1 100644
--- a/DatabaseSchemaViewer/app.config
+++ b/DatabaseSchemaViewer/app.config
@@ -1,11 +1,15 @@
-﻿<?xml version="1.0" encoding="utf-8" ?>
+﻿<?xml version="1.0" encoding="utf-8"?>
 <configuration>
   <configSections>
-    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
-      <section name="DatabaseSchemaViewer.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
+    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+      <section name="DatabaseSchemaViewer.Properties.Settings"
+        type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
+        allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
     </sectionGroup>
+    <section name="oracle.manageddataaccess.client"
+      type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
   </configSections>
   <userSettings>
     <DatabaseSchemaViewer.Properties.Settings>
       <setting name="SchemaOwner" serializeAs="String">
         <value>dbo</value>
@@ -61,13 +65,25 @@
  type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />-->
       <!--<remove invariant="Npgsql" />
       <add name="Npgsql Data Provider" invariant="Npgsql"
            description=".Net Framework Data Provider for Postgresql Server"
          type="Npgsql.NpgsqlFactory, Npgsql, Version=2.0.11.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7"/>-->
+      <remove invariant="Oracle.ManagedDataAccess.Client"/>
+      <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver"
+        type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
     </DbProviderFactories>
   </system.data>
   <!-- VisualStudio 2008- remove this to run -->
   <startup useLegacyV2RuntimeActivationPolicy="true">
     <supportedRuntime version="v4.0"/>
     <supportedRuntime version="v2.0.50727"/>
   </startup>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <publisherPolicy apply="no"/>
+        <assemblyIdentity name="Oracle.ManagedDataAccess" publicKeyToken="89b483f429c47342" culture="neutral"/>
+        <bindingRedirect oldVersion="4.121.0.0 - 4.65535.65535.65535" newVersion="4.122.19.1"/>
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
 </configuration>
\ No newline at end of file
diff --git a/DatabaseSchemaViewer/packages.config b/DatabaseSchemaViewer/packages.config
new file mode 100644
index 0000000..6344f88
--- /dev/null
+++ b/DatabaseSchemaViewer/packages.config
@@ -0,0 +1,4 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="Oracle.ManagedDataAccess" version="19.8.0" targetFramework="net40" />
+</packages>
\ No newline at end of file
diff --git a/build.proj b/build.proj
index 10d6dc1..b03a314 100644
--- a/build.proj
+++ b/build.proj
@@ -18,11 +18,11 @@
   
   <Target Name="BuildViewer">
     <Message Text="Building SchemaViewer in .net 3.5" />
     <RemoveDir Directories="$(OutputPath)net35\"/>
     <MSBuild Projects="DatabaseSchemaViewer\DatabaseSchemaViewer.csproj" 
-		Properties="Configuration=Release;OutputPath=$(OutputPath)net35\;IntermediateOutputPath=$(ObjPath)Release\"/>
+		Properties="Configuration=net35;OutputPath=$(OutputPath)net35\;IntermediateOutputPath=$(ObjPath)Release\"/>
     <Message Text="SchemaViewer Built" />
 	<Copy SourceFiles="DatabaseSchemaReader\README.txt" DestinationFolder="$(OutputPath)" />
   </Target>
  
   <Target Name="BuildViewer4">

Vulnerable code: # Visual Studio 15
VisualStudioVersion = 15.0.26228.4
            _template = "INSERT INTO " + _sqlWriter.EscapedTableName + @" (
                cols.Add(_sqlWriter.EscapedColumnName(databaseColumn.Name));
            return SqlFormatProvider().Escape(name);
            sb.AppendLine(DropTables.Write(Schema, SqlFormatProvider()));
        public static string Write(DatabaseSchema schema, ISqlFormatProvider formatter)
                    sb.AppendLine("-- ALTER TABLE " + formatter.Escape(table.Name) + " DROP CONSTRAINT " + foreignKey.Name + lineEnding);

                sb.AppendLine("-- DROP TABLE " + formatter.Escape(table.Name) + lineEnding);
        /// Adds the table. If any primary key, unqiue or check constraints are attached, they are written too (don't write them individually). Foreign keys must be added separately (use <see cref="AddConstraint"/>)


using DatabaseSchemaReader.SqlGen.SqLite;
            return _ddlFactory.TableGenerator(databaseTable);
            return SqlFormatProvider().Escape(name);
            sb.AppendLine(DropTables.Write(Schema, SqlFormatProvider()));
            return new ConstraintWriter(Table) { IncludeSchema = IncludeSchema };
            sb.AppendLine(DropTables.Write(Schema, SqlFormatProvider()));
            return SqlFormatProvider().Escape(name);
        private readonly char _parameterPrefix;
        private readonly string _nameEscapeStart;
        private readonly string _nameEscapeEnd;
            switch (sqlType)
            return _table.Columns.Find(delegate(DatabaseColumn col)
    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
            this.toolStripButton2});
            // toolStripSeparator1
            this.toolStripSeparator1.Name = "toolStripSeparator1";
            this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
                create.Click += (s, ea) => new SqlTasks(sqlType).BuildAllTableDdl(schema);
                deletes.Click += (s, ea) => new SqlTasks(sqlType).DeleteAllData(schema);
                create.Click += (s, ea) => new SqlTasks(sqlType).BuildPackage(pack);
                create.Click += (s, ea) => new SqlTasks(sqlType).BuildFunction(fun);
                    create.Click += (s, ea) => new SqlTasks(sqlType).BuildProcedure(sproc);
                code.Click += (s, ea) => new SqlTasks(sqlType).BuildProcedureCode(_databaseSchema, sproc);
                add.Click += (s, ea) => new SqlTasks(sqlType).BuildAddColumn(column);
                alter.Click += (s, ea) => new SqlTasks(sqlType).BuildAlterColumn(column);
                add.Click += (s, ea) => new SqlTasks(sqlType).BuildAddConstraint(parentTable, constraint);
                drop.Click += (s, ea) => new SqlTasks(sqlType).BuildDropConstraint(parentTable, constraint);
                add.Click += (s, ea) => new SqlTasks(sqlType).BuildAddTrigger(parentTable, trigger);
                drop.Click += (s, ea) => new SqlTasks(sqlType).BuildDropTrigger(trigger);
                add.Click += (s, ea) => new SqlTasks(sqlType).BuildAddIndex(parentTable, index);
                drop.Click += (s, ea) => new SqlTasks(sqlType).BuildDropIndex(parentTable, index);
                create.Click += (s, ea) => new SqlTasks(sqlType).BuildView(view);
            select.Click += (s, ea) => new SqlTasks(sqlType).BuildTableSelect(view);
            selectPaged.Click += (s, ea) => new SqlTasks(sqlType).BuildTableSelectPaged(view);
            create.Click += (s, ea) => new SqlTasks(sqlType).BuildTableDdl(table);
            drop.Click += (s, ea) => new SqlTasks(sqlType).BuildDropTable(table);
            select.Click += (s, ea) => new SqlTasks(sqlType).BuildTableSelect(table);
            selectPaged.Click += (s, ea) => new SqlTasks(sqlType).BuildTableSelectPaged(table);
            insert.Click += (s, ea) => new SqlTasks(sqlType).BuildTableInsert(table);
            update.Click += (s, ea) => new SqlTasks(sqlType).BuildTableUpdate(table);
            code.Click += (s, ea) => new SqlTasks(sqlType).BuildClass(table);
            data.Click += (s, ea) => new SqlTasks(sqlType).GetData(table, ConnectionString.Text.Trim(), (string)DataProviders.SelectedItem);
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  <metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJ0SURBVDhPvZNJSBRgGIbn0KFLFpmRBEmWiAWDgSHVIcSK
        cqVcQcmFyo0yQzHHpRm3UWdxnVLRZkZt1NHKUgwrhEKRCC0XSkzNgqJSTA2V3J7GEYam7OClH97Lz/c+
        3/v9i0DwP1ZWSbWrpFDH9VwtUpWeZJkmZUN9Q+NV+EQpgldNl5MqrdINsIRMtV9IfAmCxpr8AIP4U611
        UsW/ukSJSj19YxR4RxUYAQz1aZifajDq56SOxXE1eq2CppqM9PUgPtFKvCML8YgoRtBQpWRustbMvPyl
        lMWBOGpv51Jdlo26JJ3ygjRuyUUU5yRiBq3TyJj7pjF1XjGYGRLBQMS6+gtwpyKHH5/LjbFXzW2NMqMe
        6fNo1uVwvzobvToDXbkEreoGlYUplClFqGRJa2mqy7OZ+VDEauzRDjFNtUqWRyUwlmmu94a9kWQYjIc3
        MfTW+xMb5lUlUKsymB7OhY9yHtQp6HosXyv6fYTXIdDty1KnO/NPXHhXJST6/Mnpqxc8DwoqCsV8fyth
        rDOVJp2clREx9EeuAXrDDcZAlrq8mG8/xUzrMSYaDyGJsiPQ1bLAeJilylQm+pK4WyOj57khyWCcAXAR
        eoJZeXGWhWdnmG07zmSTE1/rHOjO2kaQuy1O9lvsjQBVnoj+9jTu1eTBcBq8MsR96cdChwezT12YanZm
        XC/kk2Y/A3JLxBH7cDxg3WK6yiJpIg3aXAYeRtOdLzCpS76J9pzNtKRvpT7FCnXibm5esyHIbe+Ks6ON
        mwmQn5lAvvgS0qRQkq8EEBvuRZj/Cc6dPoLrUSGHhXY42O5mj/UOdm63YJelhflD2tCvWqf4F+fW5Qkp
        G1zGAAAAAElFTkSuQmCC
        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAItSURBVDhPrZPdS5NxFMf9F7zvJvCi25oaw7VYDZ5yDmXZ
        MKyIUp/wNU2X+UKKpWnU8gWyFS6dtFpNwklFvoApYiKLpWhl5oqmOHxFJ4LBt9/5Rc8v07rJH5zLz+c8
        55zvExa2E+/F8xCoPO0raHMv45FzAS3NQdyzzaCh/hust/y4XjWJ8rKPKC4aQ0H+CC7k+KD0JrCnG6iv
        W8e/3tr6BgxJPTiR9IyXInA/XeKCmurFv/IEBxfWcND0EiqVDPNxlxA4H85zQXnZ9LaCX/DnwBIijR4U
        XZ7CMVOrENibZrngkuXTFsHv8LuJIPZIbuTljiMh3i4EjXcCXJCdNbJJ8Cc84Atgl84JWR6G0WgTgrra
        r1wgpw0rgu3g7qEvCI9pxslTrxEb2yAEN2qm0NUJdkrgzLk3MJ/u59umhdHM9NnU+Sfci0TzK0iSVQiu
        VkygwwOWAaDV8Z3dfRVVlXN8qbQwmjkzw6fAcQnt0OurhaCkeByux8AD+wYLTgiG5NxNZTprQXJ6Ke8c
        F8/goy7odBVCYCkYZTBQezvEO5OAhQSRGgneD7MYnZyDnH8Nhw1tHNYcckCrLRUCiqXtLpTPJgHB5wtv
        4r1/Hv6ZZVy8YkWUzsHgFkQduA9NTKEQZGa8ZXOv8Jkj9C7s3ifhSUcfPJ0D6OodQv+gF0eMZqi0TYhm
        8F51I9TqPCHISvcmpqb08XhSwigkdGc6FW2bFkYzU1cqgvdHZwvB//zRPwBCVjq+3Cul5wAAAABJRU5E
        rkJggg==
        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
  <metadata name="connectionContext.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <metadata name="errorProvider1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <metadata name="backgroundWorker1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <metadata name="treeContext.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
//     Runtime Version:4.0.30319.1
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
//     Runtime Version:4.0.30319.34011
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")]
        public SqlTasks(SqlType sqlType)
                    sb.AppendLine("DELETE FROM " + sqlWriter.EscapedTableName);
        public void BuildTableSelect(DatabaseTable databaseTable)
            var sqlWriter = new SqlWriter(databaseTable, _sqlType);
            var sqlWriter = new SqlWriter(databaseTable, _sqlType);
            var sqlWriter = new SqlWriter(databaseTable, _sqlType);
﻿<?xml version="1.0" encoding="utf-8" ?>
    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
      <section name="DatabaseSchemaViewer.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
		Properties="Configuration=Release;OutputPath=$(OutputPath)net35\;IntermediateOutputPath=$(ObjPath)Release\"/>
Fixed code: # Visual Studio Version 16
VisualStudioVersion = 16.0.30225.117
		net35|Any CPU = net35|Any CPU
		net35|x86 = net35|x86
		{8280AFB4-9066-4656-A80E-23B859E5299C}.net35|Any CPU.ActiveCfg = Release|Any CPU
		{8280AFB4-9066-4656-A80E-23B859E5299C}.net35|Any CPU.Build.0 = Release|Any CPU
		{8280AFB4-9066-4656-A80E-23B859E5299C}.net35|x86.ActiveCfg = Release|Any CPU
		{8280AFB4-9066-4656-A80E-23B859E5299C}.net35|x86.Build.0 = Release|Any CPU
		{2881C1CA-88FC-4635-8B48-C0F1170C39B7}.net35|Any CPU.ActiveCfg = Release|Any CPU
		{2881C1CA-88FC-4635-8B48-C0F1170C39B7}.net35|Any CPU.Build.0 = Release|Any CPU
		{2881C1CA-88FC-4635-8B48-C0F1170C39B7}.net35|x86.ActiveCfg = Release|Any CPU
		{2881C1CA-88FC-4635-8B48-C0F1170C39B7}.net35|x86.Build.0 = Release|Any CPU
		{7EF4F6B5-100C-432A-9858-C7F3FEC14F5C}.net35|Any CPU.ActiveCfg = net45|Any CPU
		{7EF4F6B5-100C-432A-9858-C7F3FEC14F5C}.net35|Any CPU.Build.0 = net45|Any CPU
		{7EF4F6B5-100C-432A-9858-C7F3FEC14F5C}.net35|x86.ActiveCfg = net45|Any CPU
		{7EF4F6B5-100C-432A-9858-C7F3FEC14F5C}.net35|x86.Build.0 = net45|Any CPU
		{7BE356E2-11FD-4570-8523-EF512D476797}.net35|Any CPU.ActiveCfg = net35|Any CPU
		{7BE356E2-11FD-4570-8523-EF512D476797}.net35|Any CPU.Build.0 = net35|Any CPU
		{7BE356E2-11FD-4570-8523-EF512D476797}.net35|x86.ActiveCfg = net35|Any CPU
		{7BE356E2-11FD-4570-8523-EF512D476797}.net35|x86.Build.0 = net35|Any CPU
		{CE4A50D0-62F7-49A4-B216-7DEB7EA57147}.net35|Any CPU.ActiveCfg = Release|x86
		{CE4A50D0-62F7-49A4-B216-7DEB7EA57147}.net35|Any CPU.Build.0 = Release|x86
		{CE4A50D0-62F7-49A4-B216-7DEB7EA57147}.net35|x86.ActiveCfg = net45|x86
		{CE4A50D0-62F7-49A4-B216-7DEB7EA57147}.net35|x86.Build.0 = net45|x86
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {9D3E963B-CAE9-4937-86C7-E49C5DC2CDED}
	EndGlobalSection
        /// <summary>
        /// Escape table and column names (default true)
        /// </summary>
        public bool EscapeNames { get; set; } = true;

            _template = "INSERT INTO " + (EscapeNames ? _sqlWriter.EscapedTableName : _databaseTable.Name) + @" (
                var name = databaseColumn.Name;
                if (EscapeNames) name = _sqlWriter.EscapedColumnName(databaseColumn.Name);
                cols.Add(name);
        /// <summary>
        /// Escape table and column names (default true)
        /// </summary>
        public bool EscapeNames { get; set; } = true;

            w.EscapeNames = EscapeNames;
            w.EscapeNames = EscapeNames;
            EscapeNames = true;
        public bool EscapeNames { get; set; }

            return EscapeNames? SqlFormatProvider().Escape(name) : name;

            sb.AppendLine(DropTables.Write(Schema, SqlFormatProvider(), EscapeNames));
        public static string Write(DatabaseSchema schema, ISqlFormatProvider formatter, bool escapeNames)
                    sb.AppendLine("-- ALTER TABLE " + (escapeNames ? formatter.Escape(table.Name) : table.Name) + 
                                  " DROP CONSTRAINT " + foreignKey.Name + lineEnding);
                sb.AppendLine("-- DROP TABLE " + (escapeNames ? formatter.Escape(table.Name) : table.Name) + lineEnding);
        /// Escape the names (default true)
        /// </summary>
        bool EscapeNames { get; set; }
        /// <summary>
        /// Adds the table. If any primary key, unique or check constraints are attached, they are written too (don't write them individually). Foreign keys must be added separately (use <see cref="AddConstraint"/>)
        /// <summary>
        /// Escape the names (default true)
        /// </summary>
        bool EscapeNames { get; set; }
        /// <summary>
        /// Escape the table and column names
        /// </summary>
        bool EscapeNames { get; set; }

            EscapeNames = true;
        /// <summary>
        /// Escape any names
        /// </summary>
        public bool EscapeNames { get; set; }

            var tableGenerator = _ddlFactory.TableGenerator(databaseTable);
            if (!EscapeNames) tableGenerator.EscapeNames = false;
            return tableGenerator;
            return EscapeNames ? SqlFormatProvider().Escape(name) : name;
            constraintWriter.EscapeNames = EscapeNames;
            sb.AppendLine(DropTables.Write(Schema, SqlFormatProvider(), EscapeNames));
            return new ConstraintWriter(Table) { IncludeSchema = IncludeSchema, EscapeNames = EscapeNames};
            sb.AppendLine(DropTables.Write(Schema, SqlFormatProvider(), EscapeNames));
            EscapeNames = true;
        /// <summary>
        /// Escape any names
        /// </summary>
        public bool EscapeNames { get; set; }

            return EscapeNames? SqlFormatProvider().Escape(name) : name;
            EscapeNames = true;
        public bool EscapeNames { get; set; }

                tableGenerator.EscapeNames = EscapeNames;
                constraintWriter.EscapeNames = EscapeNames;
        private char _parameterPrefix;
        private string _nameEscapeStart;
        private string _nameEscapeEnd;
        private bool _escapeNames;
            _escapeNames = true;
            ParametersByType();
        }

        private void ParametersByType()
        {
            switch (_sqlType)
        /// <summary>
        /// Escape the names (default true)
        /// </summary>
        public bool EscapeNames
        {
            get { return _escapeNames; }
            set
            {
                _escapeNames = value;
                if (value)
                {
                    ParametersByType(); //reset the start and end
                }
                else
                {
                    _nameEscapeStart = _nameEscapeEnd = string.Empty; //empty them out
                }
            }
        }
            return _table.Columns.Find(delegate (DatabaseColumn col)
        [TestMethod]
        public void TestSqlServerNoEscapeNames()
        {

            //arrange
            var migration = new DdlGeneratorFactory(SqlType.SqlServer).MigrationGenerator();
            migration.EscapeNames = false;

            var table = MigrationCommon.CreateTestTable("Orders");
            table.SchemaOwner = "dbo";
            var column = CreateNewColumn();

            //act
            migration.IncludeSchema = false;
            var sql = migration.AddColumn(table, column);

            //assert
            Assert.IsTrue(sql.StartsWith("ALTER TABLE Orders ADD COUNTRY VARCHAR (20)", StringComparison.OrdinalIgnoreCase), "names should be quoted correctly");
        }
        [TestMethod]
        public void TestSqlServerNoEscapeNames()
        {

            //arrange
            var migration = new DdlGeneratorFactory(SqlType.SqlServer).MigrationGenerator();
            migration.EscapeNames = false;

            var table = MigrationCommon.CreateTestTable("Orders");
            table.SchemaOwner = "dbo";
            var fk = MigrationCommon.CreateForeignKey(table);

            //act
            migration.IncludeSchema = false;
            var sql = migration.AddConstraint(table, fk);

            //assert
            Assert.IsTrue(sql.StartsWith("ALTER TABLE Orders ADD CONSTRAINT FK_Orders FOREIGN KEY (Parent) REFERENCES Orders (Id)", StringComparison.OrdinalIgnoreCase), "names should be quoted correctly");
        }
        [TestMethod]
        public void TestOracleNoSchemaNoEscapeNames()
        {

            //arrange
            var migration = new DdlGeneratorFactory(SqlType.Oracle).MigrationGenerator();
            migration.EscapeNames = false;

            var table = MigrationCommon.CreateTestTable("Orders");
            table.SchemaOwner = "dbo";
            var fk = MigrationCommon.CreateForeignKey(table);

            //act
            migration.IncludeSchema = false;
            var sql = migration.AddConstraint(table, fk);

            //assert
            Assert.IsTrue(sql.StartsWith("ALTER TABLE Orders ADD CONSTRAINT FK_Orders FOREIGN KEY (Parent) REFERENCES Orders (Id)", StringComparison.OrdinalIgnoreCase), "names should be quoted correctly");
        }


        [TestMethod]
        public void TestSqlServerNoSchemaNoEscapeNames()
        {
            //arrange
            var migration = new DdlGeneratorFactory(SqlType.SqlServer).MigrationGenerator();
            migration.EscapeNames = false;

            var table = MigrationCommon.CreateTestTable("Orders");
            table.SchemaOwner = "dbo";
            var column = MigrationCommon.CreateNewColumn();
            var index = MigrationCommon.CreateUniqueIndex(column, "COUNTRY");

            //act
            migration.IncludeSchema = false;
            var sql = migration.AddIndex(table, index);

            //assert
            Assert.IsTrue(sql.StartsWith("CREATE UNIQUE INDEX UI_COUNTRY ON Orders(COUNTRY)", StringComparison.OrdinalIgnoreCase), "names should be quoted correctly");
        }

        [TestMethod]
        public void TestAddPrimaryKeyNoEscapeNames()
        {

            //arrange
            var migration = new DdlGeneratorFactory(SqlType.SqlServer).MigrationGenerator();
            migration.EscapeNames = false;

            var schema = new DatabaseSchema(null, SqlType.SqlServer);
            var table = schema.AddTable("Test")
                .AddColumn<int>("Id")
                .AddColumn<string>("Name")
                .Table;
            var pk = new DatabaseConstraint
            {
                Name = "Test_PK",
                ConstraintType = ConstraintType.PrimaryKey
            };
            pk.Columns.Add("Id");

            //act
            var sql = migration.AddConstraint(table, pk);

            //assert
            Assert.IsTrue(sql.IndexOf("ADD CONSTRAINT Test_PK PRIMARY KEY (Id)", StringComparison.OrdinalIgnoreCase) != -1, "adding a primary key");
        }

        [TestMethod]
        public void TestSqlServerCreateTableNoSchemaNoEscapeNames()
        {

            //arrange
            var migration = new DdlGeneratorFactory(SqlType.SqlServer).MigrationGenerator();
            migration.EscapeNames = false;

            var table = MigrationCommon.CreateTestTable("Orders");
            table.SchemaOwner = "dbo";

            //act
            migration.IncludeSchema = false;
            var sql = migration.AddTable(table);

            //assert
            Assert.IsTrue(sql.StartsWith("CREATE TABLE Orders", StringComparison.OrdinalIgnoreCase), "table name should be quoted correctly");
            Assert.IsTrue(sql.Contains("ALTER TABLE Orders ADD CONSTRAINT PK_Orders PRIMARY KEY (Id)"), "Primary key should be set with name");
        }
        [TestMethod]
        public void TestSqlServerNoSchemaNoEscapeNames()
        {

            //arrange
            var migration = new DdlGeneratorFactory(SqlType.SqlServer).MigrationGenerator();
            migration.EscapeNames = false;

            var table = MigrationCommon.CreateTestTable("Orders");
            table.SchemaOwner = "dbo";
            var column = MigrationCommon.CreateNewColumn();

            //act
            migration.IncludeSchema = false;
            var sql = migration.DropColumn(table, column);

            //assert
            Assert.IsTrue(sql.StartsWith("ALTER TABLE Orders DROP COLUMN COUNTRY", StringComparison.OrdinalIgnoreCase), "names should be quoted correctly");
        }
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <TargetFrameworkProfile />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'net35|AnyCPU'">
     <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
    <OutputPath>bin\net35\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <Optimize>true</Optimize>
    <DebugType>pdbonly</DebugType>
    <PlatformTarget>AnyCPU</PlatformTarget>
    <LangVersion>7.3</LangVersion>
    <ErrorReport>prompt</ErrorReport>
    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
  </PropertyGroup>
  <ItemGroup Condition="'$(Configuration)' != 'net35'">
    <Reference Include="Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=MSIL">
      <HintPath>..\packages\Oracle.ManagedDataAccess.19.8.0\lib\net40\Oracle.ManagedDataAccess.dll</HintPath>
    </Reference>
  </ItemGroup>
    <None Include="packages.config" />
            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
            this.tsbQuote = new System.Windows.Forms.ToolStripButton();
            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
            this.toolStripButton2,
            this.tsbQuote});
            // toolStripSeparator1
            // 
            this.toolStripSeparator1.Name = "toolStripSeparator1";
            this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
            // 
            // tsbQuote
            this.tsbQuote.Checked = true;
            this.tsbQuote.CheckOnClick = true;
            this.tsbQuote.CheckState = System.Windows.Forms.CheckState.Checked;
            this.tsbQuote.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
            this.tsbQuote.Image = ((System.Drawing.Image)(resources.GetObject("tsbQuote.Image")));
            this.tsbQuote.ImageTransparentColor = System.Drawing.Color.Magenta;
            this.tsbQuote.Name = "tsbQuote";
            this.tsbQuote.Size = new System.Drawing.Size(87, 22);
            this.tsbQuote.Text = "Escape Names";
            this.tsbQuote.Click += new System.EventHandler(this.tsbQuote_Click);
            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
        private System.Windows.Forms.ToolStripButton tsbQuote;
                create.Click += (s, ea) => BuildSqlTasks(sqlType).BuildAllTableDdl(schema);
                deletes.Click += (s, ea) => BuildSqlTasks(sqlType).DeleteAllData(schema);
                create.Click += (s, ea) => BuildSqlTasks(sqlType).BuildPackage(pack);
                create.Click += (s, ea) => BuildSqlTasks(sqlType).BuildFunction(fun);
                    create.Click += (s, ea) => BuildSqlTasks(sqlType).BuildProcedure(sproc);
                code.Click += (s, ea) => BuildSqlTasks(sqlType).BuildProcedureCode(_databaseSchema, sproc);
                add.Click += (s, ea) => BuildSqlTasks(sqlType).BuildAddColumn(column);
                alter.Click += (s, ea) => BuildSqlTasks(sqlType).BuildAlterColumn(column);
                add.Click += (s, ea) => BuildSqlTasks(sqlType).BuildAddConstraint(parentTable, constraint);
                drop.Click += (s, ea) => BuildSqlTasks(sqlType).BuildDropConstraint(parentTable, constraint);
                add.Click += (s, ea) => BuildSqlTasks(sqlType).BuildAddTrigger(parentTable, trigger);
                drop.Click += (s, ea) => BuildSqlTasks(sqlType).BuildDropTrigger(trigger);
                add.Click += (s, ea) => BuildSqlTasks(sqlType).BuildAddIndex(parentTable, index);
                drop.Click += (s, ea) => BuildSqlTasks(sqlType).BuildDropIndex(parentTable, index);
        private SqlTasks BuildSqlTasks(SqlType sqlType)
        {
            return new SqlTasks(sqlType, tsbQuote.Checked);
        }

                create.Click += (s, ea) => BuildSqlTasks(sqlType).BuildView(view);
            select.Click += (s, ea) => BuildSqlTasks(sqlType).BuildTableSelect(view);
            selectPaged.Click += (s, ea) => BuildSqlTasks(sqlType).BuildTableSelectPaged(view);
            create.Click += (s, ea) => BuildSqlTasks(sqlType).BuildTableDdl(table);
            drop.Click += (s, ea) => BuildSqlTasks(sqlType).BuildDropTable(table);
            select.Click += (s, ea) => BuildSqlTasks(sqlType).BuildTableSelect(table);
            selectPaged.Click += (s, ea) => BuildSqlTasks(sqlType).BuildTableSelectPaged(table);
            insert.Click += (s, ea) => BuildSqlTasks(sqlType).BuildTableInsert(table);
            update.Click += (s, ea) => BuildSqlTasks(sqlType).BuildTableUpdate(table);
            code.Click += (s, ea) => BuildSqlTasks(sqlType).BuildClass(table);
            data.Click += (s, ea) => BuildSqlTasks(sqlType).GetData(table, ConnectionString.Text.Trim(), (string)DataProviders.SelectedItem);
        private void tsbQuote_Click(object sender, EventArgs e)
        {
            tsbQuote.ForeColor = tsbQuote.Checked ? SystemColors.ControlText : SystemColors.InactiveCaption;
        }
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  <metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJ0SURBVDhPvZJZSNRRHEb/Dz30kkVmJEKSJWKBGBhSPYQo
        Ua6UKyi5UOkoZYZijksz7jqL65SKNuPSqKPVlGJYIRSKRGi5UGJqFhSVYmqo5HYaR5EsH4KgDz643HvP
        4cflCv8lGcXVztICLddyKslS6UiUaZLWjv4uIbEqvEWKoJX1pYQKs1SDLC5d7RscW4zQWJPnbyi/t6Uu
        S2GkN4lIXOLhE6XAS5RvFDDYq2FussHYHxNaFsbU6CoV6GvSUteYDfGOVOIVUYB7eBFCQ5WS2YnaDfDS
        5xIW+mOovZVDdWkm6uJUyvJTuCkXU5Qdz5pnNXUaGbNfNevwsgFmUAz94Zv2D8Ht8my+fypbh1sbZcY+
        1OXSpM3mXnUmOnUa2jIplarrVBQkUaoUo5IlrMqqyzKZfl9oHHukXYK+VsnSiBRG0zf2nWFvOBEGYuF1
        FD31fkSHelYJalUaU0M58EHO/ToFnY/kq5d+Hf1VMHT5sNjhxtxjJ95W2SE65zJ15bzHIaG8QMK3N1JG
        O5LRa+UsD0ugL2IV7AkzgAEsdnoy13aS6ZbjjDceRiqyJsDZNN/4BiXKZMZ7E7hTI6P7mWGSgRiD4AJ0
        B7H8/AzzT08z03qCCb0DX+ps6crYQaCbFQ4222yMAlWumL62FO7W5MJQCrw0jPvCl/l2d2aeODHZ5MiY
        zo6PmgP0y02RhO/H/qB5sxFeSWFWPA2VOfQ/iKQrT1hvp3wLbdlbaU7dTn2SGep4C25ctSTQdd+yo72l
        6xouCHnpceRJLpKVEELiZX+iwzwJ9XPh7KmjOB+z44idNbZWFuw138XunSbsMTXZ+A/+LYLwE+S85Qd1
        BNSrAAAAAElFTkSuQmCC
        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIzSURBVDhPrZLrS9NRGMd//0LvexP0orc1NYZrsRr8yjWU
        ZcOwIrr9wltpuswLKZamUcsLZCtcOmm1moSTiryAKWIii6VoZeaKpji8ohPB4Nt5zn55sqIX0QPPm8P5
        fM55LtJ/iefPIqD0tS6hxbuIh+45NDWGcdcxhbrar7DfDOJaxThKSz6gsGAEeblDOH8uABWXJAK7OoHa
        mlX8LVZW12BK6cLhlKc8VVySvE8WuKCqcl69+nsQHJ5bwW7LC2g0CqyHPELgfjDLBaUlk+r1jfED/hRa
        QIzZh4JLEzhoaRYCZ8M0F1y0fVQRET/Db8fC2CZ7kZM9iqREpxDU3w5xQVbmkIpF41e4LxDCZoMbijII
        s9khBDXVX7hAOTOoon+GOwc+Y1N8I44cfYWEhDohuF41gY52sFECx0++hvVYL+82NYxqpm/Ty1G4G8nW
        l5BluxBcKRtDmw9sB4Bm1zc292VUlM/wplLDqOaM9MA6fCCpFUZjpRAUFY7C8wi471xjixOBKTV7Q1pO
        2JCaVhyFExm83wODoUwIbHnDDAaqb0X4ywSxY8ToZPjfT2N4fAZK7lXsNbVwWLfHBb2+WAhoLR13sP5t
        EhB8Nv8G3gVnEZxaxIXLdsQaXAxuQuyue9DF5wtBRvobVvcSh7caPdiyQ8bjth742vvQ0T2A3n4/9pmt
        0OgbEMfg7dp6aLU5QpCZ5k8+faqHrydtGC0JzZlGRd2mhlHN9ColwTvjsoTg30OSvgNCVjq+glI0hgAA
        AABJRU5ErkJggg==
        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKTSURBVDhPtZLdT5JhGMbf/6e0WmoW2frQhfOIWKIoDvID
        dEl+8JKCWLlAK/kopKJWOhCXWimKiugMJCs/sLFVNjHnmpgHrU46MM2ubl9NR67Ouk+e7d3zu67rvp6X
        +dtca5jGTcsM6q6EUKMNYevzv8fhWIbFPM9dNl5/jeEhYKD/B8SiFu5bd9csFMXtKCnu2C1obYqiv28V
        vsGf0GgmwKqC8BLc4/4OrcaP/HMOqCq9sFqjqKoKoqjQFSsiEAyjt2eFc/UNrsM7sAl3dnyD0/kFdvsy
        mghubFxARfkI+HzN7hQy6RBFXiN4HWbTDNL5N8A/3YB6Q5icFzmYZYNIOFgYC9+zR9Hq/IjbtgX0e1Zh
        vRXBBWU7XK2f0Ny8iOrqborvx1V9hOJPQyJx0vkUFRVtYNzdYzAY5hHwr1MHaxR7BenpFoo7i7TUOmSe
        NeFS7SiyRHboat+BVYepxDGcETzEieOXScD9Agb9h+3CNnZOSdGhrNyNrichvH2zRJCbBO5T/DBKlVMo
        kr+ETPYcx+geMzH+HjniAYizH0OS64HT8RXVVQEIBPUIhZapjwgZjEAu927Br8DjGXE4uQyHkpQ7XZhN
        HThf0ou7d6LcU7GqUcikrSTaAoVicNtZKHThwP6C2BKnJpdgNNLbs8McvNG2Xj8HnW5z59/OMlkQObkj
        4B1hEQzO7Yj4ny0gL69t+6lqaiahYse4nZUEywkWCp0QZXmQKwkgW+zjVtjCGSYy+xkK+QNcVAeg1Y4j
        Pr4ASYmlkBcNcc5paRbs3ZNJUCV184hONWw2X+waG1OQ34jUVA1OnTTT72xCRoYJUmo7Lk7KXZZK+5CY
        oERn5+Ru+M9xODxIJsejPDX2xW8K/IdhmF/1befG/fM1WAAAAABJRU5ErkJggg==
        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAOSSURBVFhH7ZX9T5JRFMfd2vrZ3/3NVf5S2szlCzLNsnSY
        EvpIOl8CK+dbZvHg66R8SUmbaBmKhqLhWyoo6IwSa5lr2cqlbWaWaWmSWX8Bnp5790BAW8t42Frru52x
        sXvu95xz7/08bv/1T+nslUlAcabyEdB/uVZ8cpifXHwXEkg9ycnTeQjLHsDt8S+QUmKAsPRej8g0FT/+
        4hBECFTBdAqzSit/AD0T30AgGQeCNJoV+lVcgFy7ApyMIXN0Vg+0j6xCdGa3ayaSkK8vEFwy4iKUY+ug
        Nn6FrvENuH1vAxoHlrA5J10Nx4Qdp+gUZsU7r/dMloxuKUfXcREZ0kng5Q2DoNSAzRt6FyAspdvsx7vp
        Sacwp6SiMRBenoAW3Rp0U51nSafsxpxwoR9ah5ahpn0WDiU1gz/3GrPHwBfpqJFv4uga34Q4csTOIDSh
        EVo0S9bwjaxitoDY3AFIKjZA89BHUN//DKfLJuwMiJwuyvgtXG17Aez46+AdXsZsAUjoqR3PGjbLB9+B
        anQNksVaCEtqAuJcNyg0i9T4ZyCEpzD7hF3zoFOckyNoWDxZduRpFTa/3vcGbumWoVX7HhRUQcgcFXEw
        phb2R1SG4A2cFTJG7xwBhyD6dgTxZNj8qEAJR4Q95tqOOVyAFHWe2LDlH1ODi9jDKtz++BHl0E23UI4Q
        G578IN09IPLH5lj8RhErth4Q7cJT2k+EJjbhAoKJBth3uMrzQERlgVdwIfhyqg7Q2/6+kDl62ymlRky5
        CtU82JKu/NasHe3QRdsVmE+FGAe9zZ8LUc5SBKIc+rUlXadh3Uo7ZM447RDlUPcWykk7X9uRrqTxmeto
        R0j6dvLFunmpesFqHivSmaKyB8mYXI17VGYvGSHsNBXWT4FSvwKi2ofAOil/Sqc7JzT2xIKRnzDLzdWS
        9BKs8NRW0oJbqfIlxm0gr8555Noi1hazqHN6CVZIapu7I26b+hedRy5CLDf7DsasXPPBilkuNXZ6CRY7
        roF0xK3PsQrmkEt1/OmSYoa68SaQKJ5TT67HFC5sJVHnyDyYkJnE1NkrBhchp+Iu+EfXzdCpzMiR8xL5
        tB3rsbkreG+RI+fbdB/sWN9Mjd4lvLfIwnl0tojzBbLHYMv6vOr7zvP+V6ImkObHqYYgXt2pgDi5B5t/
        45Ut6wO4smlvTs1ep3i/XXmxi6CJunS7g/KZ7fZ3xejH5r/+Drm5fQdppARx5c8+EwAAAABJRU5ErkJg
  <data name="tsbQuote.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
        YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
        0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
        bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
        VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
        c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
        Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
        mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
        kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
        TgDQASA1MVpwzwAAAABJRU5ErkJggg==
</value>
  </data>
  <metadata name="connectionContext.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <metadata name="errorProvider1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <metadata name="backgroundWorker1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <metadata name="treeContext.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
//     Runtime Version:4.0.30319.42000
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
//     Runtime Version:4.0.30319.42000
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.6.0.0")]
        public SqlTasks(SqlType sqlType, bool escapeNames)
            EscapeNames = _migrationGenerator.EscapeNames = escapeNames;
        public bool EscapeNames { get; set; }

            tg.EscapeNames = EscapeNames;
                    sb.AppendLine("DELETE FROM " + (EscapeNames ? sqlWriter.EscapedTableName : databaseTable.Name));
                sw.EscapeNames = EscapeNames;
            tg.EscapeNames = EscapeNames;
        private SqlWriter BuildSqlWriter(DatabaseTable databaseTable)
            sqlWriter.EscapeNames = EscapeNames;
            return sqlWriter;
        }

        public void BuildTableSelect(DatabaseTable databaseTable)
        {
            var sqlWriter = BuildSqlWriter(databaseTable);


            var sqlWriter = BuildSqlWriter(databaseTable);
            var sqlWriter = BuildSqlWriter(databaseTable);
            var sqlWriter = BuildSqlWriter(databaseTable);
﻿<?xml version="1.0" encoding="utf-8"?>
    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <section name="DatabaseSchemaViewer.Properties.Settings"
        type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
        allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
    <section name="oracle.manageddataaccess.client"
      type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
      <remove invariant="Oracle.ManagedDataAccess.Client"/>
      <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver"
        type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <publisherPolicy apply="no"/>
        <assemblyIdentity name="Oracle.ManagedDataAccess" publicKeyToken="89b483f429c47342" culture="neutral"/>
        <bindingRedirect oldVersion="4.121.0.0 - 4.65535.65535.65535" newVersion="4.122.19.1"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
﻿<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Oracle.ManagedDataAccess" version="19.8.0" targetFramework="net40" />
</packages>
		Properties="Configuration=net35;OutputPath=$(OutputPath)net35\;IntermediateOutputPath=$(ObjPath)Release\"/>