/// <summary> /// Attempts a connection to the ePrintMonitor database. /// If the connection fails, attempts to create the database, then retries the connection. /// </summary> /// <param name="hostName"></param> private void CheckMonitorDatabase(string hostName) { bool connected = false; SqlConnectionStringBuilder connectionBuilder = GetConnectionStringBuilder(hostName, Resources.MonitorDatabase); TraceFactory.Logger.Debug("Testing connection to " + connectionBuilder.DataPath()); try { connected = ConnectToDatabase(connectionBuilder); if (!connected) { TraceFactory.Logger.Debug("Unable to connect to " + connectionBuilder.DataPath()); TraceFactory.Logger.Debug("Running Creation script."); connectionBuilder.InitialCatalog = "master"; ExecuteSql(connectionBuilder.ToString(), Resources.CreateMonitorDatabase); TraceFactory.Logger.Debug("Database creation successful."); //Connect to the newly created database. It make take a few seconds for it to establish a connection. connectionBuilder.InitialCatalog = Resources.MonitorDatabase; for (int i = 0; i < 10; i++) { TraceFactory.Logger.Debug("Attempting connection... {0}".FormatWith(i)); connected = ConnectToDatabase(connectionBuilder); if (connected) { break; } Thread.Sleep(5000); } } } catch (SqlException sqlEx) { TraceFactory.Logger.Error(sqlEx); } if (connected) { return; } // All connection attempts failed throw new InvalidOperationException("Could not connect to {0} database.".FormatWith(Resources.MonitorDatabase)); }
/// <summary> /// Attempts a connection to the ePrint database. /// </summary> /// <param name="hostName"></param> private void CheckCloudPrintDatabase(string hostName) { SqlConnectionStringBuilder connectionBuilder = GetConnectionStringBuilder(hostName, Resources.ePrintDatabase); TraceFactory.Logger.Debug("Testing connection to " + connectionBuilder.DataPath()); try { ExecuteSql(connectionBuilder.ToString(), Resources.CloudPrintTrigger); TraceFactory.Logger.Debug("Connected to " + connectionBuilder.DataPath()); CacheConnectionString(connectionBuilder); return; } catch (SqlException sqlEx) { TraceFactory.Logger.Error(sqlEx); } // connection attempt failed throw new InvalidOperationException("Could not connect to {0} database.".FormatWith(Resources.ePrintDatabase)); }
/// <summary> /// Attempts a connection to a database using the provided <see cref="SqlConnectionStringBuilder"/>. /// If connection is successful, caches the connection string for later use. /// </summary> /// <param name="connectionBuilder"></param> /// <returns></returns> private bool ConnectToDatabase(SqlConnectionStringBuilder connectionBuilder) { bool result = false; using (SqlAdapter adapter = new SqlAdapter(connectionBuilder.ToString())) { if (ConnectToDatabase(adapter)) { TraceFactory.Logger.Debug("Connected to " + connectionBuilder.DataPath()); CacheConnectionString(connectionBuilder); result = true; } } return(result); }