//Simpan private void simpleButton1_Click(object sender, EventArgs e) { switch (radioGroup2.SelectedIndex) { case 0: //Simpan #region Simpan Koneksi Lama using (new WaitCursor()) { try { ConnectionString = SqlServerPersistance.CreateConnectionString( textEdit1.Text, comboBoxEdit1.Text, radioGroup1.SelectedIndex == 0, textEdit2.Text, textEdit3.Text); DataPersistance dp = new SqlServerPersistance(ConnectionString, false, string.Empty); string Data = (string)dp.Find.FirstValue( "SELECT filename FROM master.dbo.sysdatabases WHERE name=@0", string.Empty, string.Empty, new FieldParam("0", comboBoxEdit1.Text)); if (Data.Length > 0) { FolderLocation = BaseUtility.GetFolderName(Data); } } catch (Exception ex) { XtraMessageBox.Show(ex.Message, "Error Simpan Koneksi Database", MessageBoxButtons.OK, MessageBoxIcon.Error); ConnectionString = string.Empty; DialogResult = DialogResult.None; } } #endregion break; case 1: //Buat Baru dari Backup #region Cek apakah server lokal if (!CheckLocalServer()) { XtraMessageBox.Show("Pembuatan database baru hanya dapat dilakukan di komputer server !", "Error Pembuatan Database Baru", MessageBoxButtons.OK, MessageBoxIcon.Error); DialogResult = DialogResult.None; return; } #endregion #region Cek apakah database kosong if (textEdit4.Text.Length == 0) { XtraMessageBox.Show("Nama Database tidak boleh kosong !", "Error Pembuatan Database Baru", MessageBoxButtons.OK, MessageBoxIcon.Error); DialogResult = DialogResult.None; return; } #endregion #region Cek apakah Folder kosong if (buttonEdit2.Text.Length == 0) { XtraMessageBox.Show("Nama Folder Penyimpanan Database tidak boleh kosong !", "Error Pembuatan Database Baru", MessageBoxButtons.OK, MessageBoxIcon.Error); DialogResult = DialogResult.None; return; } #endregion #region Konfirmasi Buat Database Baru if (XtraMessageBox.Show(string.Concat("Buat Database '", textEdit4.Text, "' baru dari File Backup ?"), "Konfirmasi Buat Database Baru", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) { DialogResult = DialogResult.None; return; } #endregion using (new WaitCursor()) { try { if (!RestoreDatabase(textEdit1.Text, textEdit4.Text, radioGroup1.SelectedIndex == 0, textEdit2.Text, textEdit3.Text, buttonEdit2.Text, buttonEdit1.Text)) { return; } ConnectionString = SqlServerPersistance.CreateConnectionString( textEdit1.Text, textEdit4.Text, radioGroup1.SelectedIndex == 0, textEdit2.Text, textEdit3.Text); FolderLocation = buttonEdit2.Text; } catch (Exception ex) { XtraMessageBox.Show(ex.Message, "Error Buat Database Baru dari Backup", MessageBoxButtons.OK, MessageBoxIcon.Error); DialogResult = DialogResult.None; } } break; case 2: //Attach #region #region Cek apakah server lokal if (!CheckLocalServer()) { XtraMessageBox.Show("Attach database hanya dapat dilakukan di komputer server !", "Error Attach Database", MessageBoxButtons.OK, MessageBoxIcon.Error); DialogResult = DialogResult.None; return; } #endregion #region Konfirmasi Attach Database if (XtraMessageBox.Show(string.Concat("Attach Database '", buttonEdit3.Text, "' ?"), "Konfirmasi Attach Database", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) { DialogResult = DialogResult.None; return; } #endregion try { ConnectionString = SqlServerPersistance .CreateConnectionString( textEdit1.Text, BaseUtility.GetFileName(buttonEdit3.Text), radioGroup1.SelectedIndex == 0, textEdit2.Text, textEdit3.Text); CreateDatabase(textEdit1.Text, BaseUtility.GetFileName(buttonEdit3.Text), radioGroup1.SelectedIndex == 0, textEdit2.Text, textEdit3.Text, BaseUtility.GetFolderName(buttonEdit3.Text)); SqlServerPersistance dp = new SqlServerPersistance(textEdit1.Text, "master", false, string.Empty, radioGroup1.SelectedIndex == 0, textEdit2.Text, textEdit3.Text); string tmpStr = GetDbVar(dp, BaseUtility.GetFileName(buttonEdit3.Text), "System", "AppName"); if (tmpStr != BaseFramework.ProductName) { XtraMessageBox.Show("Database yang di attach bukan Database " + BaseFramework.ProductName, "Error Attach Database", MessageBoxButtons.OK, MessageBoxIcon.Error); dp.ExecuteNonQuery("EXEC sp_detach_db " + dp.FormatSqlValue( BaseUtility.GetFileName(buttonEdit3.Text))); ConnectionString = string.Empty; DialogResult = DialogResult.None; return; } FolderLocation = BaseUtility.GetFolderName(buttonEdit3.Text); } catch (Exception ex) { XtraMessageBox.Show(ex.Message, "Error Attach Database", MessageBoxButtons.OK, MessageBoxIcon.Error); ConnectionString = string.Empty; DialogResult = DialogResult.None; } break; case 3: //Buat Baru #region Cek apakah server lokal if (!CheckLocalServer()) { XtraMessageBox.Show("Pembuatan database baru hanya dapat dilakukan di komputer server !", "Error Pembuatan Database Baru", MessageBoxButtons.OK, MessageBoxIcon.Error); DialogResult = DialogResult.None; return; } #endregion #region Cek apakah database kosong if (textEdit4.Text.Length == 0) { XtraMessageBox.Show("Nama Database tidak boleh kosong !", "Error Pembuatan Database Baru", MessageBoxButtons.OK, MessageBoxIcon.Error); DialogResult = DialogResult.None; return; } #endregion #region Cek apakah Folder kosong if (buttonEdit2.Text.Length == 0) { XtraMessageBox.Show("Nama Folder Penyimpanan Database tidak boleh kosong !", "Error Pembuatan Database Baru", MessageBoxButtons.OK, MessageBoxIcon.Error); DialogResult = DialogResult.None; return; } #endregion #region Konfirmasi Buat Database Baru if (XtraMessageBox.Show(string.Concat("Buat Database '", textEdit4.Text, "' baru ?"), "Konfirmasi Buat Database Baru", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) { DialogResult = DialogResult.None; return; } #endregion using (new WaitCursor()) { try { ConnectionString = SqlServerPersistance.CreateConnectionString( textEdit1.Text, textEdit4.Text, radioGroup1.SelectedIndex == 0, textEdit2.Text, textEdit3.Text); FolderLocation = buttonEdit2.Text; SqlServerPersistance dp; if (checkEdit1.Checked && buttonEdit1.Text.Length > 0) // Bila ada Template { #region Copy Source To Dest string SourceFile1 = buttonEdit1.Text; string tmpFile = textEdit4.Text; string DestFile1 = string.Concat( FolderLocation, "\\", tmpFile, ".mdf"); string SourceFile2 = SourceFile1.Substring(0, SourceFile1.Length - 4) + ".tml"; string DestFile2 = string.Concat( FolderLocation, "\\", tmpFile, "_Log.ldf"); if (File.Exists(DestFile1)) { throw new ApplicationException(string.Concat( "File Database Tujuan (", DestFile1, ") sudah ada !")); } if (File.Exists(DestFile2)) { throw new ApplicationException(string.Concat( "File Database Tujuan (", DestFile2, ") sudah ada !")); } if (!File.Exists(SourceFile1)) { throw new ApplicationException(string.Concat( "Database Template (", SourceFile1, ") tidak ditemukan !")); } if (!File.Exists(SourceFile2)) { throw new ApplicationException(string.Concat( "Database Log Template (", SourceFile2, ") tidak ditemukan !")); } File.Copy(SourceFile1, DestFile1); File.Copy(SourceFile2, DestFile2); #endregion CreateDatabase(textEdit1.Text, tmpFile, radioGroup1.SelectedIndex == 0, textEdit2.Text, textEdit3.Text, FolderLocation); dp = new SqlServerPersistance(textEdit1.Text, "master", false, string.Empty, radioGroup1.SelectedIndex == 0, textEdit2.Text, textEdit3.Text); string AppName = GetDbVar(dp, textEdit4.Text, "System", "AppName"); if (!AppName.Equals(BaseFramework.ProductName)) { dp.ExecuteNonQuery("EXEC sp_detach_db " + dp.FormatSqlValue(tmpFile)); File.Delete(DestFile1); File.Delete(DestFile2); throw new ApplicationException("Database template bukan template untuk Sistem " + BaseFramework.ProductName); } } else { dp = new SqlServerPersistance(ConnectionString, true, FolderLocation); } } catch (Exception ex) { XtraMessageBox.Show(ex.Message, "Error Pembuatan Database Baru", MessageBoxButtons.OK, MessageBoxIcon.Error); ConnectionString = string.Empty; FolderLocation = string.Empty; DialogResult = DialogResult.None; } } break; } }
private bool RestoreDatabase(string ServerName, string DatabaseName, bool Integrated, string UserName, string Password, string FolderLocation, string BackupFileName) { using (new WaitCursor()) { DataPersistance dp = new SqlServerPersistance(ServerName, "master", false, string.Empty, Integrated, UserName, Password); dp.ExecuteNonQuery(string.Concat( "RESTORE VERIFYONLY FROM DISK='", BackupFileName, "'")); string dbSourceFileName = string.Empty, dbSourceLogFileName = string.Empty, dbDestFileName, dbDestLogFileName; string SqlCmd = string.Concat( "RESTORE FILELISTONLY FROM DISK='", BackupFileName, "'"); IDataReader rdr = dp.ExecuteReader(SqlCmd); while (rdr.Read()) { if ((string)rdr[2] == "D") { dbSourceFileName = (string)rdr[0]; } else { dbSourceLogFileName = (string)rdr[0]; } } rdr.Close(); if (dbSourceFileName.Length == 0 || dbSourceLogFileName.Length == 0) { throw new ApplicationException("Database gagal dibaca !"); } dbDestFileName = string.Concat(FolderLocation, "\\", DatabaseName, ".mdf"); dbDestLogFileName = string.Concat(FolderLocation, "\\", DatabaseName, "_log.ldf"); SqlCmd = string.Concat( "RESTORE DATABASE [", DatabaseName, "] FROM DISK='", BackupFileName, "' WITH FILE=1, MOVE '", dbSourceFileName, "' TO '", dbDestFileName, "', MOVE '", dbSourceLogFileName, "' TO '", dbDestLogFileName, "'"); dp.ExecuteNonQuery(SqlCmd); string tmpStr = GetDbVar(dp, DatabaseName, "System", "AppName"); if (tmpStr != BaseFramework.ProductName) { XtraMessageBox.Show("Database yang di attach bukan Database " + BaseFramework.ProductName, "Error Attach Database", MessageBoxButtons.OK, MessageBoxIcon.Error); dp.ExecuteNonQuery("EXEC sp_detach_db " + dp.FormatSqlValue( DatabaseName)); return(false); } return(true); } }