2015-12-24 137 views
0

我用代码C#写一页数据从服务器备份.bak文件到客户端计算机的客户端计算机。当我在我的电脑上测试的时候非常好。当通过使用connectionString web.cofig通过另一台计算机连接时,它会再次出现像这样的错误。这一个像之前或解决方法,请帮助。如何备份数据库从服务器使用asp.net页面

enter image description here

私人字符串_ConnectionString = ConfigurationManager.ConnectionStrings [ “的connectionString”]的ToString();

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     FillDatabases(); 
     //ReadBackupFiles(); 
    } 
} 

private void FillDatabases() 
{ 
    try 
    { 
     SqlConnection sqlConnection = new SqlConnection(); 
     sqlConnection.ConnectionString = _ConnectionString; 
     sqlConnection.Open(); 
     string sqlQuery = "SELECT * FROM sys.databases"; 
     SqlCommand sqlCommand = new SqlCommand(sqlQuery, sqlConnection); 
     sqlCommand.CommandType = CommandType.Text; 
     SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand); 
     DataSet dataSet = new DataSet(); 
     sqlDataAdapter.Fill(dataSet); 
     ddlDatabases.DataSource = dataSet.Tables[0]; 
     ddlDatabases.DataTextField = "name"; 
     ddlDatabases.DataValueField = "database_id"; 
     ddlDatabases.DataBind(); 
    } 
    catch (SqlException sqlException) 
    { 
     lblMessage.Text = sqlException.Message.ToString(); 
    } 
    catch (Exception exception) 
    { 
     lblMessage.Text = exception.Message.ToString(); 
    } 
} 

protected void btnBackup_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     string _DatabaseName = ddlDatabases.SelectedItem.Text.ToString(); 
     string _BackupName = _DatabaseName + "_" + DateTime.Now.Day.ToString() + "_" + DateTime.Now.Month.ToString() + "_" + DateTime.Now.Year.ToString() + ".bak"; 
     SqlConnection sqlConnection = new SqlConnection(); 
     sqlConnection.ConnectionString = _ConnectionString; 
     sqlConnection.Open(); 
     string sqlQuery = "BACKUP DATABASE " + _DatabaseName + " TO DISK = 'D:\\SQLServerBackups\\" + _BackupName + "' WITH FORMAT, MEDIANAME = 'Z_SQLServerBackups', NAME = '" + _BackupName + "';"; 
     SqlCommand sqlCommand = new SqlCommand(sqlQuery, sqlConnection); 
     sqlCommand.CommandType = CommandType.Text; 
     int iRows = sqlCommand.ExecuteNonQuery(); 
     sqlConnection.Close(); 
     lblMessage.Text = "The " + _DatabaseName + " database Backup with the name " + _BackupName + " successfully..."; 
     ReadBackupFiles(); 
    } 
    catch (SqlException sqlException) 
    { 
     lblMessage.Text = sqlException.Message.ToString(); 
    } 
    catch (Exception exception) 
    { 
     lblMessage.Text = exception.Message.ToString(); 
    } 
} 
+0

请发表您的代码和更多的细节 – Clay

+0

错误说,这一切,文件路径是不正确的 –

+0

欢迎计算器:) – www139

回答

0

正在发生的事情是,当您在计算机上运行这个程序一切正常。因为它是设置为你的系统。如果你想转移到你的系统或另一台独立于服务器的计算机上,有几件事情可能会起作用。您可以使共享驱动器脱离您希望程序放入文件的系统,这可能会或可能不起作用,因为共享文件夹的处理方式与普通文件夹/驱动器不同。在服务器转储到服务器有权访问的预定义​​文件夹后,我会编写一个连接到文件服务器的上传程序,并将备份文件自动上传到那里。 C#有一些非常好的文件上传库,可以为您自动执行此过程。所以你可以有一个asp.net页面,它可以像当前系统一样为备份文件提供备份文件,另外一个c#程序可以使用调度程序在特定时间运行,并将备份从服务器远程上传到所需的位置。

希望这是有道理的,让我知道你是否有任何问题。

https://msdn.microsoft.com/en-us/library/ms229715(v=vs.110).aspx

下面是代码从一个文件位置自动为您有C#上传文件。您需要在要备份的计算机上安装一个ftp服务器。否则,唯一的解决办法是使文件可以从服务器上下载,这意味着只需使文件夹在Internet上可见即可。但我会选择ftp选项,因为它是最灵活的。

+0

那么现在还有其他解决方案吗?引导我到服务器上备份数据的时候,文件夹中的备份.bak文件就是客户端。但我不明白如何做得很好。你可以帮我吗? –

+0

当然!你可以添加那个.bak转储到你的问题上面的代码吗?我会寻找有助于自动上传过程的FTP上传程序。有点像用bash脚本做一个cron作业的方式。但是,如果我能看到问题中的代码,它将帮助我理解您是如何在系统上进行备份的。我很快就要去上床了,所以我可能直到早上才回复你。 – Caperneoignis

+0

但该程序也说驱动器不正确。所以这可能是我的一个误解。你是否确定系统中的驱动器和文件夹位置激动人心?这听起来像程序写在您的系统上,然后移动到服务器,并停止运作。所以我可能会有误解。所以更多的澄清将帮助我。 – Caperneoignis

0

您在在线模式下创建备份还是只在您的服务器上创建备份?如果你的服务器中有一些文件,实现下载功能,这就是你所需要的。

Response.ContentType = "application/octet-stream"; 
Response.AppendHeader("Content-Disposition", "attachment; filename="+file); 
Response.TransmitFile(Server.MapPath("~/backups/"+file)); //backup must be located in folder in your application folder, that folder named *backups* 
Response.End(); //file is a filename of your backup: e.g. 20151224.bak 

如果创建在线备份,并想将它发送给用户,你所要做的下一步措施(这只是一个方法):

1)请备份并保存到你的应用程序文件夹一些临时文件夹

2)实现下载页面正如我在前面显示(用户尽快下载)

3)以及作为,你只是删除您的临时备份文件的用户下载。

希望它可以帮助

+0

的位置,谢谢! 但这几乎就像服务器上已经存在的.bak文件副本上的备份。 所以他们自己不会。我只想在用户计算机上的服务器上存储的文件上进行备份。而不是通过操纵存储在服务器硬盘上,然后复制用户电脑 反正非常感谢你。因为你给了我更多的1种方式也不错 –

+0

@DanyTran不用客气 – Khazratbek

相关问题