Home >Database >Mysql Tutorial > SQL Server编程系列(1):SMO介绍

SQL Server编程系列(1):SMO介绍

WBOY
WBOYOriginal
2016-06-07 17:39:521199browse

最近在项目中用到了有关SQLServer管理任务方面的编程实现,有了一些自己的心得体会,想在此跟大家分享一下,在工作中用到了SMO/SQLCLR/SSIS等方面的知识,在国内

 最近在项目中用到了有关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 Files\Microsoft SQL Server\90\SDK\Assemblies,相应的,如果安装的是SQL Server2008,则SMO程序集的路径就是C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies,如果是在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,例如查看命名空间下的类可以浏览:(v=sql.100)

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的引用。

代码如下:

 

程序的执行效果如下:

通过上面的代码可以获取很多有关数据库的信息,而在代码中我们没有写一行SQL语句,而在之前周公曾写过一篇博客《在.NET中根据SQL Server系统表获取数据库管理信息》,在其中为了查找这些信息周公是查了很多资料才知道SQL语句的写法,使用SMO之后连SQL语句都免了,美国服务器,可见利用SMO来管理数据库的方便性。在后续的篇幅中周公将讲述如何利用SMO来获取SQL Server中数据库的创建语句及如何利用SMO来创建Job。

周公

2012-05-17

本文出自 “周公(周金桥)的专栏” 博客,请务必保留此出处

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn