2

重複の可能性:
SQL Server - データベース 'Database' が存在しません。名前が正しく入力されていることを確認してください

このコードを書きましたが、データベースはバックアップを認識しませんか? 親切にガイド

  SqlConnection con = new SqlConnection();
            con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Resources\dbcn.mdf;Integrated Security=True;User Instance=True";

            SqlCommand cmd = new SqlCommand();
            string MasterPath = "c://";
            try
            {
                con.Open();
                //BACKUP DATABASE نام بانک اطلاعاتی TO DISK = 'مسیر پشتیبان گیری بانک اطلاعاتی'
                string query = "BACKUP DATABASE dbcn TO DISK = '" + MasterPath + @"\BackupLibrary" + "\\dbcn.mdf" + "'";
                cmd.CommandText = query;
                cmd.Connection = con;
                cmd.ExecuteNonQuery();
                con.Close();

                MessageBox.Show("error");
            }
            catch(System.Exception EX)
            {
                System.Windows.Forms.MessageBox.Show(EX.Message);

            }

エラー;

Database 'dbcn' does not exist. Make sure that the name is entered correctly.

BACKUP DATABASE が異常終了しています。

4

1 に答える 1

0

このプロジェクトには必要以上かもしれませんが、将来的には SQL 管理オブジェクト (SMO) を調査する必要があるかもしれません。これにより、マネージ コード (c# など) で SQL Server のメンテナンス タスクを実行できるようになります。

これは SQL Server SDK の一部だと思います。プロジェクトに次の参照を追加する必要があります。

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

これらのアセンブリは、C:\Program Files\Microsoft SQL Server\110\SDK\Assemblies\ にあります。

string ServerName = "server";
string DatabaseName = database;
string UserId = userId;
string Password = password;
ServerConnection serverConnection;

private Server _server;
public Server Server
{
    get
    {
        if (_server == null)
        {
            Connect();
        }
        return _server;
    }
}

string connectionString 
{
    get
    {
        return string.Format("Data Source={0};Initial Catalog={1};UID={2};Password={3}", ServerName, DatabaseName, UserId, Password);
    }
}

public void Connect()
{
    _serverConnection = new ServerConnection();
    _serverConnection.LoginSecure = false;
    _serverConnection.Login = UserId;
    _serverConnection.Password = Password;

    _server = new Server(_serverConnection);
}

public void BackupDatabase()
{
    using (SqlConnection cn = new SqlConnection(connectionString))
    {
        ServerConnection svCon = new ServerConnection(cn);
        Server svr = new Server(svCon);
        cn.Open();
        cn.ChangeDatabase("master");

        string testFolder = @"C:\temp";
        string databaseName = _databaseName;
        Backup backup = new Backup();
        backup.Action = BackupActionType.Database;
        backup.Database = databaseName;
        backup.Incremental = false;
        backup.Initialize = true;
        backup.LogTruncation = BackupTruncateLogType.Truncate;

        string fileName = string.Format("{0}\\{1}.bak", testFolder, databaseName);
        BackupDeviceItem backupItemDevice = new BackupDeviceItem(fileName, DeviceType.File);
        backup.Devices.Add(backupItemDevice);
        backup.PercentCompleteNotification = 10;
        //backup.PercentComplete += backup_PercentComplete;
        //backup.Complete += backup_Complete;

        backup.SqlBackup(svr);
        if (!VerifyBackup(svr))
        {
            //throw new Exception("Backup could not be verified.");
        }
        svr = null;
        cn.Close();
    }
}

public bool VerifyBackup(Server svr)
{
    string testFolder = @"C:\temp";
    string databaseName = _databaseName;
    Restore restore = new Restore();
    restore.Action = RestoreActionType.Database;
    string fileName = string.Format("{0}\\{1}.bak", testFolder, databaseName);
    BackupDeviceItem backupItemDevice = new BackupDeviceItem(fileName, DeviceType.File);
    restore.Devices.AddDevice(fileName, DeviceType.File);
    restore.Database = databaseName;
    restore.PercentCompleteNotification = 10;
    //restore.PercentComplete += new PercentCompleteEventHandler(ProgressEventHandler);

    bool verified = restore.SqlVerify(svr);
    return verified;
}

public void RestoreDatabase()
{
    using (SqlConnection cn = new SqlConnection(connectionString))
    {
        ServerConnection svCon = new ServerConnection(cn);
        Server svr = new Server(svCon);
        cn.Open();
        cn.ChangeDatabase("master");

        string testFolder = @"C:\temp";
        string databaseName = _databaseName;
        Restore restore = new Restore();
        restore.Action = RestoreActionType.Database;
        string fileName = string.Format("{0}\\{1}.bak", testFolder, databaseName);
        BackupDeviceItem backupItemDevice = new BackupDeviceItem(fileName, DeviceType.File);
        restore.Devices.AddDevice(fileName, DeviceType.File);
        restore.Database = databaseName;
        restore.ReplaceDatabase = true;
        restore.PercentCompleteNotification = 10;
        //restore.PercentComplete += new PercentCompleteEventHandler(ProgressEventHandler);
        svr.KillAllProcesses(databaseName);

        restore.SqlRestore(svr);
        svr = null;
        cn.Close();
    }
}
于 2012-10-21T06:15:28.807 に答える