c# - .Net 4.7.2 Sql 在长文件夹路径中导出 bak 文件
问题描述
我正在尝试将 sql 数据库导出到 .bak 文件中,当我尝试使用长文件路径(大于 260 个字符)进行导出时,我遇到了以下情况。此外,我正在使用保存对话框来允许用户指定存储 bak 文件的路径,并且当给定路径超过 260 个字符时,保存对话框的保存按钮不会执行任何操作。有什么方法可以处理我的 c# 应用程序中的长路径。我尝试在文件路径前加上“\?” 喜欢
SaveFileDialog dialog = CreateExportSaveFileDialog();
if (dialog.ShowDialog() == DialogResult.OK)
{
string pathFileName = @"\\?\" + dialog.FileName;
ExportConfigurationDatabase(databaseName, pathFileName);
}
以及执行 bak 导出的 sql 命令:
string sqlDynamicQuery = "DECLARE @sql nvarchar (max) = (" +
"SELECT " +
"'BACKUP DATABASE '" +
"+ QUOTENAME(name) " +
"+ ' TO DISK=@outputfile WITH FORMAT,COPY_ONLY,INIT, NAME = @backup_set_name_var, SKIP' " +
"FROM sys.databases " +
"WHERE name = @database); "+
"EXEC sp_executesql " +
"@sql, " +
"N'@backup_set_name_var nvarchar(128), @outputfile nvarchar(MAX)', "+
"@backup_set_name_var = @backup_set_name_var, "+
"@outputfile = @outputfile; ";
using (SqlCommand sqlCmd = new SqlCommand(sqlDynamicQuery, _sqlConnection))
{
sqlCmd.Parameters.Add("@database", SqlDbType.NVarChar, 128).Value = databaseName;
sqlCmd.Parameters.Add("@backup_set_name_var", SqlDbType.NVarChar, 128).Value = databaseName + " -Full Database Backup";
sqlCmd.Parameters.Add("@outputfile", SqlDbType.NVarChar, -1).Value = outputFile;
sqlCmd.ExecuteNonQuery();
}
编辑: 正如建议的那样,我尝试像这样修改 App.config
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2"/></startup>
<runtime><AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false;Switch.System.IO.BlockLongPaths=false"/></runtime>
但是当我尝试引入超过 260 个字符的路径时,在 savedialog 中,dialog.FileName 变为“”并且“不支持给定路径的格式。” 被抛出。. 任何回应将不胜感激。
解决方案
推荐阅读
- ios - 如何制作关闭/打开 MKmapView 上的用户位置的代码?
- python - Django REST RetrieveAPIView 组合查询集
- java - JAVA_HOME 设置为无效目录-vs 代码
- awk - 以毫秒为单位查找时间差 awk 或 gawk
- javascript - 使用 useState 存储对象数组的状态
- opencv - 空图像上的空掩模腐蚀产生白色
- asp.net-core - 如何在带有 ViewModel 的 EF Core 中使用 .Include()
- c# - 我找不到如何在我的 xamarin 项目中使用 json 格式
- image-processing - 谁能解释一下 RowSize 和 PixelArraySize 在 BMP 文件格式中的含义?
- r - 如何转换这个数据框?排序因子和组合