首页 > 解决方案 > .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 变为“”并且“不支持给定路径的格式。” 被抛出。. 任何回应将不胜感激。

标签: c#sql-server-express

解决方案


推荐阅读