public static DatabaseModel FromConnectionString(string ConnectionString) { var result = new DatabaseModel(); try { var csb = new SqlConnectionStringBuilder(ConnectionString); if (!string.IsNullOrEmpty(csb.DataSource)) result.Server = csb.DataSource; if (!string.IsNullOrEmpty(csb.InitialCatalog)) result.DatabaseName = csb.InitialCatalog; if (csb.IntegratedSecurity) { result.AuthMethod = "SSPI"; } else { result.AuthMethod = "SQL"; result.Auth_SQL_Username = csb.UserID; result.Auth_SQL_Password = csb.Password; } } catch (Exception) { // Ignore Parsing errors } return result; }
public virtual ActionResult Database(DatabaseModel model) { if (ModelState.IsValid) { // Continue with Configuration var connectionString = model.ToConnectionString(); // Try Creating/Migrating connectionString.ConnectTimeout = 5; Disco.Data.Repository.DiscoDatabaseConnectionFactory.SetDiscoDataContextConnectionString(connectionString.ToString(), false); try { Disco.Data.Migrations.DiscoDataMigrator.MigrateLatest(true); } catch (Exception ex) { // Find inner exception SqlException sqlException = null; Exception innermostException = ex; do { if (sqlException == null) sqlException = innermostException as SqlException; if (innermostException.InnerException != null) innermostException = innermostException.InnerException; else break; } while (true); if (sqlException != null) { ModelState.AddModelError(string.Empty, string.Format("Unable to create or migrate the database to the latest version: [{0}] {1}", sqlException.GetType().Name, sqlException.Message)); } else { ModelState.AddModelError(string.Empty, string.Format("Unable to create or migrate the database to the latest version: [{0}] {1}", innermostException.GetType().Name, innermostException.Message)); } } if (ModelState.IsValid) { // Save Connection String //Disco.Data.Repository.DiscoDatabaseConnectionFactory.SetDiscoDataContextConnectionString(model.ToConnectionString().ToString(), true); // Write Organisation Name into DB using (DiscoDataContext database = new DiscoDataContext()) { database.DiscoConfiguration.OrganisationName = DiscoApplication.OrganisationName; database.SaveChanges(); } return RedirectToAction(MVC.InitialConfig.FileStore()); } } return View(model); }
public virtual ActionResult Database() { var cs = Disco.Data.Repository.DiscoDatabaseConnectionFactory.DiscoDataContextConnectionString; DatabaseModel m; if (cs == null) m = new DatabaseModel(); // Just use Defaults else m = DatabaseModel.FromConnectionString(cs); // Import from existing Connection String return View(m); }