Sql server SMO备份报告可以';t打开备份设备(这是一个文件),消息3201

Sql server SMO备份报告可以';t打开备份设备(这是一个文件),消息3201,sql-server,sql-server-2012,asp.net-mvc-5,shared-hosting,smo,Sql Server,Sql Server 2012,Asp.net Mvc 5,Shared Hosting,Smo,此代码在本地SQL Server Express实例上运行良好: Dim thisSMOBackup As New Backup() With thisSMOBackup .Database = singleDatabase.Name 'This contains the database name .Action = BackupActionType.Database .Devices.AddDevice(DatabaseFileName, DeviceType.File) .

此代码在本地SQL Server Express实例上运行良好:

Dim thisSMOBackup As New Backup()
With thisSMOBackup
  .Database = singleDatabase.Name 'This contains the database name
  .Action = BackupActionType.Database
  .Devices.AddDevice(DatabaseFileName, DeviceType.File)
  .Incremental = False
  .LogTruncation = BackupTruncateLogType.Truncate
End With
Try
  thisSMOBackup.SqlBackup(thisServer) 'thisServer is setup w/ valid connection string and reads back data OK from the SQL server
  System.IO.File.AppendAllText(logfileName, singleDatabase.Name & " - backed up")
Catch ex As Exception
  System.IO.File.AppendAllText(logfileName, singleDatabase.Name & " - " & ex.InnerException.Message & vbCrLf)
End Try
当我将相同的代码应用于共享宿主SQL Server时,会产生以下内部异常错误消息:

无法打开备份设备“D:\aFolderName\aBackupName\theDatabaseName.bak”。操作系统错误3(系统找不到指定的路径)。备份数据库异常终止。
信息#:3201

似乎有不同的方式连接到服务器。对于SQL Server Express实例,我使用的是
.ServerInstance
属性,对于托管服务器,我使用的是
.ConnectionString
属性。这与SMO代码的工作方式有关吗

我曾读到共享SQL托管服务器可能有难以逾越的限制,但在我放弃之前,我想征求意见


这个错误本身表明SMO找不到写入文件的位置,但它就在那里,我将文件夹的安全设置为“所有人”和“完全控制”。但是,错误似乎并不总是准确地表达他们所说的意思。我想知道是否需要设置一些其他参数才能使此操作成功,或者需要查看其他位置。

当您试图在共享主机环境中创建备份时,备份文件正在写入该远程服务器计算机的文件系统不是您自己的、本地的
D:
drive!)您的SQL Server正在运行的地方

很可能,远程运行SQL Server的用户帐户没有写入该目录的权限

另外:这是一件好事!毕竟,你不会希望一台你不知道也无法控制的远程服务器能够直接对你自己的本地机器进行写访问,现在你会这样做吗


您可以(尤其是在公司环境中)将备份写入UNC路径(
\\server\share\path
)远程SQL Server计算机都有写入访问权限,并且您至少有读取访问权限,这样您就可以根据需要将
.bak
文件复制到本地计算机上。对于商业托管公司,该选项很少存在,但是….

我想我明白了。这是否意味着当我的local app访问SMO,SMO实际上是在远程SQL server上运行的,而不是在我的本地机器上运行的?我只是在与该服务器进行接口,它正在那里工作?假设是这样,似乎没有办法在本地发送SMO备份,但我会问,万一我遗漏了一些明显的东西;有什么技术可以使用吗要将备份推送到我的机器上吗?托管服务确实有一些备份功能,但它们是手动的&我试图用本地代码来实现。不,没有那么多…像其他人一样,我竭尽全力让人们远离我的机器!但由于我只是一个中等水平的程序员,我发现经常有已知或经验证的技术来解决这个问题像这样的问题我从来没有被曝光过,但显然不是这个问题。我会花一些时间尝试看看我是否可以使用主机提供商的ftp服务,以防以我希望的方式解决问题。但是,重点很好的帮助。Thx!