You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

296 lines
11 KiB

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
{
/// <summary>
/// SQL_BAK.xaml 的交互逻辑
/// </summary>
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("还原失败");
} */
}
}
}