数据库备份和还原期间路径中的非法字符C#

时间:2013-08-19 04:07:35

标签: sql-server-2008 c#-4.0

尝试备份和恢复数据库时出现此错误。

  

后端: SQL server 2008

     

前端: C#

使用C#

进行数据库备份和还原时路径中的非法字符
    private void backToolStripMenuItem_Click(object sender, EventArgs e)
    {
        try
        {
        string FileToMove = null;
        string MoveLocation = null;
        string FileToDel = null;

        FileToMove = "|DataDirectory|\\CMS_DB.mdf";
        MoveLocation = "|DataDirectory|\\backup\\CMS_DB.mdf";
        FileToDel = "|DataDirectory|\\backup\\CMS_DB.mdf";

        if (MessageBox.Show("Are you sure you want to backup current database?", "CONFIRMATION", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == System.Windows.Forms.DialogResult.Yes)
        {
            System.IO.File.Delete(FileToDel);
            System.IO.File.Copy(FileToMove, MoveLocation);
            MessageBox.Show("Database successfully backup!");
        }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

    private void restoreToolStripMenuItem_Click(object sender, EventArgs e)
    {
        try
        {
        string FileToMove = null;
        string MoveLocation = null;
        string FileToDel = null;


        FileToMove = "|DataDirectory|\\CMS_DB.mdf";
        MoveLocation = "|DataDirectory|\\backup\\CMS_DB.mdf";
        FileToDel = "|DataDirectory|\\backup\\CMS_DB.mdf";

        if (MessageBox.Show("Are you sure want to permanently replace current database with the backup database?", "CONFIRMATION", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == System.Windows.Forms.DialogResult.Yes)
        {
            System.IO.File.Delete(FileToDel);
            System.IO.File.Copy(FileToMove, MoveLocation);
            MessageBox.Show("Database successfully restored!");

        }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

请帮忙。

3 个答案:

答案 0 :(得分:1)

您需要查看Path.GetInvalidPathChars Method 以确定无效字符列表。

  

不保证从此方法返回的数组包含   文件和目录中无效的完整字符集   名。完整的无效字符集可能因文件系统而异。对于   例如,在基于Windows的桌面平台上,路径字符无效   可能包括ASCII / Unicode字符1到31,以及引用   (“),小于(<),大于(>),管道(|),退格(\ b),null   (\ 0)和制表符(\ t)。

如果我没有弄错,我会在你提供的文件名中看到一个竖线(|)字符。

答案 1 :(得分:0)

两件事,

首先检查文件夹“backup”是否存在,然后使用此方法删除非法字符:

 public string StripIllegalChars(string _input)
    {
        int CharPos = 0;
        char[] stChars = System.IO.Path.GetInvalidPathChars();
        string Result = _input;

        CharPos = 0;


        foreach (char achr in stChars)
        {


            CharPos = _input.IndexOf(achr);


            if (CharPos > 0)
            {

                Result = Result.Replace(achr.ToString(), "");

            }

        }

        return Result;
    }

你也可以使用ms: http://msdn.microsoft.com/en-us/library/system.io.path.getinvalidpathchars.aspx

答案 2 :(得分:0)

| DataDirectory | 是一个替换字符串,可用于单独配置数据库文件的位置,但仅在定义 ADO.NET连接时才有效。< / p>

This post 可能对您有所帮助。我会引用可能对你有帮助的部分:

  

那么DataDirectory来自哪里?这是部署之一   安装程序定义的设置:

     
      
  • .MSI安装程序将其定义为应用程序的目标文件夹。
  •   
  • ClickOnce在项目中定义了一个特殊的数据文件夹。
  •   
  • 网络应用使用App_Data文件夹。
  •   
  • Visual Studio调试器使用调试文件夹。
  •   

所以你需要改变你的应用程序,并替换“| DataDirectory |”根据目标部署环境,将字符串的一部分转换为正确的物理路径。