从c#备份数据库
本文关键字:数据库 备份 | 更新日期: 2023-09-27 18:14:40
我有一个在使用Windows身份验证时运行它的存储过程。如果我以标准网站用户的身份运行它,它就会失败,我猜这是权限问题。所以我试图添加一个脚本,允许我从c#连接到数据库,并使用Windows授权运行备份。
public bool BackUpDataBase()
{
string connString = _country == Country.England ? _connectionStringSiteDbEngland : _connectionStringSiteDbScotland;
try
{
using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
SqlCommand cmd = new SqlCommand("BackupDB", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@BaseLocation", _serverBackupLocation));
cmd.Parameters.Add(new SqlParameter("@BackupType", _backupType));
cmd.ExecuteNonQuery();
return true;
}
}
catch (Exception e)
{
//FAILED :(
return false;
}
}
我在cmd.ExecuteNonQuery();
上得到一个超时错误。同样的连接字符串允许我连接数据库来查询这里的表。
public bool IsScheduled()
{
string archiveDB = _country == Country.England ? _englandArchiveDBName : _scotlandArchiveDBName;
using (SqlConnection conn = new SqlConnection(_country == Country.England ? _connectionStringSiteDbEngland : _connectionStringSiteDbScotland))
{
conn.Open();
SqlCommand cmd = new SqlCommand(SQLToCheckSchedule(), conn);
cmd.CommandType = CommandType.Text;
int rows = 0;
using (SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
rows++;
}
}
conn.Close();
return rows > 0;
}
}
任何想法?
与常规的表查询相比,数据库备份过程花费的时间太长了。可以通过SqlCommand命令设置命令超时时间。CommandTimeout地产
cmd.CommandTimeout = 1000; //This is in seconds
cmd.ExecuteNonQuery();
默认为30秒。您也可以将其设置为0,以便它将无限期地等待。然而,这有点危险,因为这可能会锁定您的网站/应用程序。您可能希望将备份进程设置在其他地方,例如计划任务。