一个操作数据库的类(备份,还原,分离,附加,添加删除用户等操作)
2011-09-13 14:50 苏飞 阅读(2035) 评论(0) 编辑 收藏 举报/* * 更新时间 :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 进行讨论,感谢大家对我的支持!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述