using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Forms; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; namespace formula_manage.Windows { /// /// SQL_BAK.xaml 的交互逻辑 /// public partial class SQL_BAK : Window { public SQL_BAK() { System.Windows.MessageBox.Show("注意此功能仅作用与本地数据库(Dispensing)对于远端数据库的操作可能失败如果需要继续操作单击确定", "SQL", MessageBoxButton.OK, MessageBoxImage.Exclamation); //连接失败提示 WindowStartupLocation = WindowStartupLocation.CenterScreen; InitializeComponent(); this.Closing += Window_Closing; //添加窗口关闭事件 } bool SQLBAK; bool SQLTIME; int Time; int i; string SQLIP; string SQLNAME; bool SQLMOD; string SQLUSER; string SQLPASS; public string INIPath = Convert.ToString(System.AppDomain.CurrentDomain.BaseDirectory) + "formula.ini"; private void Window_SQLBAK(object sender, RoutedEventArgs e) //打开页面 { UserClass.IniFile.IniFiles Configini = new UserClass.IniFile.IniFiles(INIPath); //读配置文件 SQLIP = Configini.IniReadvalue("SQL_SERVER", "SQL1"); //读配置文件 SQLNAME = Configini.IniReadvalue("SQL_SERVER", "SQL2"); int.TryParse(Configini.IniReadvalue("SQL_SERVER", "SQL3"), out i); //读数据库状态配置文件 if (i == 0) SQLMOD = false; else SQLMOD = true; SQLUSER = Configini.IniReadvalue("SQL_SERVER", "SQL4"); SQLPASS = Configini.IniReadvalue("SQL_SERVER", "SQL5"); SQLBAK = Boolean.Parse(Configini.IniReadvalue("SQL_BAK", "S1")); SQL_DISPEN_bak.Text = Configini.IniReadvalue("SQL_BAK", "S2"); SQLTIME = Boolean.Parse(Configini.IniReadvalue("SQL_BAK", "S3")); int.TryParse(Configini.IniReadvalue("SQL_BAK", "S4"), out Time); if (Time == 0) SQL_TIME.Text = "日"; else if(Time == 1) SQL_TIME.Text = "周"; else if (Time == 2) SQL_TIME.Text = "月"; else if (Time == 3) SQL_TIME.Text = "季"; else if (Time == 4) SQL_TIME.Text = "年"; SQL_bak.IsChecked = SQLBAK; SQL_DISPEN_bak.IsEnabled = SQLBAK; SQL_DISPEN_BUT.IsEnabled = SQLBAK; SQL_bak_time.IsChecked = SQLTIME; SQL_TIME.IsEnabled = SQLTIME; } private void SQLBAK_Checked(object sender, RoutedEventArgs e) //自定义备份地址状态 { SQLBAK = SQL_bak.IsChecked.GetValueOrDefault(); SQL_DISPEN_bak.IsEnabled = SQLBAK; SQL_DISPEN_BUT.IsEnabled = SQLBAK; } private void SQL_bak_time_Checked(object sender, RoutedEventArgs e) //自动保存 { SQLTIME = SQL_bak_time.IsChecked.GetValueOrDefault(); SQL_TIME.IsEnabled = SQLTIME; } private void Button_Click(object sender, RoutedEventArgs e) //SQL_DISPEN_bak路径选择按钮 { FolderBrowserDialog Dilog = new FolderBrowserDialog(); Dilog.SelectedPath = SQL_DISPEN_bak.Text; //打开目录 Dilog.ShowNewFolderButton = false; //不显示新建文件夹按钮 // if (Dilog.ShowDialog() == System.Windows.Forms.DialogResult.OK ) { SQL_DISPEN_bak.Text = Dilog.SelectedPath; //返回选择的字符串 } } private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) //窗口关闭事件 { UserClass.IniFile.IniFiles Configini = new UserClass.IniFile.IniFiles(INIPath); Configini.IniWritevalue("SQL_BAK", "S1", SQL_bak.IsChecked.GetValueOrDefault().ToString()); //保存自定义备份地址配置 Configini.IniWritevalue("SQL_BAK", "S2", SQL_DISPEN_bak.Text); //保存备份地址 Configini.IniWritevalue("SQL_BAK", "S3", SQL_bak_time.IsChecked.GetValueOrDefault().ToString()); //保存自动备份配置 if (SQL_TIME.Text == "日") Time = 0; else if (SQL_TIME.Text == "周") Time = 1; else if (SQL_TIME.Text == "月") Time = 2; else if (SQL_TIME.Text == "季") Time = 3; else if (SQL_TIME.Text == "年") Time = 4; Configini.IniWritevalue("SQL_BAK", "S4", Time.ToString()); //保存自动备份周期 } string Connstr_SC; private bool Backup(string dbName, string filePath) // 备份数据库 { if (!SQLMOD) //连接数据库测试 { Connstr_SC = "server=" + SQLIP + ";database=" + SQLNAME + ";Trusted_Connection=SSPI"; } else { Connstr_SC = "server=" + SQLIP + ";database=" + SQLNAME + ";User ID=" + SQLUSER + ";Password=" + SQLPASS; } SqlConnection connection = new SqlConnection(); connection.ConnectionString = Connstr_SC; connection.Open(); SqlCommand command = new SqlCommand(); command.Connection = connection; command.CommandText = string.Format("backup database {0} to disk = '{1}'", dbName, filePath); try { command.ExecuteNonQuery(); return true; } catch { return false; } finally { connection.Close(); } } private bool Restore(string dbName, string filePath) // 还原数据库 { if (!SQLMOD) //连接数据库测试 { Connstr_SC = "server=" + SQLIP + ";database=" + SQLNAME + ";Trusted_Connection=SSPI"; } else { Connstr_SC = "server=" + SQLIP + ";database=" + SQLNAME + ";User ID=" + SQLUSER + ";Password=" + SQLPASS; } SqlConnection connection = new SqlConnection(Connstr_SC); SqlCommand command = new SqlCommand(); command.Connection = connection; // 还原数据库 connection.Open(); command.CommandText = string.Format("use master restore database {0} from disk = '{1}' with replace", dbName, filePath); try { command.ExecuteNonQuery(); } catch { return false; } finally { connection.Close(); } return true; } private async void Button_Click_1(object sender, RoutedEventArgs e) { bool ok; System.DateTime.Now.ToString("yyyy-MM-dd_HH_mm_ss"); if (!SQLMOD) //连接数据库测试 { Connstr_SC = "server=" + SQLIP + ";database=" + SQLNAME + ";Trusted_Connection=SSPI"; } else { Connstr_SC = "server=" + SQLIP + ";database=" + SQLNAME + ";User ID=" + SQLUSER + ";Password=" + SQLPASS; } try { SqlConnection conn_SC = new SqlConnection(Connstr_SC); await conn_SC.OpenAsync(); //连接数据库 conn_SC.Close(); } catch (Exception) { System.Windows.MessageBox.Show("数据库错误", "ERR", MessageBoxButton.OK, MessageBoxImage.Exclamation); //连接失败提示 return; } if ((bool)SQL_bak.IsChecked) { ok = Backup(SQLNAME, SQL_DISPEN_bak.Text + "\\" + SQLNAME + System.DateTime.Now.ToString("yyyy_MM_dd_HHmmss") + ".bak"); //指定地址备份 } else { ok = Backup(SQLNAME, "C:\\SUNLIGHT\\" + SQLNAME + System.DateTime.Now.ToString("yyyy_MM_dd_HHmmss") + ".bak"); //默认备份到文档文件夹 } if (ok) { System.Windows.MessageBox.Show("备份成功"); } else { System.Windows.MessageBox.Show("备份失败"); } } private async void Button_Click_2(object sender, RoutedEventArgs e) { if (!SQLMOD) //连接数据库测试 { Connstr_SC = "server=" + SQLIP + ";database=" + SQLNAME + ";Trusted_Connection=SSPI"; } else { Connstr_SC = "server=" + SQLIP + ";database=" + SQLNAME + ";User ID=" + SQLUSER + ";Password=" + SQLPASS; } try { SqlConnection conn_SC = new SqlConnection(Connstr_SC); await conn_SC.OpenAsync(); //连接数据库 conn_SC.Close(); } catch (Exception) { System.Windows.MessageBox.Show("数据库错误", "ERR", MessageBoxButton.OK, MessageBoxImage.Exclamation); //连接失败提示 return; } OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Title = "还原数据库"; openFileDialog.Filter = "备份文件(*.bak)|*.bak"; //openFileDialog.RestoreDirectory = true; if ((bool)SQL_bak.IsChecked) { openFileDialog.InitialDirectory = SQL_DISPEN_bak.Text; } else { openFileDialog.InitialDirectory = "C:\\SUNLIGHT\\"; } if (openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { bool ok = Restore(SQLNAME, openFileDialog.FileName); if (ok) { System.Windows.MessageBox.Show("还原成功"); } else { System.Windows.MessageBox.Show("还原失败"); } } /* if ((bool)SQL_bak.IsChecked) { ok = Backup(SQLNAME, SQL_DISPEN_bak.Text + "\\" + SQLNAME + ".bak"); //指定地址备份 } else { ok = Backup(SQLNAME, Convert.ToString(Environment.SpecialFolder.MyDocuments) + SQLNAME + ".bak"); //默认备份到文档文件夹 } if (ok) { System.Windows.MessageBox.Show("还原成功"); } else { System.Windows.MessageBox.Show("还原失败"); } */ } } }