今天心血来潮,也不知道受什么影响,突然想起做一个远程数据备份的程序,实现自动备份并用ftp传回本地。
![](/images/cnblogs_com/faib/serverback.jpg)
程序中用到了SqlDMO组件及FTP组件。
程序核心为自定的一个TabPage,作用是载入配置并执行备份。
using System;
using System.Windows.Forms;
using SQLDMO;
using System.Data;
using System.Threading;
![](/Images/OutliningIndicators/None.gif)
namespace HLSoft.ServerBack
{
public class TabProcessPage : System.Windows.Forms.TabPage
{
FaibClass.Windows.Forms.ListBox lstInfo;
Thread thread;
FTP ftp;
private string name, service, sqldbname, sqldbuser, sqldbpwd, ftpport, ftpuser, ftppwd, ftpdir, localdir;
![](/Images/OutliningIndicators/InBlock.gif)
public TabProcessPage()
{
lstInfo = new FaibClass.Windows.Forms.ListBox();
lstInfo.Dock = DockStyle.Fill;
lstInfo.DrawMode = DrawMode.OwnerDrawFixed;
lstInfo.ItemHeight = 18;
base.Controls.Add(lstInfo);
thread = new Thread(new ThreadStart(BeginBackup));
thread.IsBackground = true;
}
![](/Images/OutliningIndicators/InBlock.gif)
public TabProcessPage(DataTable dtbl) : this()
{
DataRow drow = dtbl.Rows[0];
this.name = base.Text = dtbl.TableName;
service = drow["Service"].ToString();
sqldbname = drow["SqlDbName"].ToString();
sqldbuser = drow["SqlDbUser"].ToString();
sqldbpwd = Encrypt.DESDecrypt(drow["SqlDbPwd"].ToString(), "faib920");
ftpport = drow["FtpPort"].ToString();
ftpuser = drow["FtpUser"].ToString();
ftppwd = Encrypt.DESDecrypt(drow["FtpPwd"].ToString(), "faib920");
ftpdir = checkFilePath(drow["FtpDir"].ToString());
localdir = checkFilePath(drow["LocalDir"].ToString());
}
![](/Images/OutliningIndicators/InBlock.gif)
public void Start()
{
if(thread.ThreadState == ThreadState.Running)return;
lstInfo.Items.Add("线程 " + name + " 已启动.");
thread.Start();
}
![](/Images/OutliningIndicators/InBlock.gif)
public void Abort()
{
thread.Abort();
}
![](/Images/OutliningIndicators/InBlock.gif)
private void BeginBackup()
{
string filename = "";
filename = BackupSqlDatabase();
if(filename != "")
{
lstInfo.Items.Add("---------------------------");
DownloadFile(filename);
}
}
![](/Images/OutliningIndicators/InBlock.gif)
public string BackupSqlDatabase()
{
string filename = "";
SQLServerClass sql =new SQLServerClass();
//连接
try
{
sql.LoginSecure = false;
sql.Connect(service, sqldbuser, sqldbpwd);
lstInfo.Items.Add("连接远程(" + service + ")SQLSERVER服务成功
");
}
catch (Exception exp)
{
lstInfo.Items.Add(exp.Message);
}
//备份
try
{
BackupClass bak = new BackupClass();
bak.Database = sqldbname;
bak.Action = SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
bak.Initialize = true;
filename = sqldbname + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".sqlbak";
bak.Files = ftpdir + filename;
lstInfo.Items.Add("开始备份数据库(" + sqldbname + ")
");
lstInfo.Items.Add("备份进度 0%
");
bak.PercentComplete += new BackupSink_PercentCompleteEventHandler(bak_PercentComplete);
bak.SQLBackup(sql);
lstInfo.Items.Add("数据库备份完成
");
}
catch (Exception exp)
{
lstInfo.Items.Add(exp.Message);
filename = "";
}
sql.DisConnect();
lstInfo.Items.Add("断开远程SQLSERVER服务
");
return filename;
}
![](/Images/OutliningIndicators/InBlock.gif)
private string checkFilePath(string path)
{
if(path.Length == 0)throw new Exception("文件路径不正确");
if(path.Substring(path.Length - 1, 1) != "\\")
{
return path += "\\";
}
else
{
return path;
}
}
![](/Images/OutliningIndicators/InBlock.gif)
private bool DownloadFile(string filename)
{
bool ret = true;
ftp = new FTP(service, ftpport == "" ? 21 : int.Parse(ftpport), ftpuser, ftppwd);
try
{
int perc = 0, oldperc = 0;
![](/Images/OutliningIndicators/InBlock.gif)
lstInfo.Items.Add("连接远程FTP服务
");
ftp.OpenDownload("/" + filename, localdir + filename);
lstInfo.Items.Add("下载进度 0%
");
while(ftp.DoDownload() > 0)
{
perc = (int)((ftp.BytesTotal * 100) / ftp.FileSize);
if(perc != oldperc)
lstInfo.Items[lstInfo.Items.Count - 1].Text = "下载进度 " + perc.ToString() + "%
";
oldperc = perc;
}
ftp.RemoveFile("/" + filename);
lstInfo.Items.Add("断开远程FTP服务
");
ftp.Disconnect();
}
catch (Exception exp)
{
lstInfo.Items.Add(exp.Message);
ret = false;
}
return ret;
}
private void bak_PercentComplete(string Message, int Percent)
{
lstInfo.Items[lstInfo.Items.Count - 1].Text = "备份进度 " + Percent.ToString() + "%
";
}
![](/Images/OutliningIndicators/InBlock.gif)
}
}
下载程序源文件。
![](/images/cnblogs_com/faib/serverback.jpg)
程序中用到了SqlDMO组件及FTP组件。
程序核心为自定的一个TabPage,作用是载入配置并执行备份。
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)