




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SQL-DMO的全称是SQL Distributed Management Objects。它是一个集合,包含一组有双重接口的COM。通过SQL-DMO我们可以控制操作SQL Server 的数据库引擎和复制管理。由于SQL-DMO是一组COM,所以任何可以使用COM的开发工具都可以使用它,包括VB、Delphi、VC、BCB、ASP等等几乎包括所有的Windows平台下的开发工具。用他操作管理数据库很爽。using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;using SQLDMO;using System.Collections;namespace ConsoleApplication1 / / SQLDMO辅助类 / / / 使用前添加 Microsoft SQLDMO Object Library COM 引用。 / public class SqlDmoHelper #region DatabaseInfo / / 数据库信息 / public struct DatabaseInfo public string Name; public string Owner; public string PrimaryFilePath; public string CreateDate; public int Size; public float SpaceAvailable; public string PrimaryName; public string PrimaryFilename; public int PrimarySize; public int PrimaryMaxSize; public string LogName; public string LogFilename; public int LogSize; public int LogMaxSize; public override string ToString() string s = Name:0rn + Owner:1rn + PrimaryFilePath:2rn + CreateDate:3rn + Size:4MBrn + SpaceAvailable:5MBrn + PrimaryName:6rn + PrimaryFilename:7rn + PrimarySize:8MBrn + PrimaryMaxSize:9MBrn + LogName:10rn + LogFilename:11rn + LogSize:12MBrn + LogMaxSize:13MB; return string.Format(s, Name, Owner, PrimaryFilePath, CreateDate, Size, SpaceAvailable, PrimaryName, PrimaryFilename, PrimarySize, PrimaryMaxSize, LogName, LogFilename, LogSize, LogMaxSize); #endregion保钓军团 private SQLServer2 sqlServer; private string server; private string login; private string password; public SqlDmoHelper(string server, string login, string password) this.server = server; this.login = login; this.password = password; sqlServer = new SQLServer2Class(); sqlServer.Connect(server, login, password); public void Close() sqlServer.Close(); #region Property / / 获取主要版本号 / public string Version get return string.Format(0.1, sqlServer.VersionMajor, sqlServer.VersionMinor); / / 获取详细版本信息 / public string VersionString get return sqlServer.VersionString; / / 获取服务器时间 / public string ServerTime get return sqlServer.ServerTime; / / 获取系统服务名称 / public string ServiceName get return sqlServer.ServiceName; / / 获取或设置系统服务是否自动启动 / public bool AutostartServer get return sqlServer.Registry.AutostartServer; set sqlServer.Registry.AutostartServer = value; / / 获取字符集设置 / public string CharacterSet get return sqlServer.Registry.CharacterSet; / / 获取服务器物理内存大小(MB) / public int PhysicalMemory get return sqlServer.Registry.PhysicalMemory; / / 获取服务器处理器(CPU)数量 / public int NumberOfProcessors get return sqlServer.Registry.NumberOfProcessors; #endregion #region Public Method / / 获取网络内所有可用的服务器 / / public static string ListAvailableSQLServers() NameList servers = new ApplicationClass().ListAvailableSQLServers(); if (servers.Count = 0) return new string0; ArrayList list = new ArrayList(servers.Count); foreach (object o in servers) list.Add(o); return (string)list.ToArray(typeof(string); / / 断开数据库所有连接 / / public void KillAllProcess(string dbName) QueryResults qr = sqlServer.EnumProcesses(-1); / 获取SPID和DBNAME字段列序号 int iColPIDNum = -1; int iColDbName = -1; for (int i = 1; i = qr.Columns; i+) string strName = qr.get_ColumnName(i); if (strName.ToUpper().Trim() = SPID) iColPIDNum = i; else if (strName.ToUpper().Trim() = DBNAME) iColDbName = i; if (iColPIDNum != -1 & iColDbName != -1) break; / 将指定数据库的连接全部断开 for (int i = 1; i = qr.Rows; i+) int lPID = qr.GetColumnLong(i, iColPIDNum); string strDBName = qr.GetColumnString(i, iColDbName); if (string.Compare(strDBName, test, true) = 0) sqlServer.KillProcess(lPID); / / 获取数据库信息 / / / public DatabaseInfo GetDatabaseInfo(string dbName) Database db = GetDatabase(dbName); if (db = null) throw new Exception(Database not exists!); DatabaseInfo info = new DatabaseInfo(); info.Name = db.Name; info.Owner = db.Owner; info.PrimaryFilePath = db.PrimaryFilePath; info.CreateDate = db.CreateDate; info.Size = db.Size; info.SpaceAvailable = db.SpaceAvailableInMB; DBFile primary = db.FileGroups.Item(PRIMARY).DBFiles.Item(1); info.PrimaryName = primary.Name; info.PrimaryFilename = primary.PhysicalName.Trim(); info.PrimarySize = primary.Size; info.PrimaryMaxSize = primary.MaximumSize; _LogFile log = db.TransactionLog.LogFiles.Item(1); info.LogName = log.Name; info.LogFilename = log.PhysicalName.Trim(); info.LogSize = log.Size; info.LogMaxSize = log.MaximumSize; return info; / / 分离数据库 / / / / 分离前最好调用KillAllProcess关闭所有连接,否则分离可能失败。 / public void DetachDB(string dbName) sqlServer.DetachDB(dbName, true); / / 附加数据库 / / / / / / SqlDmoHelper dmo = new SqlDmoHelper(local), sa, sa); / dmo.AttachDB(test, d:tempdatabasetest_data.mdf); / / public void AttachDB(string dbName, string dbFile) sqlServer.AttachDB(dbName, dbFile); / / 删除数据库(文件也将被删除) / / public void KillDB(string dbName) sqlServer.KillDatabase(dbName); / / 创建数据库 / / 数据库名称 / 数据文件保存路径 / 数据库文件名(不含路径) / 日志文件名(不含路径) / / / SqlDmoHelper dmo = new SqlDmoHelper(local), sa, sa); / dmo.CreateDB(test1, d:tempdatabase, abc.mdf, abc1.ldf); / / public void CreateDB(string dbName, string path, string primaryFilename, string logFilename) / 创建数据库文件 DBFile dbFile = new DBFileClass(); dbFile.Name = dbName + _Data; dbFile.PhysicalName = Path.Combine(path, primaryFilename); dbFile.PrimaryFile = true; /dbFile.Size = 2; / 设置初始化大小(MB) /dbFile.FileGrowthType = SQLDMO_GROWTH_TYPE.SQLDMOGrowth_MB; / 设置文件增长方式 /dbFile.FileGrowth=1; / 设置增长幅度 / 创建日志文件 _LogFile logFile = new LogFileClass(); logFile.Name = dbName + _Log; logFile.PhysicalName = Path.Combine(path, logFilename); /logFile.Size = 3; /logFile.FileGrowthType=SQLDMO_GROWTH_TYPE.SQLDMOGrowth_MB; /logFile.FileGrowth=1; / 创建数据库 Database db = new DatabaseClass(); db.Name = dbName; db.FileGroups.Item(PRIMARY).DBFiles.Add(dbFile); db.TransactionLog.LogFiles.Add(logFile); / 建立数据库联接,并添加数据库到服务器 sqlServer.Databases.Add(db); / / 备份数据库 / / / / / / / / SqlDmoHelper dmo = new SqlDmoHelper(local), sa, sa); / dmo.BackupDB(test, d:tempdatabasetest.bak, 手动备份1, 备份说明.); / / public void BackupDB(string dbName, string bakFile, string bakSetName, string bakDescription) Backup oBackup = new BackupClass(); oBackup.Action = SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database; oBackup.Database = dbName; oBackup.Files = bakFile; oBackup.BackupSetName = bakSetName; oBackup.BackupSetDescription = bakDescription; oBackup.Initialize = true; oBackup.SQLBackup(sqlServer); / / 恢复数据库 / / / / / 恢复前最好调用KillAllProcess关闭所有连接,否则恢复可能失败。 / / / / SqlDmoHelper dmo = new SqlDmoHelper(local), sa, sa); / dmo.RestoreDB(test, d:tempdatabasetest.bak); / / public void RestoreDB(string dbName, string bakFile) Restore oRestore = new RestoreClass(); oRestore.Action = SQLDMO_RESTORE_TYPE.SQLDMORestore_Database; oRestore.Database = dbName; oRestore.Files = bakFile; oRestore.FileNumber = 1; oRestore.ReplaceDatabase = true; oRestore.SQLRestore(sqlServer); / / 收缩数据库 / / public void ShrinkDB(string dbName) Database db = GetDatabase(dbName); if (db = null) throw new Exception(Database not exists!); db.Shrink(0, SQLDMO_SHRINK_TYPE.SQLDMOShrink_Default); / / 获取所有的数据库名 / / public string ListAllDatabase() ArrayList list = new ArrayList(); foreach (Database d in sqlServer.Databases) list.Add(d.Name); if (list.Count = 0) return new string0; else return (string)list.ToArray(typeof(string); / / 获取所有登录名 / / / / 管理工具 安全性-登录 / public string ListAllLogins() ArrayList list = new ArrayList(); foreach (Login d in sqlServer.Logins) list.Add(d.Name); if (list.Count = 0) return new string0; else return (string)list.ToArray(typeof(string); / / 获取全部数据表名称 / / / public string ListAllTables(string dbName) Database db = GetDatabase(dbName); if (db = null) throw new Exception(Database not exists!); ArrayList list = new ArrayList(); foreach (Table t in db.Tables) list.Add(t.Name); if (list.Count = 0) return new string0; else return (string)list.ToArray(typeof(string); / / 获取全部存储过程名称 / / / public string ListAllStoredProcedure(string dbName) Database db = GetDatabase(dbName); if (db = null) throw new Exception(Database not exists!); ArrayList list = new ArrayList(); foreach (StoredProcedure sp in db.StoredProcedures) list.Add(sp.Name); if (list.Count = 0) return new string0; else return (string)list.ToArray(typeof(string); / / 获取数据库对象 / / / / / 可以通过数据库对象获取数据库内表、存储过程、触发器、数据类型等信息。 / / / 显示数据库中所有表及其结构 / / SqlDmoHelper dmo = new SqlDmoHelper(local), sa, sa); / SQ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东省惠州市2024年中考地理 地球的公转说课稿
- 2025年印刷技能大赛题库及答案
- 《第1课 爱祖国-冼星海 延长记号》(教案)-2023-2024学年人音版(2012)音乐三年级下册
- 散装花生油的营销方案
- 品牌营销咨询方案报价
- 建筑方案设计楼梯电梯图片
- 日本自媒体营销方案设计
- 3.2 三维创意作品赏析说课稿-2025-2026学年高中信息技术人教中图版2019选修5 三维设计与创意-人教中图版2019
- 2025年工业互联网平台数据清洗算法在工业互联网安全中的应用报告
- 2025年海上风能资源评估与深远海风电场并网稳定性分析报告
- 致敬 9.3:一场阅兵一部民族精神史诗
- 《数据库系统概论》教案
- 小学学校“十五五”(2026-2030)发展规划
- 2025一建《建设工程项目管理》考前十页纸(完整版)
- 红楼梦第34回课件
- 摩托车整车采购合同范本
- 民事起诉状(人身保险合同纠纷)样式
- 9《犟龟》公开课一等奖创新教学设计
- 2025年乡村产业发展笔试模拟题库
- 2025滨海投资(天津)有限公司校园招聘考试备考题库及答案解析
- 2024-2025学年度江西建设职业技术学院单招《职业适应性测试》题库试题【名师系列】附答案详解
评论
0/150
提交评论