苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

分布式系统框架(V1.3) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper万能框架(V2.3) HttpHelper官方出品,无敌框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V1.9) 最牛的爬虫类,没有爬不到只有想不到 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 14440|回复: 17

[数据库] 一个操作Sql2005数据库的类(备份,还原,分离,附加,添加删除用户等操作)

[复制链接]
  • TA的每日心情
    开心
    昨天 10:45
  • 签到天数: 641 天

    [LV.9]以坛为家II

    发表于 2012-7-2 11:57:31 | 显示全部楼层 |阅读模式
    导读部分
    -------------------------------------------------------------------------------------------------------------
    C#基类库苏飞版--系列教程导航
    http://www.sufeinet.com/thread-655-1-1.html

    [C#] 纯文本查看 复制代码
    /* 
     * 更新时间 :2011-09-01 16:06 
     * 更 新 人 :苏飞 
     */
    using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Data.SqlClient; 
    using System.Data; 
      
    namespace Sql2005 
    { 
        /// <summary> 
        /// Sql数据操作帮助类,包括数据的创建,删除,修改密码等一系统列操作 
        /// </summary> 
        public abstract class DBT_SqlHelper 
        { 
            #region 连接Sql数据部分 
      
            /// <summary> 
            /// 数据库连接字符串 
            /// </summary> 
            public static readonly string connectionString = System.Configuration.ConfigurationSettings.AppSettings["con"].ToString().Trim(); 
      
            #region//ExecteNonQuery方法 
      
            /// <summary> 
            ///执行一个不需要返回值的SqlCommand命令,通过指定专用的连接字符串。 
            /// 使用参数数组形式提供参数列表  
            /// </summary> 
            /// <param name="connectionString">一个有效的数据库连接字符串</param> 
            /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param> 
            /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param> 
            /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param> 
            /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns> 
            public static int ExecteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) 
            { 
                SqlCommand cmd = new SqlCommand(); 
                using (SqlConnection conn = new SqlConnection(connectionString)) 
                { 
                    //通过PrePareCommand方法将参数逐个加入到SqlCommand的参数集合中 
                    PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); 
                    int val = cmd.ExecuteNonQuery(); 
                    //清空SqlCommand中的参数列表 
                    cmd.Parameters.Clear(); 
                    return val; 
                } 
            } 
      
            /// <summary> 
            ///存储过程专用 
            /// </summary> 
            /// <param name="cmdText">存储过程的名字</param> 
            /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param> 
            /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns> 
            public static int ExecteNonQueryProducts(string cmdText, params SqlParameter[] commandParameters) 
            { 
                return ExecteNonQuery(DBT_SqlHelper.connectionString, CommandType.StoredProcedure, cmdText, commandParameters); 
            } 
      
            /// <summary> 
            ///Sql语句专用 
            /// </summary> 
            /// <param name="cmdText">T_Sql语句</param> 
            /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param> 
            /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns> 
            public static int ExecteNonQueryText(string cmdText, params SqlParameter[] commandParameters) 
            { 
                return ExecteNonQuery(DBT_SqlHelper.connectionString, CommandType.Text, cmdText, commandParameters); 
            } 
      
            #endregion 
      
            /// <summary> 
            /// 为执行命令准备参数 
            /// </summary> 
            /// <param name="cmd">SqlCommand 命令</param> 
            /// <param name="conn">已经存在的数据库连接</param> 
            /// <param name="trans">数据库事物处理</param> 
            /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param> 
            /// <param name="cmdText">Command text,T-SQL语句 例如 Select * from Products</param> 
            /// <param name="cmdParms">返回带参数的命令</param> 
            private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) 
            { 
                //判断数据库连接状态 
                if (conn.State != ConnectionState.Open) 
                    conn.Open(); 
                cmd.Connection = conn; 
                cmd.CommandText = cmdText; 
                //判断是否需要事物处理 
                if (trans != null) 
                    cmd.Transaction = trans; 
                cmd.CommandType = cmdType; 
                if (cmdParms != null) 
                { 
                    foreach (SqlParameter parm in cmdParms) 
                        cmd.Parameters.Add(parm); 
                } 
            } 
      
            #endregion 
      
            /// <summary> 
            /// 根据条件创建数据库 
            /// </summary> 
            /// <param name="dbName">用于指定数据文件的逻辑名称</param> 
            /// <param name="dbFileName">指定数据文件的操作系统文件名。其后面的参数是创建数据文件时定义的物理文件的路径名和文件名</param> 
            /// <param name="dbSize">指定数据文件的大小</param> 
            /// <param name="dbMaxSize">指定数据文件可以增长到的最大大小</param> 
            /// <param name="dbFileGrowth"> 
            /// 指定数据文件的增长增量,其值不能超过maxsize设置。0表示不增长。,默认值为MB。如果指定为%, 
            /// 则增量大小为发生时文件大小的指定百分比,如果没有指定,默认值为10%。 
            /// </param> 
            /// <param name="logName">用于指定数据日志的逻辑名称</param> 
            /// <param name="logFileName">指定数据日志的操作系统文件名。其后面的参数是创建数据日志时定义的物理文件的路径名和文件名</param> 
            /// <param name="logSize">指定数据日志的大小</param> 
            /// <param name="logMaxSize">指定数据日志可以增长到的最大大小</param> 
            /// <param name="logFileGrowth"> 
            /// 指定数据日志的增长增量,其值不能超过maxsize设置。0表示不增长。,默认值为MB。如果指定为%, 
            /// 则增量大小为发生时文件大小的指定百分比,如果没有指定,默认值为10%。 
            /// </param> 
            /// <param name="isDeletedb">在创建数据库是否删除同名的现存数据库</param> 
            public static void CreateDatabase(string dbName, string dbFileName, string dbSize, string dbMaxSize, string dbFileGrowth, 
               string logName, string logFileName, string logSize, string logMaxSize, string logFileGrowth, Boolean isDeletedb) 
            { 
                #region 检查是否存在数据dbName 
      
                StringBuilder dbSql = new StringBuilder(); 
                //设置当前数据库 
                dbSql.Append("USE master "); 
                dbSql.Append("  GO"); 
                if (isDeletedb) 
                { 
                    dbSql.Append("IF  EXISTS(SELECT * FROM  sysdatabases WHERE  name ='@dbName')begin DROP DATABASE @dbName  end"); 
                } 
                #endregion 
      
                #region 创建数据库 
      
                //开始创建数据并指定名称 
                dbSql.Append("CREATE DATABASE @dbName ON  PRIMARY ("); 
                //数据库名 
                dbSql.Append("NAME='@ dbName" + "_data',"); 
                //数据路经 
                dbSql.Append("FILENAME='@dbFileName', "); 
                //大小 
                dbSql.Append("SIZE=@dbSize, "); 
                //最大值 
                dbSql.Append("MAXSIZE= @dbMaxSize,"); 
                //增长值 
                dbSql.Append("FILEGROWTH=@dbFileGrowth)"); 
      
                #endregion 
      
                #region 创建数据库日志 
      
                //开始创建日志文件 
                dbSql.Append("LOG ON ("); 
                //日志文件名 
                dbSql.Append("NAME='@logName" + "_log',"); 
                //日志文件路经 
                dbSql.Append("FILENAME='@logFileName',"); 
                //大小 
                dbSql.Append("SIZE=@logSize,"); 
                //最大值 
                dbSql.Append("MAXSIZE=@logMaxSize,"); 
                //增加值 
                dbSql.Append("FILEGROWTH=@logFileGrowth ) GO"); 
      
                #endregion 
      
                #region 开始执行创建命令 
      
                //设置参数列表 
                SqlParameter[] parameter =  
                { 
                    new SqlParameter("@dbName", dbName),  
                    new SqlParameter("@dbFileName", dbFileName), 
                    new SqlParameter("@dbSize", dbSize), 
                    new SqlParameter("@dbMaxSize", dbMaxSize), 
                    new SqlParameter("@dbFileGrowth", dbFileGrowth), 
                    new SqlParameter("@logName", logName), 
                    new SqlParameter("@logFileName", logFileName), 
                    new SqlParameter("@logSize", logSize), 
                    new SqlParameter("@logMaxSize", logMaxSize), 
                    new SqlParameter("@logFileGrowth", logFileGrowth) 
                }; 
      
                DBT_SqlHelper.ExecteNonQueryText(dbSql.ToString().Trim(), null); 
      
                #endregion 
            } 
      
            /// <summary> 
            /// 删除指定名称的数据库文件以及日志文件 
            /// </summary> 
            /// <param name="dbName">数据库名称</param> 
            public static void DropDatabase(string dbName) 
            { 
                #region 构造Sql代码 
      
                StringBuilder dbSql = new StringBuilder(); 
                //设置当前数据库 
                dbSql.Append("USE master "); 
                dbSql.Append("  GO  "); 
                dbSql.Append("DROP DATABASE @dbName"); 
      
                #endregion 
      
                #region 开始执行命令 
      
                //设置参数列表 
                SqlParameter[] parameter = { new SqlParameter("@dbName", dbName) }; 
                DBT_SqlHelper.ExecteNonQueryText(dbSql.ToString().Trim(), parameter); 
      
                #endregion 
            } 
      
            /// <summary> 
            /// 备份数据库 
            /// </summary> 
            /// <param name="dbName">数据库文件名</param> 
            /// <param name="dbFileName">路经包括盘符和文件名以及扩展名称一般为“_dat”</param> 
            public static void BackupDatabase(string dbName, string dbFileName) 
            { 
                #region 构造Sql代码 
      
                StringBuilder dbSql = new StringBuilder(); 
                //设置当前数据库 
                dbSql.Append("USE master "); 
                dbSql.Append("  GO  "); 
                dbSql.Append("BACKUP DATABASE @dbName TO DISK ='@dbFileName'"); 
      
                #endregion 
      
                #region 开始执行命令 
      
                //设置参数列表 
                SqlParameter[] parameter =  
                { 
                    new SqlParameter("@dbName", dbName),  
                    new SqlParameter("@dbFileName", dbFileName) 
                }; 
      
                DBT_SqlHelper.ExecteNonQueryText(dbSql.ToString().Trim(), parameter); 
      
                #endregion 
            } 
      
            /// <summary> 
            /// 恢复数据库 
            /// </summary> 
            /// <param name="dbName">数据库名</param> 
            /// <param name="dbFileName">路经包括盘符和文件名以及扩展名称一般为“_dat”</param> 
            public static void RestoreDatabase(string dbName, string dbFileName) 
            { 
                #region 构造Sql代码 
      
                StringBuilder dbSql = new StringBuilder(); 
                //设置当前数据库 
                dbSql.Append("USE master "); 
                dbSql.Append("  GO  "); 
                dbSql.Append("restore database @dbName from disk='@dbFileName'  WITH REPLACE,RECOVERY"); 
      
                #endregion 
      
                #region 开始执行命令 
      
                //设置参数列表 
                SqlParameter[] parameter =  
                { 
                    new SqlParameter("@dbName", dbName),  
                    new SqlParameter("@dbFileName", dbFileName) 
                }; 
                DBT_SqlHelper.ExecteNonQueryText(dbSql.ToString().Trim(), null); 
      
                #endregion 
            } 
      
            /// <summary> 
            /// 附加数据库文件 
            /// </summary> 
            /// <param name="newDbName">附加时的新名称可以是原名,也可以得新取一个新名称</param> 
            /// <param name="dbFileName">数据文件的路径包括盘符和文件名以及扩展名</param> 
            /// <param name="logFileName">日志文件的路径包括盘符和文件名以及扩展名</param> 
            public static void OnlineDatabase(string newDbName, string dbFileName, string logFileName) 
            { 
                #region 构造Sql代码 
      
                StringBuilder dbSql = new StringBuilder(); 
                //设置当前数据库 
                dbSql.Append("USE master "); 
                dbSql.Append("  GO  "); 
                dbSql.Append("EXEC sp_attach_db @ newDbName,'@dbFileName','@logFileName'"); 
      
                #endregion 
      
                #region 开始执行命令 
      
                //设置参数列表 
                SqlParameter[] parameter =  
                { 
                    new SqlParameter("@dbFileName", dbFileName),  
                    new SqlParameter("@logFileName", logFileName) 
                }; 
                DBT_SqlHelper.ExecteNonQueryText(dbSql.ToString().Trim(), null); 
      
                #endregion 
            } 
      
            /// <summary> 
            /// 分离数据库文件 
            /// </summary> 
            /// <param name="dbName">数据库名称</param> 
            public static void OfflineDatabase(string dbName) 
            { 
                #region 构造Sql代码 
      
                StringBuilder dbSql = new StringBuilder(); 
                //设置当前数据库 
                dbSql.Append("USE master "); 
                dbSql.Append("  GO  "); 
                dbSql.Append(" exec  sp_detach_db '@dbName' "); 
      
                #endregion 
      
                #region 开始执行命令 
      
                //设置参数列表 
                SqlParameter[] parameter = { new SqlParameter("@dbName", dbName) }; 
                DBT_SqlHelper.ExecteNonQueryText(dbSql.ToString().Trim(), null); 
      
                #endregion 
            } 
      
            /// <summary> 
            /// 重新设置用户的密码 
            /// </summary> 
            /// <param name="newPassword">新密码</param> 
            /// <param name="userName">登录用户名</param> 
            public static void ResetPassword(string newPassword, string userName) 
            { 
                #region 构造Sql代码 
      
                StringBuilder dbSql = new StringBuilder(); 
                //设置当前数据库 
                dbSql.Append("USE master "); 
                dbSql.Append("  GO  "); 
                dbSql.Append("EXEC   sp_password null,'@newPassword','@userName'"); 
      
                #endregion 
      
                #region 开始执行命令 
      
                //设置参数列表 
                SqlParameter[] parameter =  
                { 
                    new SqlParameter("@newPassword", newPassword), 
                    new SqlParameter("@userName", userName)  
                }; 
                DBT_SqlHelper.ExecteNonQueryText(dbSql.ToString().Trim(), null); 
      
                #endregion 
            } 
      
            /// <summary> 
            /// 分离数据库文件 
            /// </summary> 
            /// <param name="dbName">数据库名称</param> 
            /// <param name="newPassword">新密码</param> 
            /// <param name="userName">登录用户名</param> 
            public static void CreateDbUser(string dbName, string userName, string passWord) 
            { 
                #region 构造Sql代码 
      
                StringBuilder dbSql = new StringBuilder(); 
                //设置当前数据库 
                dbSql.Append("USE  " + dbName); 
                dbSql.Append("  GO  "); 
                dbSql.Append("EXEC sp_addlogin N'@userName','@passWord'"); 
                dbSql.Append("EXEC sp_grantdbaccess N'@userName'"); 
      
                #endregion 
      
                #region 开始执行命令 
      
                //设置参数列表 
                SqlParameter[] parameter =  
                {  
                    new SqlParameter("@dbName",userName), 
                    new SqlParameter("@userName", userName), 
                    new SqlParameter("@passWord", passWord) 
                }; 
                DBT_SqlHelper.ExecteNonQueryText(dbSql.ToString().Trim(), null); 
      
                #endregion 
            } 
      
            /// <summary> 
            /// 给指定数据的指定用户授于本数据库的所有操作权限 
            /// </summary> 
            /// <param name="dbName">数据库名称</param> 
            /// <param name="userName">用户名称</param> 
            public static void AddRoleToDbUser(string dbName, string userName) 
            { 
                #region 构造代码 
      
                StringBuilder dbSql = new StringBuilder(); 
      
                //设置当前数据库 
                dbSql.Append("USE " + dbName); 
                dbSql.Append("GO "); 
                dbSql.Append("EXEC sp_addrolemember N'@dbName', N'@userName'"); 
      
                #endregion 
      
                #region 开始执行命令 
      
                //设置参数列表 
                SqlParameter[] parameter =  
                {  
                    new SqlParameter("@dbName",userName), 
                    new SqlParameter("@userName", userName) 
                }; 
                DBT_SqlHelper.ExecteNonQueryText(dbSql.ToString().Trim(), null); 
      
                #endregion 
            } 
        } 
    }

    本帖被以下淘专辑推荐:

    该用户从未签到

    发表于 2012-12-8 11:21:24 | 显示全部楼层
    不得不说,楼主很有想法。但实际意义不大,练手还是不错的。

    验证码的体验不是很好。
  • TA的每日心情
    开心
    昨天 10:45
  • 签到天数: 641 天

    [LV.9]以坛为家II

     楼主| 发表于 2012-12-8 11:52:27 | 显示全部楼层
    风舞清涟 发表于 2012-12-8 11:21
    不得不说,楼主很有想法。但实际意义不大,练手还是不错的。

    验证码的体验不是很好。

    这个理解一下吧,这个应该比让你1分钟发一次贴好多了,主要是这是我个人网站,没太多时间管理,你知道的垃圾广告太多,我删除都来不及,希望理解,以后会给特定用户不需要审核和验证码的,只要是技术人员,这些都好说,

    该用户从未签到

    发表于 2013-1-6 09:46:12 | 显示全部楼层
  • TA的每日心情
    开心
    昨天 10:45
  • 签到天数: 641 天

    [LV.9]以坛为家II

     楼主| 发表于 2013-1-6 09:56:52 | 显示全部楼层
    幻雪丶逆时光 发表于 2013-1-6 09:46
    2008 适用 不?  我正好有项目需要 代码备份

    你可以测试下,没多少代码

    该用户从未签到

    发表于 2013-4-9 16:57:37 | 显示全部楼层

    该用户从未签到

    发表于 2013-8-28 14:42:00 | 显示全部楼层

    该用户从未签到

    发表于 2013-12-30 13:52:48 | 显示全部楼层
  • TA的每日心情
    郁闷
    2016-6-29 11:25
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-1-21 16:50:37 | 显示全部楼层
    站长你好,这个类在SQL2008里面好像会有点问题,因为你所有的SQL都是使用StringBuilder追加起来的,所以Use master go这样的语句就在同一行,在2008里面好像不能识别,必须use master,然后换行go,当时当时我修改您的代码,追加的时候加上换行符\r\n,但是这个换行符在SQL里面是不能被识别的,您有好的解决方法吗?
  • TA的每日心情
    开心
    昨天 10:45
  • 签到天数: 641 天

    [LV.9]以坛为家II

     楼主| 发表于 2014-1-21 16:52:01 | 显示全部楼层
    kunkun0921 发表于 2014-1-21 16:50
    站长你好,这个类在SQL2008里面好像会有点问题,因为你所有的SQL都是使用StringBuilder追加起来的,所以Use ...

    我的Sql2008都正常啊,你测试了吗?
    您需要登录后才可以回帖 登录 | 马上注册

    本版积分规则

    QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备17001017号-1 )

    GMT+8, 2018-12-11 02:01

    © 2017-2018

    快速回复 返回顶部 返回列表