SQL Server Management Objects (SMO) 介绍.docx_第1页
SQL Server Management Objects (SMO) 介绍.docx_第2页
SQL Server Management Objects (SMO) 介绍.docx_第3页
SQL Server Management Objects (SMO) 介绍.docx_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

最近在项目中用到了有关SQL Server管理任务方面的编程实现,有了一些自己的心得体会,想在此跟大家分享一下,在工作中用到了SMO/SQL CLR/SSIS等方面的知识,在国内这方面的文章并不多见,有也是一些零星的应用,特别是SSIS部分国内外的文章大都是讲解如何拖拽控件的,在开发过程中周公除了参阅SQL Server帮助文档、MSDN及StackOverFlow等网站,这些网站基本上都是英文的,为了便于一些英文不好的开发者学习,周公在自己的理解上加以整理成系列,不到之处请大家谅解。SMO简介SMO是英文SQL Server Management Objects的缩写,意思是SQL Server管理对象系列,包含了一些列的命名空间(namespace)、动态链接库(dll)和类(class)。这些类偏重于SQL Server的管理,并且在底层是通过SQL Server数据库提供程序(System.Data.SqlClient)下的类来与SQL Server来进行交互的。可以通过编程的方式利用SMO来管理SQL Server7.0以上的版本(SQL Server 7.0/2000/2005/2008),如果低于以上版本的SQL Server则无法利用SMO来管理(除了历史原因遗留的系统,在现在的开发中那些不受支持的SQL Server算是和Windows95一样的古董了)。同时,要使用SMO的话,必须安装SQL Server Native Client,一般情况下当我们安装.Net Framework2.0以上版本或者SQL Server2005以上版本时就会自动安装上了。在32位系统下如果安装的是SQL Server2005并且没有更改安装路径,则SMO程序集的路径是:C:Program FilesMicrosoft SQL Server90SDKAssemblies,相应的,如果安装的是SQL Server2008,则SMO程序集的路径就是C:Program FilesMicrosoft SQL Server100SDKAssemblies,如果是在64位系统下安装,则根据安装的SQL Server的版本来判断是在Program Files (x86)还是在Program Files下面的对应目录下。在SMO中有如下命名空间:Microsoft.SqlServer.Management.Common、Microsoft.SqlServer.Management.Nmo、Microsoft.SqlServer.Management.Smo、Microsoft.SqlServer.Management.Smo.Agent、Microsoft.SqlServer.Management.Smo.Broker、Microsoft.SqlServer.Management.Smo.Mail、Microsoft.SqlServer.Management.Smo.RegisteredServers、Microsoft.SqlServer.Management.Smo.Wmi、Microsoft.SqlServer.Management.Trace,关于这些命名空间在哪个dll中以及该命名空间下有哪些类,大家可以查阅SQL Server的帮助文章或者查阅在线MSDN,例如查看命名空间下的类可以浏览: SMO体系架构我们知道在SQL Server体系中处于顶层是SQL Server实例,每个实例会有多个数据库,每个数据库会有多个表、存储过程、函数、登录账号等,每个表会有列、索引、主键等信息,每个列会有列名、默认值、字段大小等信息,在SMO中有与之相对应的一套类体系结构。在DatabaseCollection中每个元素都是一个Database类的实例,分别对应数据实例中的一个数据库;在TableCollection中每个元素都是一个Table的实例,分别对应数据库中的一个表;在ColumnCollection中每个元素都是一个Column类的实例,分别对应表中的每一列,以上这些类都位于Microsoft.SqlServer.Management.Smo命名空间下,在Microsoft.SqlServer.Smo.dll这个dll中。当然,在Microsoft.SqlServer.Management.Smo命名空间中的类远不止上面提到的这些,上面的表格只是做了一个简单的类比。SMO用法示例上面的文章只是做了一个简单的介绍,也许通过上面枯燥的介绍大家没什么印象,下面通过一段简单的代码来简单演示一下用法,首先要添加响应的引用。在VS2008中可以直接通过下面的方式添加引用:但是在VS2010中就没有这么方便了,它使用了过滤属性(而且还无法禁用掉或者进行设置),使得无法添加这些程序集,如下图:我看到有人在Stack Overflow提了和我疑惑相同的问题,别人给了一个答案就是在VS2010中安装Muse.VSExtensions来解决,我尝试了一下不是很理想,不过Muse.VSExtensions还提供了其它的功能(比如移除未使用的程序集)还是不错的。注意在编译下面的代码之前需要添加对microsoft.sqlserver.connectioninfo.dll和microsoft.sqlserver.smo.dll的引用。代码如下:1. usingSystem;2. usingMicrosoft.SqlServer.Management.Common;/需添加microsoft.sqlserver.connectioninfo.dll的引用3. usingMicrosoft.SqlServer.Management.Smo;/需添加microsoft.sqlserver.smo.dll的引用4. 5. namespaceSSISStudy6. 7. /8. /SQLServer编程些列文章(1):SMO介绍的配套代码9. /作者:周公10. /创建日期:2012-05-1711. /博客地址:/zhoufoxcn12. /新浪微博地址:/zhoufoxcn13. /14. classSMODemo0115. 16. /17. /显示数据库的概要情况18. /19. publicstaticvoidShowServerInfo()20. 21. /创建ServerConnection的实例22. ServerConnectionconnection=newServerConnection();23. /指定连接字符串24. connection.ConnectionString=DataSource=goodapp;InitialCatalog=master;UserID=sa;Password=root;25. /实例化Server26. Serverserver=newServer(connection);27. Console.WriteLine(ActiveDirectory:0,server.ActiveDirectory);28. Console.WriteLine(InstanceName:0,server.InstanceName);29. 30. /列出当前SQLServer实例中的登录用户31. foreach(Loginlogininserver.Logins)32. 33. Console.WriteLine(Name:0,CreateDate:1,DefaultDatabase:2,login.Name,login.CreateDate,login.DefaultDatabase);34. 35. /通过索引方式找到master数据库36. Databasedb=server.Databasesmaster;37. Console.WriteLine(Database:0,db.Name);38. Console.WriteLine(CreateDate:0,Dbo:1,db.CreateDate,db.Owner);39. Console.WriteLine(DataSpaceUsage:0,SpaceAvailable:1,db.DataSpaceUsage,db.SpaceAvailable);40. Console.WriteLine(PrimaryFilePath:0,db.PrimaryFilePath);41. /列出master数据库下每个表的概要信息42. foreach(Tabletableindb.Tables)43. 44. Console.WriteLine(tTable:0,DataSpaceUsed:1,CreateDate:2,table.Name,table.DataSpaceUsed,table.CreateDate);45. /urnCollection.Add(table.Urn);46. /列出每个表中每个列的概要信息47. foreach(Columncolumnintable.Columns)48. 49. Console.WriteLine(ttColumn:0,DataType:1,Nullable:2,column.Name,column.DataType,column.Nullable);50. 51. 52. /列出master数据库中的角色信息53. foreach(DatabaseRoledbRoleindb.Roles)54. 55. Console.WriteLine(DBRole0Createdat1,dbRole.Name,dbRole.CreateDate);56. 57. 58. Console.ReadLine();59. 60. 61. 62. 程序的执行效果如下:通过上面的代码可以获取很多有关数据库的信息,而

温馨提示

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

评论

0/150

提交评论