You are viewing a plain text version of this content. The canonical link for it is here.
Posted to stonehenge-commits@incubator.apache.org by be...@apache.org on 2009/07/30 03:26:47 UTC

svn commit: r799159 - in /incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions: App.config Program.cs SetupAction.cs SetupActions.csproj XmlLoadData.cs

Author: bendewey
Date: Thu Jul 30 03:26:43 2009
New Revision: 799159

URL: http://svn.apache.org/viewvc?rev=799159&view=rev
Log:
STONEHENGE-95, Additionally I made a pretty major refactor to the SetupActions class.

Added:
    incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/XmlLoadData.cs
Modified:
    incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/App.config
    incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/Program.cs
    incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/SetupAction.cs
    incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/SetupActions.csproj

Modified: incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/App.config
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/App.config?rev=799159&r1=799158&r2=799159&view=diff
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/App.config (original)
+++ incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/App.config Thu Jul 30 03:26:43 2009
@@ -21,7 +21,6 @@
       <!--This is the input parameters for the db setup routine. -->
       <add key="dbServer" value="." />
       <add key="installPath" value="C:\StockTraderDemo\" />
-      <add key="createDBs"  value="StockTraderDB" />
       <add key="dbAdmin" value="sa" />
       <add key="dbPassword" value="Abc.123" />
       <add key="authType" value="SQL" />

Modified: incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/Program.cs
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/Program.cs?rev=799159&r1=799158&r2=799159&view=diff
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/Program.cs (original)
+++ incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/Program.cs Thu Jul 30 03:26:43 2009
@@ -21,42 +21,25 @@
 using System.Text;
 using System.Configuration;
 
-namespace SetupAction
+namespace SetupActions
 {
     class Program
-    {
-        public static string INSTALL_PATH = null;
-        public static string dbServer = null;
-        public static string installPath = null;
-        public static string createDBs = null;
-        public static string dbAdmin = null;
-        public static string dbPassword = null;
-        public static string authType = null;
-        
+    {        
         static void Main()
         {
             Console.WriteLine("Setting up Database");
+            
             //These are only for display
-            //The install method wil get them again.
-            dbServer = ConfigurationManager.AppSettings.Get("dbServer");
-            installPath = ConfigurationManager.AppSettings.Get("installPath");
-            //not used createDBs = ConfigurationManager.AppSettings.Get("createDBs");
-            dbAdmin = ConfigurationManager.AppSettings.Get("dbAdmin");
-            dbPassword = ConfigurationManager.AppSettings.Get("dbPassword");
-            authType = ConfigurationManager.AppSettings.Get("authType");
-
+            //The install method will get them again.
             Console.WriteLine("Config.AppSettings:");
-            Console.WriteLine("dbServer  is {0}",dbServer );
-            Console.WriteLine("installPath  is {0}", installPath);
-            //not used Console.WriteLine("createDBs  is {0}", createDBs);
-            Console.WriteLine("dbAdmin  is {0}", dbAdmin);
-            Console.WriteLine("authType  is {0}", authType);
-
-            
+            Console.WriteLine("dbServer  is {0}", ConfigurationManager.AppSettings.Get("dbServer"));
+            Console.WriteLine("installPath  is {0}", ConfigurationManager.AppSettings.Get("installPath"));
+            Console.WriteLine("dbAdmin  is {0}", ConfigurationManager.AppSettings.Get("dbAdmin"));
+            Console.WriteLine("authType  is {0}", ConfigurationManager.AppSettings.Get("authType"));
 
-            SetupAction s = new SetupAction();
             try
             {
+                SetupAction s = new SetupAction();
                 s.Install();
                 Console.WriteLine();
                 Console.WriteLine("Setup completed. Press Enter to continue");
@@ -64,7 +47,9 @@
             catch (Exception ex)
             {
                 Console.WriteLine();
+                Console.ForegroundColor = ConsoleColor.Red;
                 Console.WriteLine(ex.ToString());
+                Console.ForegroundColor = ConsoleColor.Gray;
                 Console.WriteLine("Setup Failed. Press Enter to continue");
             }
             Console.ReadLine();

Modified: incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/SetupAction.cs
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/SetupAction.cs?rev=799159&r1=799158&r2=799159&view=diff
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/SetupAction.cs (original)
+++ incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/SetupAction.cs Thu Jul 30 03:26:43 2009
@@ -16,186 +16,103 @@
 //
 
 using System;
-using System.DirectoryServices;
-using System.Data;
-using System.ComponentModel;
-using System.Collections.Generic;
-using System.Text;
-using System.Net;
-using System.Threading;
-using System.Diagnostics;
-using System.IO;
-using System.Reflection;
 using System.Configuration;
+using System.Data;
 using System.Data.SqlClient;
-using Microsoft.SqlServer.Management;
-using Microsoft.SqlServer.Management.Smo;
-using Microsoft.SqlServer.Management.Common;
-
-
+using System.IO;
+using System.Collections.Generic;
 
-namespace SetupAction
+namespace SetupActions
 {
     /// <summary>
     /// This is a custom setup action that overrides Installer base and is called after setup copies filed, automatically
     /// by the setup program. It will create IIS virtual directories based on WMI, register script maps, and create the databases.
     /// </summary>
-    public partial class SetupAction 
+    internal sealed class SetupAction 
     {
-        private string SQL_CONN = null;
-        public static readonly string CONNSTRING_SQLAUTH = "server={0};Database={1};user id={2};password={3};Pooling=false;";
-        public static readonly string CONNSTRING_WINAUTH = @"server={0};Database={1};Integrated Security=SSPI;";
-        //newstrings 
-        string CREATE_LOADACCOUNTPROFILEXML = @"setup_utilities\DATALOAD\CreateInsertXMLAccountProfileProc.sql";
-        string CREATE_LOADACCOUNTXML = @"setup_utilities\DATALOAD\CreateInsertXMLAccountProc.sql";
-        string CREATE_LOADHOLDINGXML = @"setup_utilities\DATALOAD\CreateInsertXMLHoldingProc.sql";
-        string CREATE_LOADORDERSXML = @"setup_utilities\DATALOAD\CreateInsertXMLOrdersProc.sql";
-        string CREATE_LOADQUOTEXML = @"setup_utilities\DATALOAD\CreateInsertXMLQuoteProc.sql";
-        string MSG_CHECK_SQL_AUTH = string.Empty;
+        // Connection Strings
+        private readonly string CONNSTRING_SQLAUTH = @"server={0};Database={1};user id={2};password={3};Pooling=false;";
+        private readonly string CONNSTRING_WINAUTH = @"server={0};Database={1};Integrated Security=SSPI;";
+
+        // DB Create/Load Scripts
+        private readonly string TRADEDB_CREATE_FILE = @"setup_utilities\DataLoad\createdb.sql";
+        private readonly string TRADEDB_CREATE_DBCONFIG = @"setup_utilities\DataLoad\createdbconfig.sql";
+        private readonly string TRADEDB_INSERT_DBCONFIG = @"setup_utilities\DataLoad\insertdbconfig.sql";
+
+        // Xml Loading Stored Proc Scripts
+        private readonly List<string> CREATE_PROC_SCRIPTS = new List<string>() { 
+            @"setup_utilities\DataLoad\CreateInsertXMLAccountProfileProc.sql",
+            @"setup_utilities\DataLoad\CreateInsertXMLAccountProc.sql",
+            @"setup_utilities\DataLoad\CreateInsertXMLHoldingProc.sql",
+            @"setup_utilities\DataLoad\CreateInsertXMLOrdersProc.sql",
+            @"setup_utilities\DataLoad\CreateInsertXMLQuoteProc.sql"
+        };
         
-        public static string dbServer = null;
-        private string installPath = null;
-        //private string createDBs = null;
-        public string dbAdmin = null;
-        public string dbPassword = null;
-        public string authType = null;
-        public static readonly string tradeuser = "trade";
-        public static readonly string tradepassword = "yyy";
-        public static readonly string TRADEDB = "StockTraderDB";
-        public const string TRADEDB_CREATE_FILE = "createdb.sql";
-        public const string TRADEDB_CREATE_DBCONFIG = "createdbconfig.sql";
-        public const string TRADEDB_INSERT_DBCONFIG = "insertdbconfig.sql";
+        // Xml Files to Load
+        private readonly List<XmlLoadData> XML_LOAD_DATA = new List<XmlLoadData>() {
+            new XmlLoadData { Filename=@"setup_utilities\DataLoad\StockTraderDB\Account.xml", StoredProcName="InsertAccountFromXML", Table="dbo.ACCOUNT" },
+            new XmlLoadData { Filename=@"setup_utilities\DataLoad\StockTraderDB\AccountProfile.xml", StoredProcName="InsertAccountProfileFromXML" },
+            new XmlLoadData { Filename=@"setup_utilities\DataLoad\StockTraderDB\Holding.xml", StoredProcName="InsertHoldingFromXML", Table="dbo.HOLDING" },
+            new XmlLoadData { Filename=@"setup_utilities\DataLoad\StockTraderDB\Quote.xml", StoredProcName="InsertQuoteFromXML" },
+            new XmlLoadData { Filename=@"setup_utilities\DataLoad\StockTraderDB\Orders.xml", StoredProcName="InsertOrdersFromXML", Table="dbo.ORDERS" }
+        };
+
+        // Error Messages
+        private readonly string CREATE_LOGIN_FAILED_MSG = "Unable to login with the newly created trade user account.";
+
+        // DB Creation Configuration
+        private readonly string _dbServer;
+        private readonly string _installPath;
+        private readonly string _dbAdmin;
+        private readonly string _dbPassword;
+        private readonly string _authType;
+        private readonly string _tradeUser = "trade";
+        private readonly string _tradePassword = "yyy";
+        private readonly string _tradeDb = "StockTraderDB";
 
-        string GetConnectionString(string databaseName)
+        private string _connectionString = null;
+
+        public SetupAction()
         {
-            if (authType != null && authType.Equals("Integrated", StringComparison.InvariantCultureIgnoreCase))
-                return string.Format(CONNSTRING_WINAUTH, new object[] { dbServer, databaseName });
-            
-            return string.Format(CONNSTRING_SQLAUTH, new object[] { dbServer, databaseName, dbAdmin, dbPassword });
+            //Get values from config
+            _dbServer = ConfigurationManager.AppSettings.Get("dbServer");
+            _installPath = ConfigurationManager.AppSettings.Get("installPath");
+            _dbAdmin = ConfigurationManager.AppSettings.Get("dbAdmin");
+            _dbPassword = ConfigurationManager.AppSettings.Get("dbPassword");
+            _authType = ConfigurationManager.AppSettings.Get("authType");
         }
 
-        //public void Install(System.Collections.IDictionary stateSaver)
         public void Install()
         {
-
-            //Get values from config
-            dbServer = ConfigurationManager.AppSettings.Get("dbServer");
-            installPath = ConfigurationManager.AppSettings.Get("installPath");
-            //not used createDBs = ConfigurationManager.AppSettings.Get("createDBs");
-            dbAdmin = ConfigurationManager.AppSettings.Get("dbAdmin");
-            dbPassword = ConfigurationManager.AppSettings.Get("dbPassword");
-            authType = ConfigurationManager.AppSettings.Get("authType");
-
-            //string CREATE_LOADACCOUNTPROFILEXML = @"setup_utilities\DATALOAD\" + createfilename;
-            //string CREATE_LOADACCOUNTXML = string.Empty;
-            //string CREATE_LOADHOLDINGXML = string.Empty;
-            //string CREATE_LOADORDERSXML = string.Empty;
-            //string CREATE_LOADQUOTEXML = string.Empty;
-
-            try
-            {
-                createDatabase(installPath, TRADEDB_CREATE_FILE, TRADEDB, tradeuser, tradepassword);
-                createLoadXmlStockTraderDBProcs(installPath, TRADEDB);
-                loadStockTraderDB(installPath, TRADEDB);
-                addDBConfig(installPath, TRADEDB, TRADEDB_CREATE_DBCONFIG, TRADEDB_INSERT_DBCONFIG);
-            }
-            catch (Exception e)
-            {
-                throw new Exception("MSG_DBFAIL " + e.Message);
-            }
+            CreateDatabase(_tradeDb, _tradeUser, _tradePassword);
+            CreateLoadXmlStoredProcs(_tradeDb);
+            LoadStockTraderDB(_tradeDb);
+            AddDBConfig(_tradeDb);
         }
 
         /// <summary>
-        /// Creates the tables needed for the database configuration system
-        /// i.e. SERVICE, CLIENTTOBS, BSTOOPS, DBCONFIG
+        /// Gets a Connection string based on the authentication Type and supplied DB Name
         /// </summary>
-        /// <param name="installPath"></param>
-        /// <param name="databaseName"></param>
-        private void addDBConfig(string installPath, string databaseName, string createdbconfigfilename, string insertdbconfigfilename)
+        /// <param name="databaseName">The database name to connect</param>
+        /// <returns>A SQL Server ConnectionString</returns>
+        private string GetConnectionString(string databaseName)
         {
-            SQL_CONN = GetConnectionString(databaseName);
-            SqlConnection sqlConnection = new SqlConnection(SQL_CONN);
-            sqlConnection.Open();
-
-            //creates the necessary tables: CLIENTTOBS, BSTOOPS, SERVICE, DBCONFIG
-            System.IO.StreamReader file = new System.IO.StreamReader(installPath + @"setup_utilities\DATALOAD\" + createdbconfigfilename);
-            string createCommand = file.ReadToEnd();
-            file.Close();
-            SqlCommand sqlCommand = new SqlCommand(createCommand, sqlConnection);
-            sqlCommand.CommandType = CommandType.Text;
-            sqlCommand.ExecuteNonQuery();
-            Console.Write(".");
-
-            //inserts the config info into these tables
-            file = new System.IO.StreamReader(installPath + @"setup_utilities\DATALOAD\" + insertdbconfigfilename);
-            createCommand = file.ReadToEnd();
-            file.Close();
-            sqlCommand = new SqlCommand(createCommand, sqlConnection);
-            sqlCommand.CommandType = CommandType.Text;
-            sqlCommand.ExecuteNonQuery();
-            Console.Write(".");
-
-            sqlConnection.Close();
-            return;
+            return GetConnectionString(databaseName, _dbAdmin, _dbPassword);
         }
-        
+
         /// <summary>
-        /// Similar to createLoadXmlRepositoryProcs, except for StockTraderDB tables.
+        /// Gets a Connection string based on the authentication Type and supplied DB Name
         /// </summary>
-        /// <param name="installPath"></param>
-        /// <param name="databaseName"></param>
-        public void createLoadXmlStockTraderDBProcs(string installPath, string databaseName)
+        /// <param name="databaseName">The database name to connect</param>
+        /// <param name="username">The username to use when connecting to the database</param>
+        /// <param name="password">The password for the supplied username</param>
+        /// <returns>A SQL Server ConnectionString</returns>
+        private string GetConnectionString(string databaseName, string username, string password)
         {
-            SQL_CONN = GetConnectionString(databaseName);
-            SqlConnection sqlConnection = new SqlConnection(SQL_CONN);
-            sqlConnection.Open();
-
-            ///ACCOUNT_PROFILE_LOAD_XML
-            System.IO.StreamReader file = new System.IO.StreamReader(installPath + CREATE_LOADACCOUNTPROFILEXML);
-            string createCommand = file.ReadToEnd();
-            file.Close();
-            SqlCommand sqlCommand = new SqlCommand(createCommand, sqlConnection);
-            sqlCommand.CommandType = CommandType.Text;
-            sqlCommand.ExecuteNonQuery();
-            Console.Write(".");
-
-            ///ACCOUNT_LOAD_XML
-            file = new System.IO.StreamReader(installPath + CREATE_LOADACCOUNTXML);
-            createCommand = file.ReadToEnd();
-            file.Close();
-            sqlCommand = new SqlCommand(createCommand, sqlConnection);
-            sqlCommand.CommandType = CommandType.Text;
-            sqlCommand.ExecuteNonQuery();
-            Console.Write(".");
-
-            ///HOLDING_LOAD_XML
-            file = new System.IO.StreamReader(installPath + CREATE_LOADHOLDINGXML);
-            createCommand = file.ReadToEnd();
-            file.Close();
-            sqlCommand = new SqlCommand(createCommand, sqlConnection);
-            sqlCommand.CommandType = CommandType.Text;
-            sqlCommand.ExecuteNonQuery();
-            Console.Write(".");
-
-            ///ORDERS_LOAD_XML
-            file = new System.IO.StreamReader(installPath + CREATE_LOADORDERSXML);
-            createCommand = file.ReadToEnd();
-            file.Close();
-            sqlCommand = new SqlCommand(createCommand, sqlConnection);
-            sqlCommand.CommandType = CommandType.Text;
-            sqlCommand.ExecuteNonQuery();
-            Console.Write(".");
-
-            ///QUOTE_LOAD_XML
-            file = new System.IO.StreamReader(installPath + CREATE_LOADQUOTEXML);
-            createCommand = file.ReadToEnd();
-            file.Close();
-            sqlCommand = new SqlCommand(createCommand, sqlConnection);
-            sqlCommand.CommandType = CommandType.Text;
-            sqlCommand.ExecuteNonQuery();
-            Console.Write(".");
+            if (_authType != null && _authType.Equals("Integrated", StringComparison.InvariantCultureIgnoreCase))
+                return string.Format(CONNSTRING_WINAUTH, new object[] { _dbServer, databaseName });
 
-            sqlConnection.Close();
+            return string.Format(CONNSTRING_SQLAUTH, new object[] { _dbServer, databaseName, username, password });
         }
 
         /// <summary>
@@ -206,224 +123,258 @@
         /// <param name="repositoryName"></param>
         /// <param name="userid"></param>
         /// <param name="password"></param>
-        public void createDatabase(string installPath, string createfilename, string repositoryName, string userid, string password)
+        private void CreateDatabase(string databaseName, string userid, string password)
         {
-            string configDB = "IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled')) EXEC [" + repositoryName + "].[dbo].[sp_fulltext_database] @action = 'enable';" +
-                                         "ALTER DATABASE [" + repositoryName + "] SET ANSI_NULL_DEFAULT OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + "] SET ANSI_NULLS OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + "] SET ANSI_PADDING OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + "] SET ANSI_WARNINGS OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + "] SET ARITHABORT OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + "] SET AUTO_CLOSE OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + "] SET AUTO_CREATE_STATISTICS ON;" +
-                                         "ALTER DATABASE [" + repositoryName + "] SET AUTO_SHRINK OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + "] SET AUTO_UPDATE_STATISTICS ON;" +
-                                         "ALTER DATABASE [" + repositoryName + "] SET CURSOR_CLOSE_ON_COMMIT OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + "] SET CURSOR_DEFAULT  GLOBAL;" +
-                                         "ALTER DATABASE [" + repositoryName + "] SET CONCAT_NULL_YIELDS_NULL OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + "] SET NUMERIC_ROUNDABORT OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + "] SET QUOTED_IDENTIFIER OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + "] SET RECURSIVE_TRIGGERS OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + "] SET  ENABLE_BROKER;" +
-                                         "ALTER DATABASE [" + repositoryName + "] SET AUTO_UPDATE_STATISTICS_ASYNC OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + "] SET DATE_CORRELATION_OPTIMIZATION OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + "] SET TRUSTWORTHY OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + "] SET ALLOW_SNAPSHOT_ISOLATION OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + "] SET PARAMETERIZATION SIMPLE;" +
-                                         "ALTER DATABASE [" + repositoryName + "] SET  READ_WRITE;" +
-                                         "ALTER DATABASE [" + repositoryName + "] SET RECOVERY FULL;" +
-                                         "ALTER DATABASE [" + repositoryName + "] SET  MULTI_USER;" +
-                                         "ALTER DATABASE [" + repositoryName + "] SET PAGE_VERIFY CHECKSUM;" +
-                                         "ALTER DATABASE [" + repositoryName + "] SET DB_CHAINING OFF;";
-
-            string dropDB = null;
-            SQL_CONN = GetConnectionString("master");
-            SqlConnection sqlConnection = new SqlConnection(SQL_CONN);
+            _connectionString = GetConnectionString("master");
+            SqlConnection sqlConnection = new SqlConnection(_connectionString);
             try
             {
+                // Connect to master
                 sqlConnection.Open();
-                dropDB = "IF  EXISTS (SELECT name FROM sys.databases WHERE name = N'" + repositoryName + "') DROP DATABASE [" + repositoryName + "]";
-                SqlCommand sqlCommand = new SqlCommand(dropDB, sqlConnection);
-                sqlCommand.CommandTimeout = 1200;
-                sqlCommand.CommandType = CommandType.Text;
 
                 //Drop DB
+                string dropDB = "IF  EXISTS (SELECT name FROM sys.databases WHERE name = N'" + databaseName + "') DROP DATABASE [" + databaseName + "]";
+                SqlCommand sqlCommand = new SqlCommand(dropDB, sqlConnection);
                 sqlCommand.ExecuteNonQuery();
 
                 //Create DB
-                string strCreateDB = "CREATE DATABASE [" + repositoryName + "];";
-                sqlCommand.CommandText = strCreateDB;
+                string createDB = "CREATE DATABASE [" + databaseName + "];";
+                sqlCommand.CommandText = createDB;
                 sqlCommand.ExecuteNonQuery();
                 Console.Write(".");
 
                 //Config DB
+                string configDB = "IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled')) EXEC [" + databaseName + "].[dbo].[sp_fulltext_database] @action = 'enable';" +
+                                         "ALTER DATABASE [" + databaseName + "] SET ANSI_NULL_DEFAULT OFF;" +
+                                         "ALTER DATABASE [" + databaseName + "] SET ANSI_NULLS OFF;" +
+                                         "ALTER DATABASE [" + databaseName + "] SET ANSI_PADDING OFF;" +
+                                         "ALTER DATABASE [" + databaseName + "] SET ANSI_WARNINGS OFF;" +
+                                         "ALTER DATABASE [" + databaseName + "] SET ARITHABORT OFF;" +
+                                         "ALTER DATABASE [" + databaseName + "] SET AUTO_CLOSE OFF;" +
+                                         "ALTER DATABASE [" + databaseName + "] SET AUTO_CREATE_STATISTICS ON;" +
+                                         "ALTER DATABASE [" + databaseName + "] SET AUTO_SHRINK OFF;" +
+                                         "ALTER DATABASE [" + databaseName + "] SET AUTO_UPDATE_STATISTICS ON;" +
+                                         "ALTER DATABASE [" + databaseName + "] SET CURSOR_CLOSE_ON_COMMIT OFF;" +
+                                         "ALTER DATABASE [" + databaseName + "] SET CURSOR_DEFAULT  GLOBAL;" +
+                                         "ALTER DATABASE [" + databaseName + "] SET CONCAT_NULL_YIELDS_NULL OFF;" +
+                                         "ALTER DATABASE [" + databaseName + "] SET NUMERIC_ROUNDABORT OFF;" +
+                                         "ALTER DATABASE [" + databaseName + "] SET QUOTED_IDENTIFIER OFF;" +
+                                         "ALTER DATABASE [" + databaseName + "] SET RECURSIVE_TRIGGERS OFF;" +
+                                         "ALTER DATABASE [" + databaseName + "] SET  ENABLE_BROKER;" +
+                                         "ALTER DATABASE [" + databaseName + "] SET AUTO_UPDATE_STATISTICS_ASYNC OFF;" +
+                                         "ALTER DATABASE [" + databaseName + "] SET DATE_CORRELATION_OPTIMIZATION OFF;" +
+                                         "ALTER DATABASE [" + databaseName + "] SET TRUSTWORTHY OFF;" +
+                                         "ALTER DATABASE [" + databaseName + "] SET ALLOW_SNAPSHOT_ISOLATION OFF;" +
+                                         "ALTER DATABASE [" + databaseName + "] SET PARAMETERIZATION SIMPLE;" +
+                                         "ALTER DATABASE [" + databaseName + "] SET  READ_WRITE;" +
+                                         "ALTER DATABASE [" + databaseName + "] SET RECOVERY FULL;" +
+                                         "ALTER DATABASE [" + databaseName + "] SET  MULTI_USER;" +
+                                         "ALTER DATABASE [" + databaseName + "] SET PAGE_VERIFY CHECKSUM;" +
+                                         "ALTER DATABASE [" + databaseName + "] SET DB_CHAINING OFF;";
+
                 sqlCommand.CommandText = configDB;
                 sqlCommand.ExecuteNonQuery();
                 Console.Write(".");
 
-                string createlogin = "IF NOT EXISTS (SELECT * FROM sys.server_principals WHERE name = N'" + userid + "') " +
+                // Create Login
+                string createLogin = "IF NOT EXISTS (SELECT * FROM sys.server_principals WHERE name = N'" + userid + "') " +
                                          "CREATE LOGIN [" + userid + "] WITH PASSWORD='" + password + "', DEFAULT_DATABASE=" +
-                                         "[" + repositoryName + "], DEFAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF;";
-                string createuser = "IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'" + userid + "') CREATE USER" +
-                                             "[" + userid + "] FOR LOGIN [" + userid + "] WITH DEFAULT_SCHEMA=[dbo];";
+                                         "[" + databaseName + "], DEFAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF;";
 
-                //create login
-                sqlCommand.CommandText = createlogin;
+                sqlCommand.CommandText = createLogin;
                 sqlCommand.ExecuteNonQuery();
                 Console.Write(".");
 
-                //Logout of Master
-
+                // Logout of Master
                 sqlConnection.Close();
 
-                //Now create user for new DB by logging in to new DB with admin rights
+                // Login to the databaseName using the Master Account
+                _connectionString = GetConnectionString(databaseName);
+                sqlConnection = new SqlConnection(_connectionString);
+                sqlConnection.Open();
 
-                SQL_CONN = GetConnectionString(repositoryName);
-                sqlConnection = new SqlConnection(SQL_CONN);
-                Server server = new Server(new ServerConnection(sqlConnection));
-                server.ConnectionContext.ExecuteNonQuery(createuser);
-                Console.Write(".");
+                // Create User
+                string createUser = "IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'" + userid + "') CREATE USER" +
+                                             "[" + userid + "] FOR LOGIN [" + userid + "] WITH DEFAULT_SCHEMA=[dbo];";
 
-                //Logout of Trade DB
-                sqlConnection.Close();
-                System.Data.SqlClient.SqlConnection.ClearAllPools();
+                sqlCommand = new SqlCommand(createUser, sqlConnection);
+                sqlCommand.ExecuteNonQuery();
+                Console.Write(".");
 
-                //Login to Master and use SMO to create role mapping of DBO
-                sqlConnection = new SqlConnection(SQL_CONN);
-                //new SMO functionality
-                server = new Server(new ServerConnection(sqlConnection));
-                server.ConnectionContext.ExecuteNonQuery("exec sp_addrolemember 'db_owner','" + userid + "'");
+                // Add Role
+                string addRole = "EXEC sp_addrolemember 'db_owner', '" + userid + "'";
+                sqlCommand.CommandText = addRole;
+                sqlCommand.ExecuteNonQuery();
                 Console.Write(".");
 
-                //Logout
+                // Logout of databaseName with Master credentials
                 sqlConnection.Close();
 
-                //Login as newly created user.  Don't need to but rather test connectivity here right away to make sure DB in good state for new trade user.
-                SQL_CONN = GetConnectionString(repositoryName);
-                sqlConnection = new SqlConnection(SQL_CONN);
+                // Login as newly created user.  
+                // Don't need to but rather test connectivity here right away to make sure 
+                // the DB is in good state for the new trade user.
+                _connectionString = GetConnectionString(databaseName, userid, password);
+                sqlConnection = new SqlConnection(_connectionString);
                 try
                 {
                     sqlConnection.Open();
                 }
                 catch (Exception e)
                 {
-                    throw new Exception(MSG_CHECK_SQL_AUTH + ". Exc: " + e.Message);
+                    throw new Exception(CREATE_LOGIN_FAILED_MSG + "  Error: " + e.Message);
                 }
 
                 ///Create Schema for DB
-                System.IO.StreamReader file = new System.IO.StreamReader(installPath + @"setup_utilities\DATALOAD\" + createfilename);
-                string createCommand = file.ReadToEnd();
-                file.Close();
+                string createCommand = ReadTextFile(Path.Combine(_installPath, TRADEDB_CREATE_FILE));
                 sqlCommand = new SqlCommand(createCommand, sqlConnection);
-                sqlCommand.CommandType = CommandType.Text;
                 sqlCommand.ExecuteNonQuery();
                 Console.Write(".");
-                sqlConnection.Close();
-                return;
             }
-            catch (Exception e)
+            finally
             {
+                // Close the connection
                 if (sqlConnection.State == ConnectionState.Open)
                     sqlConnection.Close();
-                System.Data.SqlClient.SqlConnection.ClearAllPools();
                 sqlConnection.Dispose();
-                throw new Exception(e.Message);
+
+                // Clear all pools so we don't get any master connections going forward
+                SqlConnection.ClearAllPools();
             }
         }
 
-       
         /// <summary>
-        /// Loads the StockTraderDB tables with initial data from XML files.
+        /// Similar to createLoadXmlRepositoryProcs, except for StockTraderDB tables.
         /// </summary>
-        /// <param name="installPath"></param>
-        /// <param name="repository"></param>
-        public void loadStockTraderDB(string installPath, string repository)
+        /// 
+        /// <param name="databaseName"></param>
+        private void CreateLoadXmlStoredProcs(string databaseName)
         {
-            SQL_CONN = GetConnectionString(repository);
-            string xmlFile = null;
-            string sql = null;
-            string table = null;
-            for (int i = 0; i < 5; i++)
+            _connectionString = GetConnectionString(databaseName);
+            SqlConnection sqlConnection = new SqlConnection(_connectionString);
+            try
             {
-                switch (i)
-                {
-                    case 0:
-                        {
-                            xmlFile = installPath + "setup_utilities\\DATALOAD\\" + repository + "\\Account.xml";
-                            sql = "InsertAccountFromXML";
-                            table = "dbo.ACCOUNT";
-                            break;
-                        }
-                    case 1:
-                        {
-                            xmlFile = installPath + "setup_utilities\\DATALOAD\\" + repository + "\\AccountProfile.xml";
-                            sql = "InsertAccountProfileFromXML";
-                            table = null;
-                            break;
-                        }
-                    case 2:
-                        {
-                            xmlFile = installPath + "setup_utilities\\DATALOAD\\" + repository + "\\Quote.xml";
-                            sql = "InsertQuoteFromXML";
-                            table = null;
-                            break;
-                        }
-                    case 3:
-                        {
-                            xmlFile = installPath + "setup_utilities\\DATALOAD\\" + repository + "\\Holding.xml";
-                            sql = "InsertHoldingFromXML";
-                            table = "dbo.HOLDING";
-                            break;
-                        }
-                    case 4:
-                        {
-                            xmlFile = installPath + "setup_utilities\\DATALOAD\\" + repository + "\\Orders.xml";
-                            sql = "InsertOrdersFromXML";
-                            table = "dbo.ORDERS";
-                            break;
-                        }
-                }
-                SqlConnection conn = new SqlConnection(SQL_CONN);
-                conn.Open();
-                string configContent = null;
-                if (table != null)
-                {
-                    //Need to turn off identities first for certain tables.
-                    SqlCommand cmd = new SqlCommand("SET IDENTITY_INSERT " + table + " ON");
-                    cmd.Connection = conn;
-                    cmd.CommandType = CommandType.Text;
-                    cmd.ExecuteNonQuery();
-                    Console.Write(".");
-                }
-                using (StreamReader sr = new StreamReader(xmlFile))
-                {
-                    configContent = sr.ReadToEnd();
-                }
-                SqlParameter parmDoc = new SqlParameter("sXML", SqlDbType.NText, 60000000);
-                parmDoc.Value = configContent;
-                SqlCommand cmd2 = new SqlCommand(sql);
-                cmd2.CommandType = CommandType.StoredProcedure;
-                cmd2.Connection = conn;
-                cmd2.Parameters.Add(parmDoc);
-                try
+                sqlConnection.Open();
+
+                foreach (string file in CREATE_PROC_SCRIPTS)
                 {
-                    cmd2.ExecuteNonQuery();
+                    // Create Store
+                    string createCommand = ReadTextFile(Path.Combine(_installPath, file));
+                    SqlCommand sqlCommand = new SqlCommand(createCommand, sqlConnection);
+                    sqlCommand.ExecuteNonQuery();
                     Console.Write(".");
                 }
-                catch (Exception e)
-                {
-                    throw new Exception(e.Message);
-                }
-                if (table != null)
+            }
+            finally
+            {
+                // Close the connection
+                if (sqlConnection.State == ConnectionState.Open)
+                    sqlConnection.Close();
+                sqlConnection.Dispose();
+            }
+        }
+       
+        /// <summary>
+        /// Loads the StockTraderDB tables with initial data from XML files.
+        /// </summary>
+        /// 
+        /// <param name="repository"></param>
+        private void LoadStockTraderDB(string repository)
+        {
+            _connectionString = GetConnectionString(repository);
+            SqlConnection sqlConnection = new SqlConnection(_connectionString);
+            try
+            {
+                sqlConnection.Open();
+
+                foreach (var xmlData in XML_LOAD_DATA)
                 {
-                    cmd2 = new SqlCommand("SET IDENTITY_INSERT " + table + " OFF");
-                    cmd2.Connection = conn;
-                    cmd2.CommandType = CommandType.Text;
-                    cmd2.ExecuteNonQuery();
+                    SqlCommand identityCommand;
+                    if (xmlData.Table != null)
+                    {
+                        // Need to turn off identities first for certain tables.
+                        identityCommand = new SqlCommand("SET IDENTITY_INSERT " + xmlData.Table + " ON", sqlConnection);
+                        identityCommand.ExecuteNonQuery();
+                        Console.Write(".");
+                    }
+
+                    // Create the sql parameter with the xml data from the file
+                    SqlParameter xmlParameter = new SqlParameter("sXML", SqlDbType.NText, 60000000);
+                    xmlParameter.Value = ReadTextFile(Path.Combine(_installPath, xmlData.Filename));
+
+                    // execute the load xml Stored Procedure
+                    SqlCommand insertProcCommand = new SqlCommand(xmlData.StoredProcName, sqlConnection);
+                    insertProcCommand.CommandType = CommandType.StoredProcedure;
+                    insertProcCommand.Parameters.Add(xmlParameter);
+                    insertProcCommand.ExecuteNonQuery();
                     Console.Write(".");
+
+                    if (xmlData.Table != null)
+                    {
+                        // reset the identities for certain tables
+                        identityCommand = new SqlCommand("SET IDENTITY_INSERT " + xmlData.Table + " OFF", sqlConnection);
+                        identityCommand.ExecuteNonQuery();
+                        Console.Write(".");
+                    }
                 }
-                conn.Close();
             }
+            finally
+            {
+                // Close the connection
+                if (sqlConnection.State == ConnectionState.Open)
+                    sqlConnection.Close();
+                sqlConnection.Dispose();
+            }
+        }
+
+        /// <summary>
+        /// Creates the tables needed for the database configuration system
+        /// i.e. SERVICE, CLIENTTOBS, BSTOOPS, DBCONFIG
+        /// </summary>
+        /// <param name="installPath"></param>
+        /// <param name="databaseName"></param>
+        private void AddDBConfig(string databaseName)
+        {
+            _connectionString = GetConnectionString(databaseName);
+            SqlConnection sqlConnection = new SqlConnection(_connectionString);
+            try
+            {
+                sqlConnection.Open();
+
+                //creates the necessary tables: CLIENTTOBS, BSTOOPS, SERVICE, DBCONFIG
+                string createCommand = ReadTextFile(Path.Combine(_installPath, TRADEDB_CREATE_DBCONFIG));
+                SqlCommand sqlCommand = new SqlCommand(createCommand, sqlConnection);
+                sqlCommand.ExecuteNonQuery();
+                Console.Write(".");
+
+                //inserts the config info into these tables
+                createCommand = ReadTextFile(Path.Combine(_installPath, TRADEDB_INSERT_DBCONFIG));
+                sqlCommand = new SqlCommand(createCommand, sqlConnection);
+                sqlCommand.ExecuteNonQuery();
+                Console.Write(".");
+            }
+            finally
+            {
+                // Close the connection
+                if (sqlConnection.State == ConnectionState.Open)
+                    sqlConnection.Close();
+                sqlConnection.Dispose();
+            }
+        }
+
+        /// <summary>
+        /// Use a StreamReader to return the string value of a text document.
+        /// </summary>
+        /// <param name="filename">The text file to load</param>
+        /// <returns>A string of the contents in the text file</returns>
+        private static string ReadTextFile(string filename)
+        {
+            string fileContents = string.Empty;
+            using (StreamReader file = new StreamReader(filename))
+            {
+                fileContents = file.ReadToEnd();
+                file.Close();
+            }
+            return fileContents;
         }
     }
 }

Modified: incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/SetupActions.csproj
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/SetupActions.csproj?rev=799159&r1=799158&r2=799159&view=diff
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/SetupActions.csproj (original)
+++ incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/SetupActions.csproj Thu Jul 30 03:26:43 2009
@@ -31,12 +31,6 @@
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="Microsoft.SqlServer.ConnectionInfo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL" />
-    <Reference Include="Microsoft.SqlServer.Management.Sdk.Sfc, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\Util\Microsoft.SqlServer.Management.Sdk.Sfc.dll</HintPath>
-    </Reference>
-    <Reference Include="Microsoft.SqlServer.Smo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL" />
     <Reference Include="System" />
     <Reference Include="System.configuration" />
     <Reference Include="System.Core">
@@ -56,6 +50,7 @@
     <Compile Include="Program.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="SetupAction.cs" />
+    <Compile Include="XmlLoadData.cs" />
   </ItemGroup>
   <ItemGroup>
     <None Include="App.config" />

Added: incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/XmlLoadData.cs
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/XmlLoadData.cs?rev=799159&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/XmlLoadData.cs (added)
+++ incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/XmlLoadData.cs Thu Jul 30 03:26:43 2009
@@ -0,0 +1,26 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+namespace SetupActions
+{
+    internal class XmlLoadData
+    {
+        public string Filename { get; set; }
+        public string StoredProcName { get; set; }
+        public string Table { get; set; }
+    }
+}