这个礼拜没有甚么事情,所以使用C#写了一个对数据库进行backup,restore的工具DBController,学到和温习了不少东西:
1。对数据库利用sqlDMO进行宏观的操作。
2。如何利用notifyIcon控件编写sys stray的代码。
3。ListView的使用。
4。contextMenu的使用。
5。C#的委托机制,delegate
6。进度调progressBar的使用。
7。C#对windows 脚本,存储过程的调用
。。。。。。。。
今天是第一篇笔记,当中DMO的使用主要来自
TerryLee的如何用SQLDMO在ASP.NET页面下实现数据库的备份与恢复
 
 1。得到数据库中tables的列表
 /// <summary>
  /// get the database in SqlServer 遍历数据库,得到talbe的列表
  /// </summary>
  public string[] GetSqlServerDatabases()
  {
   try
   {
    SqlConnection mySqlCon =  new SqlConnection("server=" + myServer + ";uid=" + myUser + ";pwd=" + myPassword + ";database=" + "");
    SqlCommand mySqlCmd = new SqlCommand("sp_databases",mySqlCon);
    
    mySqlCon.Open();
                ArrayList myDataBaseList = new ArrayList();
                ///*****************************************used SqlDataReader method,readOnly
                //SqlDataReader mySqlRdr = mySqlCmd.ExecuteReader();
                clear the former string[]
                //while(mySqlRdr.Read())
                //{
                //    myDataBaseList.Add(mySqlRdr["DATABASE_NAME"].ToString());
                //}
                //mySqlRdr.Close();
                //mySqlCon.Dispose();
                ///*****************************************used SqlDataReader method,readOnly
                SqlDataAdapter mySqlAdt = new SqlDataAdapter("sp_databases", mySqlCon);
                DataSet myDS = new DataSet();
                mySqlAdt.Fill(myDS,"DATABASE_NAME");
                mySqlCon.Close();
foreach (DataRow row in myDS.Tables["DATABASE_NAME"].Rows)
                {
                    myDataBaseList.Add(row[0].ToString());
                }
String[] myArr = (String[]) myDataBaseList.ToArray( typeof( string ) );
    return myArr;//myDataBaseList;
   }
   catch(Exception e)
   {
                throw e;    
   }
  }
2。进行对数据库的备份,
        /// <summary>
        /// Backup DB.
        /// </summary>
        public bool backupDB(string targetFile, string toBackup)
  {
            SQLDMO.Backup objBackup = new SQLDMO.BackupClass();
            SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
            try
            {
                oSQLServer.LoginSecure = false;
                oSQLServer.Connect(myServer, myUser, myPassword);
                objBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
                objBackup.Database = toBackup;                      //Gets or sets the database on which the backup or restore operation runs.
                objBackup.Files = targetFile;                        //指定备份的物理文件
                objBackup.BackupSetName = toBackup;                 //Gets or sets the name used to identify a particular backup set.
                objBackup.BackupSetDescription = "数据库备份Backup DB";
                objBackup.Initialize = true;
                //回调Step进行进度条的处理
                SQLDMO.BackupSink_PercentCompleteEventHandler pcech = new SQLDMO.BackupSink_PercentCompleteEventHandler(Step);
                objBackup.PercentComplete += pcech;
                objBackup.SQLBackup(oSQLServer);
                return true;
            }
            catch (Exception e)
            {
                status = e.ToString();
                throw e;
            }
            finally
            {
                oSQLServer.DisConnect();
            }   
  }
3。进行数据库的还原操作
        /// <summary>
        /// 进行数据库的还原操作
        /// </summary>
        /// <param name="toRestore"></param>
        /// <param name="targetFile"></param>
        /// <returns></returns>
  public bool restoreDB(string toRestore,string targetFile)
  {
            if (!File.Exists(targetFile))
                return false;
             if(exepro(toRestore)!=true)//执行存储过程
            {
                 return false;
             }
            else
            {
                SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
                SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
                try
                {
                    exepro(toRestore);
                    oSQLServer.LoginSecure = false;
                    oSQLServer.Connect(myServer, myUser, myPassword);
                    oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
                    oRestore.Database = toRestore;
                    /**自行修改
                    oRestore.Files = targetFile;
                    oRestore.FileNumber = 1;
                    oRestore.ReplaceDatabase = true;
                    oRestore.SQLRestore(oSQLServer);
return true;
                }
                catch(Exception e)
                {
                    throw e;
                }
                finally
                {
                    oSQLServer.DisConnect();
                }
            }
  }
4。杀死调用当前库的所有进程
        /// <summary>
        /// 杀死调用当前库的所有进程
        /// </summary>
        /// <returns></returns>
        private bool exepro(string toRestore)
        {
SqlConnection conn = new SqlConnection("server=" + myServer + ";uid=" + myUser + ";pwd=" + myPassword + ";database=" + "");
            SqlCommand cmd = new SqlCommand("killspid",conn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@dbname", toRestore);
            try
            {
                conn.Open();
                cmd.ExecuteNonQuery();
                return true;
            }
            catch(Exception ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }
        }
5。当中的killspid为存储过程,代码如下:
create proc p_killspid
@dbname varchar(200) --要关闭进程的数据库名
as
declare @sql nvarchar(500)
declare @spid nvarchar(20)
declare #tb cursor for
select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)
open #tb
fetch next from #tb into @spid
while @@fetch_status=0
begin
exec('kill '+@spid)
fetch next from #tb into @spid
end
close #tb
deallocate #tb
go

转载于:https://blog.51cto.com/chris/27949

DBController心得之一:利用DMO对象对SQL2005数据库进行Backup和restore的操作相关推荐

  1. SQL2005中使用backup、restore来备份和恢复数据库

    在SQL2005数据库中利用SQL语句进行数据备份与还原: 备份backup:backup database 数据库名称 tO disk = 备份路径 例:BACKUP DATABASE test T ...

  2. c++读取文本文件里的指定位置的字符_利用FSO对象向文本文件中写入信息

    大家好,我们今日讲解"VBA信息获取与处理"教程中第十八个专题"FSO对象对文件及文件夹的处理"的第五节"用FSO对象向文本文件中写入信息" ...

  3. java access ole word,利用OLE对象实现Word文档操作

    Word 是常用的字处理软件,在编程中充分利用现有的Word 文档就可以减少很多数据的处理.详细介绍了在ASP.NET 的程序中,利用数据库中的OLE 对象,实现Word文档的在线存取及预览. 1.引 ...

  4. vba fso读utf 文本_利用FSO对象操作文件

    大家好,我们今日讲解"VBA信息获取与处理"教程中第十八个专题"FSO对象对文件及文件夹的处理"的第二节"利用FSO对象操作文件",这个专题 ...

  5. 用html编写输出今天是星期几,利用Date对象编写程序,判断并输出今天是开学的第几周,星期几。...

    利用Date对象编写程序,判断并输出今天是开学的第几周,星期几. (function(){ var startDay = new Date(2014,8,1);        //根据指定的年月日时分 ...

  6. 利用FormData对象实现AJAX文件上传功能及后端实现

    包括HTML基础设置.CSS界面优化.JS利用FormData对象和AJAX进行上传.后端接收文件并存储到指定路径以及删除文件操作. FE HTML 基础的设置: <form enctype=& ...

  7. 利用对象池优化数据库操作

    简介:这是利用对象池优化数据库操作的详细页面,介绍了和asp.net,.Net,创建,对象池,示例有关的知识,要查看更多相关信息,请点击此处 说到对象池,大家都不陌生.很多人都实现过,网上的代码也满天 ...

  8. 利用连接对象增删改数据 jdbc 20210409235645323

    目标 利用jdbc的连接对象 向数据表中增删改数据 明确操作的表 库,表,数据结果 获取执行者对象 执行者是帮我们干活的一个对象 构建sql语句 添加数据 先试一试 获取一个合法的添加语句 把这个语句 ...

  9. vba listbox 内容输出到文本_利用FSO对象读取文本文件的信息

    大家好,我们今日讲解"VBA信息获取与处理"教程中第十八个专题"FSO对象对文件及文件夹的处理"的第四节"利用FSO对象读取文本文件的信息" ...

最新文章

  1. Js 向json对象中添加新元素
  2. 抓包工具Wireshark基本介绍和学习TCP三次握手
  3. 辅助类KeyNode
  4. Java笔记-使用jpa连接mysql数据库
  5. python sklearn 绘制决策树模型的节点图
  6. 【数据仓库】什么是数据仓库?
  7. 苹果更新系统微信收不到服务器,苹果手机升级iOS12后微信无法提示新消息的解决办法 亲测有效...
  8. Flash 实验 飞机爆炸
  9. Another version of Vue Devtools seems to be installed报错
  10. Resnet网络中数字的含义以及连接方式
  11. openlayers动态添加自定义div图层 具有筛选功能 和浮窗
  12. python数学圆周率_Python编程超简单方法算圆周率
  13. 话费充值接口文档源码(2)
  14. matlab中globalsearch,MATLAB中fmincon和globalsearch、multistart优化问题
  15. java项目-第120期儿童成长博客记录系统-java毕业设计
  16. iOS.11后的 iOS LaunchImage
  17. Discuz新秀网络验证管理系统- 火山PC - ver 1.0 - 软件开发框架
  18. 计算机无法共享打印,解决win7电脑打印机无法共享|打印机共享提示0x000006d9应如何解决...
  19. BUGKU-真正的爱情
  20. FPA笔记五 计算ILF/EIF功能点

热门文章

  1. mysql 临时表 插入_mysql临时表插入数据有关问题
  2. oracle中forall in,oracle10g的forall功能加强
  3. 远程过程调用失败_Dubbo 本地调用
  4. 神经网络 深度学习 专业术语解释(Step, Batch Size, Iteration,Epoch)
  5. 抚州虚拟服务器,南通虚拟主机_南通云虚机_南通主机申请_南通网站空间_爱名网(www.22.cn)...
  6. js 连接mysql_JS连接数据库
  7. c++ 11新特性总结_JDK1.8新特性Stream和Collectors19个常用示例总结
  8. 2021年12届蓝桥杯C++B组省赛
  9. openCV中的findHomography函数分析以及RANSAC算法的详解(源代码分析)
  10. mfc中加logo以及背景图