zoukankan      html  css  js  c++  java
  • 一个操作数据库的类(备份,还原,分离,附加,添加删除用户等操作)

    /*
     * 更新时间 :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
            }
        }
    }
    

      

    本人的博客不再维护从2013年就不再维护了 需要我帮助的朋友请到我的个人论坛 http://www.sufeinet.com 进行讨论,感谢大家对我的支持!
  • 相关阅读:
    Android——继续深造——从安装Android Studio 2.0开始(详)
    PHP——安装wampserver丢失MSVCR110.dll
    Marza Gift for GDC 2016
    Retrieve OpenGL Context from Qt 5.5 on OSX
    Space Time Varying Color Palette
    Screen Space Depth Varying Glow based on Heat Diffusion
    Visualization of Detail Point Set by Local Algebraic Sphere Fitting
    Glass Dragon
    Jump Flood Algorithms for Centroidal Voronoi Tessellation
    京都之行
  • 原文地址:https://www.cnblogs.com/sufei/p/2174716.html
Copyright © 2011-2022 走看看