尝试备份和恢复数据库时出现此错误。
后端:
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);
}
}
请帮忙。
答案 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 |”根据目标部署环境,将字符串的一部分转换为正确的物理路径。