在c#中利用存储过程实现数据库备份恢复
/// <summary>
/// 数据库的备份
/// </summary>
/// <param name="ServerName">服务器名称</param>
/// <param name="UserName">用户名</param>
/// <param name="Password">用户密码</param>
/// <param name="strDbName">数据库名称</param>
/// <param name="strFileName">数据库文件</param>
/// <returns></returns>
public bool BackUPDB(string ServerName, string UserName, string Password, string strDbName, string strFileName)
{
string strServerConnectString = "Data Source=" + ServerName + ";Initial Catalog=master;User ID=" + UserName + ";Password=" + Password;
SqlConnection connection = new SqlConnection(strServerConnectString);
try
{
connection.Open();
}
catch (SqlException sqlException)
{
MessageBox.Show("SQLSERVER数据库启动或者没有安装,请检查"r"r错误信息:" + sqlException.Message, "信息提示");
return false ;
}
try
{
//'关闭用户进程,防止其它用户正在使用数据库,导致数据恢复失败
//string strSQL = "select spid from master..sysprocesses where dbid=db_id('" + strDbName + "')";
//DataSet DataSet = new DataSet();
//SqlDataAdapter DataAdapter = new SqlDataAdapter(strSQL, connection);
//DataAdapter.Fill(DataSet);
//for (int i = 0; i < DataSet.Tables[0].Rows.Count; i++)
//{
// SqlCommand sqlCommandKill = new SqlCommand("kill " + DataSet.Tables[0].Rows[i][0].ToString(), connection);
// sqlCommandKill.CommandType = CommandType.Text;
// sqlCommandKill.ExecuteNonQuery();
//}
SqlCommand sqlCommand = new SqlCommand("BACKUP DATABASE " + strDbName + " TO DISK = '" + strFileName + "'", connection);
sqlCommand.CommandType = CommandType.Text;
int intRowAffect = sqlCommand.ExecuteNonQuery();
if (intRowAffect == -1)
{
return true;
}
else
{
return false;
}
}
catch (SqlException sqlException)
{
throw (new Exception("备份数据库失败" + sqlException.Message));
}
finally
{
connection.Close();
}
}
/// <summary>
/// 数据库的恢复
/// </summary>
/// <param name="ServerName">服务器名称</param>
/// <param name="UserName">用户名</param>
/// <param name="Password">用户密码</param>
/// <param name="strDbName">数据库名称</param>
/// <param name="strFileName">数据库文件</param>
/// <param name="pgbMain">进度条</param>
/// <returns></returns>
public bool RestoreDB(string ServerName, string UserName, string Password, string strDbName, string strFileName)
{
string strServerConnectString = "Data Source=" + ServerName + ";Initial Catalog=master;User ID=" + UserName + ";Password=" + Password;
SqlConnection connection = new SqlConnection(strServerConnectString);
try
{
connection.Open();
}
catch (SqlException sqlException)
{
MessageBox.Show("SQLSERVER数据库启动或者没有安装,请检查"r"r错误信息:" + sqlException.Message, "信息提示");
return false;
}
try
{
//'关闭用户进程,防止其它用户正在使用数据库,导致数据恢复失败
string strSQL = "select spid from master..sysprocesses where dbid=db_id('" + strDbName + "')";
//SqlCommand sqlCommandSelect = new SqlCommand(strSQL, connection);
//sqlCommandSelect.CommandType = CommandType.Text;
//SqlDataReader SqlDataReader = sqlCommandSelect.ExecuteReader();sqldatareader对数据库独占,必须进行关闭
//while (SqlDataReader.Read())
//{
// SqlCommand sqlCommandKill = new SqlCommand("kill " + SqlDataReader[0], connection);
// sqlCommandKill.CommandType = CommandType.Text;
// sqlCommandKill.ExecuteNonQuery();
//}
DataSet DataSet = new DataSet();
SqlDataAdapter DataAdapter = new SqlDataAdapter(strSQL, connection);
DataAdapter.Fill(DataSet);
for (int i = 0; i < DataSet.Tables[0].Rows.Count; i++)
{
SqlCommand sqlCommandKill = new SqlCommand("kill " + DataSet.Tables[0].Rows[i][0].ToString(), connection);
sqlCommandKill.CommandType = CommandType.Text;
sqlCommandKill.ExecuteNonQuery();
}
SqlCommand sqlCommand = new SqlCommand("RESTORE DATABASE " + strDbName + " FROM DISK = '" + strFileName + "' ", connection);
sqlCommand.CommandType = CommandType.Text;
int intRowAffect = sqlCommand.ExecuteNonQuery();
if (intRowAffect == -1)
{
return true;
}
else
{
return false;
}
}
catch (SqlException sqlException)
{
throw (new Exception("恢复数据库失败,请关闭所有和该数据库连接的程序!" + sqlException.Message));
}
finally
{
connection.Close();
}
}
/// 数据库的备份
/// </summary>
/// <param name="ServerName">服务器名称</param>
/// <param name="UserName">用户名</param>
/// <param name="Password">用户密码</param>
/// <param name="strDbName">数据库名称</param>
/// <param name="strFileName">数据库文件</param>
/// <returns></returns>
public bool BackUPDB(string ServerName, string UserName, string Password, string strDbName, string strFileName)
{
string strServerConnectString = "Data Source=" + ServerName + ";Initial Catalog=master;User ID=" + UserName + ";Password=" + Password;
SqlConnection connection = new SqlConnection(strServerConnectString);
try
{
connection.Open();
}
catch (SqlException sqlException)
{
MessageBox.Show("SQLSERVER数据库启动或者没有安装,请检查"r"r错误信息:" + sqlException.Message, "信息提示");
return false ;
}
try
{
//'关闭用户进程,防止其它用户正在使用数据库,导致数据恢复失败
//string strSQL = "select spid from master..sysprocesses where dbid=db_id('" + strDbName + "')";
//DataSet DataSet = new DataSet();
//SqlDataAdapter DataAdapter = new SqlDataAdapter(strSQL, connection);
//DataAdapter.Fill(DataSet);
//for (int i = 0; i < DataSet.Tables[0].Rows.Count; i++)
//{
// SqlCommand sqlCommandKill = new SqlCommand("kill " + DataSet.Tables[0].Rows[i][0].ToString(), connection);
// sqlCommandKill.CommandType = CommandType.Text;
// sqlCommandKill.ExecuteNonQuery();
//}
SqlCommand sqlCommand = new SqlCommand("BACKUP DATABASE " + strDbName + " TO DISK = '" + strFileName + "'", connection);
sqlCommand.CommandType = CommandType.Text;
int intRowAffect = sqlCommand.ExecuteNonQuery();
if (intRowAffect == -1)
{
return true;
}
else
{
return false;
}
}
catch (SqlException sqlException)
{
throw (new Exception("备份数据库失败" + sqlException.Message));
}
finally
{
connection.Close();
}
}
/// <summary>
/// 数据库的恢复
/// </summary>
/// <param name="ServerName">服务器名称</param>
/// <param name="UserName">用户名</param>
/// <param name="Password">用户密码</param>
/// <param name="strDbName">数据库名称</param>
/// <param name="strFileName">数据库文件</param>
/// <param name="pgbMain">进度条</param>
/// <returns></returns>
public bool RestoreDB(string ServerName, string UserName, string Password, string strDbName, string strFileName)
{
string strServerConnectString = "Data Source=" + ServerName + ";Initial Catalog=master;User ID=" + UserName + ";Password=" + Password;
SqlConnection connection = new SqlConnection(strServerConnectString);
try
{
connection.Open();
}
catch (SqlException sqlException)
{
MessageBox.Show("SQLSERVER数据库启动或者没有安装,请检查"r"r错误信息:" + sqlException.Message, "信息提示");
return false;
}
try
{
//'关闭用户进程,防止其它用户正在使用数据库,导致数据恢复失败
string strSQL = "select spid from master..sysprocesses where dbid=db_id('" + strDbName + "')";
//SqlCommand sqlCommandSelect = new SqlCommand(strSQL, connection);
//sqlCommandSelect.CommandType = CommandType.Text;
//SqlDataReader SqlDataReader = sqlCommandSelect.ExecuteReader();sqldatareader对数据库独占,必须进行关闭
//while (SqlDataReader.Read())
//{
// SqlCommand sqlCommandKill = new SqlCommand("kill " + SqlDataReader[0], connection);
// sqlCommandKill.CommandType = CommandType.Text;
// sqlCommandKill.ExecuteNonQuery();
//}
DataSet DataSet = new DataSet();
SqlDataAdapter DataAdapter = new SqlDataAdapter(strSQL, connection);
DataAdapter.Fill(DataSet);
for (int i = 0; i < DataSet.Tables[0].Rows.Count; i++)
{
SqlCommand sqlCommandKill = new SqlCommand("kill " + DataSet.Tables[0].Rows[i][0].ToString(), connection);
sqlCommandKill.CommandType = CommandType.Text;
sqlCommandKill.ExecuteNonQuery();
}
SqlCommand sqlCommand = new SqlCommand("RESTORE DATABASE " + strDbName + " FROM DISK = '" + strFileName + "' ", connection);
sqlCommand.CommandType = CommandType.Text;
int intRowAffect = sqlCommand.ExecuteNonQuery();
if (intRowAffect == -1)
{
return true;
}
else
{
return false;
}
}
catch (SqlException sqlException)
{
throw (new Exception("恢复数据库失败,请关闭所有和该数据库连接的程序!" + sqlException.Message));
}
finally
{
connection.Close();
}
}