C#使用SQLDMO操作数据库

上传人:沈*** 文档编号:133809348 上传时间:2022-08-11 格式:DOC 页数:13 大小:89.50KB
收藏 版权申诉 举报 下载
C#使用SQLDMO操作数据库_第1页
第1页 / 共13页
C#使用SQLDMO操作数据库_第2页
第2页 / 共13页
C#使用SQLDMO操作数据库_第3页
第3页 / 共13页
资源描述:

《C#使用SQLDMO操作数据库》由会员分享,可在线阅读,更多相关《C#使用SQLDMO操作数据库(13页珍藏版)》请在装配图网上搜索。

1、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.

2、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; pub

3、lic 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 ToStri

4、ng() 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

5、, 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 se

6、rver, 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

7、(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; / / 获取或设置系统服务是否自动启动

8、 / 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.PhysicalMem

9、ory; / / 获取服务器处理器(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)

10、 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 =

11、-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.

12、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 = nul

13、l) 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.FileGrou

14、ps.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.Physic

15、alName.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.Att

16、achDB(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

17、 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.Co

18、mbine(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.Co

19、mbine(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); / 建立数据库联接,并添加数据库到服务器

20、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()

21、; 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关闭所有连接

22、,否则恢复可能失败。 / / / / 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 = dbN

23、ame; 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.SQLD

24、MOShrink_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 strin

25、g 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 (d

26、b = 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) Da

27、tabase 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); / / 获取数据库对象 / /

28、 / / / 可以通过数据库对象获取数据库内表、存储过程、触发器、数据类型等信息。 / / / 显示数据库中所有表及其结构 / / SqlDmoHelper dmo = new SqlDmoHelper(local), sa, sa); / SQLDMO.Database db = dmo.GetDatabase(test); / foreach(SQLDMO.Table t in db.Tables) / / Console.WriteLine(Table:0, t.Name); / for (int i = 1; i = t.Columns.Count; i+) / SQLDMO所有索引序

29、号从1开始 / / SQLDMO._Column col = t.Columns.Item(i); / Console.WriteLine( Column:0 DataType:1, col.Name, col.Datatype); / / / Console.WriteLine(-); / / / public Database GetDatabase(string dbName) foreach (Database d in sqlServer.Databases) if (string.Compare(d.Name, dbName, true) = 0) return d; return

30、 null; #endregion / / 创建(备份后的)路径,得到结果:d:aaatest_db_time.bak / / / 初始路径,如:d:aaa / 需要备份的数据库 / public string CreatePath(string paths, string database) string CurrTime = System.DateTime.Now.ToString(); CurrTime = CurrTime.Replace(-, ); CurrTime = CurrTime.Replace(:, ); CurrTime = CurrTime.Replace( , ); CurrTime = CurrTime.Substring(0, 12); string path = paths; path += database; path += _db_; path += CurrTime; path += .BAK; return path;

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!