【问题标题】:Backup attached database file(.mdf) using c# and SQL Server [closed]使用 c# 和 SQL Server 备份附加的数据库文件(.mdf)[关闭]
【发布时间】:2013-08-13 11:59:36
【问题描述】:

我试图在我的 Winforms 应用程序中创建数据库备份。但它不起作用

这是我的代码:

cn.Open();
cmd = new SqlCommand();
cmd.Connection = cn;
cmd.CommandText=@"BACKUP DATABASE Database1.mdf TO DISK = 'C:\db1.bak'";
dr = cmd.ExecuteReader();
dr.close();
cn.Close();

这里cnSqlConnectioncmdSqlCommanddrSqlDataReader。请给我一个解决方案。

【问题讨论】:

  • 请提供更多细节。什么不起作用?有错误吗?它只是不起作用吗?您是在服务器上检查备份位置,而不是在连接到服务器的计算机上检查(如果它们不同)?
  • 你是什么意思它现在正在工作?您有任何异常或错误消息吗?
  • BACKUP DATABASE [Database1] TO DISK = 'C:\db1.bak'
  • cmd.ExecuteNonQuery()
  • 请记住,这里的C:\db1.bak 相对于 SQL 服务器。不适用于发出请求的机器

标签: c# .net sql sql-server winforms


【解决方案1】:

为什么不能使用sql server management objects

如下创建方法

using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;

public void BackupDatabase(string databaseName, string userName, string password, string serverName, string destinationPath)
{
    //Define a Backup object variable.
    Backup sqlBackup = new Backup();

    //Specify the type of backup, the description, the name, and the database to be backed up.
    sqlBackup.Action = BackupActionType.Database;
    sqlBackup.BackupSetDescription = "BackUp of:" + databaseName + "on" + DateTime.Now.ToShortDateString();
    sqlBackup.BackupSetName = "FullBackUp";
    sqlBackup.Database = databaseName;

    //Declare a BackupDeviceItem
    BackupDeviceItem deviceItem = new BackupDeviceItem(destinationPath + "FullBackUp.bak", DeviceType.File);
    //Define Server connection
    ServerConnection connection = new ServerConnection(serverName, userName, password);
    //To Avoid TimeOut Exception
    Server sqlServer = new Server(connection);
    sqlServer.ConnectionContext.StatementTimeout = 60 * 60;
    Database db = sqlServer.Databases[databaseName];

    sqlBackup.Initialize = true;
    sqlBackup.Checksum = true;
    sqlBackup.ContinueAfterError = true;

    //Add the device to the Backup object.
    sqlBackup.Devices.Add(deviceItem);
    //Set the Incremental property to False to specify that this is a full database backup.
    sqlBackup.Incremental = false;

    sqlBackup.ExpirationDate = DateTime.Now.AddDays(3);
    //Specify that the log must be truncated after the backup is complete.
    sqlBackup.LogTruncation = BackupTruncateLogType.Truncate;

    sqlBackup.FormatMedia = false;
    //Run SqlBackup to perform the full database backup on the instance of SQL Server.
    sqlBackup.SqlBackup(sqlServer);
    //Remove the backup device from the Backup object.
    sqlBackup.Devices.Remove(deviceItem);
}

用于使用上面显示的那些命名空间。您必须添加这些命名空间的引用。为此——

转到您的应用程序并右键单击引用文件夹并选择添加引用。

现在转到“浏览”选项卡并浏览以下路径- "C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies"

现在选择以下dll

Microsoft.SqlServer.ConnectionInfo.dll , Microsoft.SqlServer.Management.Sdk.Sfc.dll, Microsoft.SqlServer.Smo.dll , Microsoft.SqlServer.SmoExtended.dll, Microsoft.SqlServer.SqlEnum.dll,

注意: Dll 的位置可能会根据 MS SQL Server 的版本有所不同,我不确定。

【讨论】:

  • 我还有一个愚蠢的问题!如何找到密码?
  • 哪个密码?如果你在谈论 sql server 密码,你会在安装 Sql Server 时设置
  • 我什么都没给!我唯一做的就是以完整模式安装 Visual Studio 2008 Professional Edition。
  • 我很惊讶,那你要备份哪个数据库,那个数据库应该在sql server里面的某个地方。
  • 啊!我的服务器资源管理器看起来像这样(它可能会帮助您找到问题) DataConnections -database1.mdf -Nortwind.mdf 服务器 -mothivihar 我通过添加->新项目->基于服务的数据库添加了 database1,并通过选择数据库文件添加了北风 -mothivihar
猜你喜欢
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-11
  • 1970-01-01
相关资源
最近更新 更多