• C#生成安装文件后自动附加数据库的思路跟算法


    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
    using System.Data.SqlClient;
    using System.Data;
    using System.ServiceProcess;

    namespace AdminZJC.DataBaseControl
    {
     /// <summary>
     /// 数据库操作控制类
     /// </summary>
     public class DataBaseControl
     {
     /// <summary>
     /// 数据库连接字符串
     /// </summary>
     public string ConnectionString;

     /// <summary>
     /// SQL操作语句/存储过程
     /// </summary>
     public string StrSQL;

     /// <summary>
     /// 实例化一个数据库连接对象
     /// </summary>
     private SqlConnection Conn;

     /// <summary>
     /// 实例化一个新的数据库操作对象Comm
     /// </summary>
     private SqlCommand Comm;

     /// <summary>
     /// 要操作的数据库名称
     /// </summary>
     public string DataBaseName;

     /// <summary>
     /// 数据库文件完整地址
     /// </summary>
     public string DataBase_MDF;

     /// <summary>
     /// 数据库日志文件完整地址
     /// </summary>
     public string DataBase_LDF;

     /// <summary>
     /// 备份文件名
     /// </summary>
     public string DataBaseOfBackupName;

     /// <summary>
     /// 备份文件路径
     /// </summary>
     public string DataBaseOfBackupPath;

     /// <summary>
     /// 执行创建/修改数据库和表的操作
     /// </summary>
     public void DataBaseAndTableControl()
     {
     try
     {
     Conn = new SqlConnection(ConnectionString);
     Conn.Open();

     Comm = new SqlCommand();
     Comm.Connection = Conn;
     Comm.CommandText = StrSQL;
     Comm.CommandType = CommandType.Text;
     Comm.ExecuteNonQuery();

     MessageBox.Show("数据库操作成功!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
     }
     catch (Exception ex)
     {
     MessageBox.Show(ex.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
     }
     finally
     {
     Conn.Close();
     }
     }

     /// <summary>
     /// 附加数据库
     /// </summary>
     public void AddDataBase()
     {
     try
     {
     Conn = new SqlConnection(ConnectionString);
     Conn.Open();

     Comm = new SqlCommand();
     Comm.Connection = Conn;
     Comm.CommandText = "sp_attach_db";

     Comm.Parameters.Add(new SqlParameter(@"dbname", SqlDbType.NVarChar));
     Comm.Parameters[@"dbname"].Value = DataBaseName;
     Comm.Parameters.Add(new SqlParameter(@"filename1", SqlDbType.NVarChar));
     Comm.Parameters[@"filename1"].Value = DataBase_MDF;
     Comm.Parameters.Add(new SqlParameter(@"filename2", SqlDbType.NVarChar));
     Comm.Parameters[@"filename2"].Value = DataBase_LDF;

     Comm.CommandType = CommandType.StoredProcedure;
     Comm.ExecuteNonQuery();

     MessageBox.Show("附加数据库成功", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
     }
     catch (Exception ex)
     {
     MessageBox.Show(ex.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
     }
     finally
     {
     Conn.Close();
     }
     }

     /// <summary>
     /// 分离数据库
     /// </summary>
     public void DeleteDataBase()
     {
     try
     {
     Conn = new SqlConnection(ConnectionString);
     Conn.Open();

     Comm = new SqlCommand();
     Comm.Connection = Conn;
     Comm.CommandText = @"sp_detach_db";

     Comm.Parameters.Add(new SqlParameter(@"dbname", SqlDbType.NVarChar)); 
    Comm.Parameters[@"dbname"].Value = DataBaseName;

     Comm.CommandType = CommandType.StoredProcedure;
     Comm.ExecuteNonQuery();

     MessageBox.Show("分离数据库成功", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
     }
     catch (Exception ex)
     {
     MessageBox.Show(ex.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
     }
     finally
     {
     Conn.Close();
     }
     }

     /// <summary>
     /// 备份数据库
     /// </summary>
     public void BackupDataBase()
     {
     try
     {
     Conn = new SqlConnection(ConnectionString);
     Conn.Open();

     Comm = new SqlCommand();
     Comm.Connection = Conn;
     Comm.CommandText = "use master;backup database @dbname to disk = @backupname;";

     Comm.Parameters.Add(new SqlParameter(@"dbname", SqlDbType.NVarChar));
     Comm.Parameters[@"dbname"].Value = DataBaseName;
     Comm.Parameters.Add(new SqlParameter(@"backupname", SqlDbType.NVarChar));
     Comm.Parameters[@"backupname"].Value = @DataBaseOfBackupPath + @DataBaseOfBackupName;

     Comm.CommandType = CommandType.Text;
     Comm.ExecuteNonQuery();

     MessageBox.Show("备份数据库成功", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
     }
     catch (Exception ex)
     {
     MessageBox.Show(ex.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
     }
     finally
     {
     Conn.Close();
     }
     }

     /// <summary>
     /// 还原数据库
     /// </summary>
     public void ReplaceDataBase()
     {
     try
     {
     string BackupFile = @DataBaseOfBackupPath + @DataBaseOfBackupName;
     Conn = new SqlConnection(ConnectionString);
     Conn.Open();

     Comm = new SqlCommand();
     Comm.Connection = Conn;
     Comm.CommandText = "use master;restore database @DataBaseName From disk = @BackupFile with replace;";

     Comm.Parameters.Add(new SqlParameter(@"DataBaseName", SqlDbType.NVarChar));
     Comm.Parameters[@"DataBaseName"].Value = DataBaseName;
     Comm.Parameters.Add(new SqlParameter(@"BackupFile", SqlDbType.NVarChar));
     Comm.Parameters[@"BackupFile"].Value = BackupFile;

     Comm.CommandType = CommandType.Text;
     Comm.ExecuteNonQuery();

     MessageBox.Show("还原数据库成功", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
     }
     catch (Exception ex)
     {
     MessageBox.Show(ex.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
     }
     finally
     {
     Conn.Close();
     }
     }
     }
    }

    /*
     ///调用事例:
     
        还原数据库
     private void button0_Click(object sender, EventArgs e)
     {
     DataBaseControl DBC = new DataBaseControl();
     DBC.ConnectionString = "Data Source=(local);User id=sa;Password=123456; Initial Catalog=master";
     DBC.DataBaseName = "MyDatabase";
     DBC.DataBaseOfBackupName = @"back.bak";
     DBC.DataBaseOfBackupPath = @"D:\Program Files\Microsoft SQL Server\MSSQL\Data\";
     DBC.ReplaceDataBase();
     }
     
        附加数据库
     private void button1_Click_1(object sender, EventArgs e)
     {
     DataBaseControl DBC = new DataBaseControl();
     DBC.ConnectionString = "Data Source=(local);User id=sa;Password=123456; Initial Catalog=master";
     DBC.DataBaseName = "MyDatabase";
     DBC.DataBase_MDF = @"D:\Program Files\Microsoft SQL Server\MSSQL\Data\MyDatabase_Data.MDF";
     DBC.DataBase_LDF = @"D:\Program Files\Microsoft SQL Server\MSSQL\Data\MyDatabase_Log.LDF";
     DBC.AddDataBase();
     }
     
        备份数据库
     private void button2_Click(object sender, EventArgs e)
     {
     DataBaseControl DBC = new DataBaseControl();
     DBC.ConnectionString = "Data Source=(local);User id=sa;Password=123456; Initial Catalog=master";
     DBC.DataBaseName = "MyDatabase";
     DBC.DataBaseOfBackupName = @"back.bak";
     DBC.DataBaseOfBackupPath = @"D:\Program Files\Microsoft SQL Server\MSSQL\Data\";
     DBC.BackupDataBase();
     }
     
        分离数据库
     private void button3_Click(object sender, EventArgs e)
     {
     DataBaseControl DBC = new DataBaseControl();
     DBC.ConnectionString = "Data Source=(local);User id=sa;Password=123456; Initial Catalog=master";
     DBC.DataBaseName = "MyDatabase";
     DBC.DeleteDataBase();
     } 
  • 相关阅读:
    [转]element UI表单校验特殊需求用法实现
    Windows10启用远程桌面并修改默认端口号
    [转]vuetreeselect 爬坑之路
    [转]关于IDEA创建module时名字后面出现中括号的情况例如 aaaa[bbbb]
    [转]玩转IDEA项目结构Project Structure,打Jar包、模块/依赖管理全搞定
    vue 父组件向子组件传值,子组件接收不到问题
    【Golang】golang开发微信公众号网页授权功能
    【Golang】golang实现sha256加密函数
    【Golang】golang实现urlencode urldecode函数
    【MySQL】mysql因为字符集导致left join出现Using join buffer (Block Nested Loop)
  • 原文地址:https://www.cnblogs.com/zengwei/p/814080.html
Copyright © 2020-2023  润新知