[转载]关于SqlServer SMO - GuiYong - 博客园

baacloud免费翻墙vpn注册使用

[转载]关于SqlServer SMO – GuiYong – 博客园.

最近在改代码生成器的时候,无意发现的,据说SQL Server Management Studio就是用smo开发的,所以只要 SQL Server Management Studio可以实现的东西,利用smo也同样可以实现!所有特意记下来,以后再好好研究…

MSDN:http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.aspx

MSDN相关说明:

Microsoft.SQLServer.Management.Smo命名空间包含核心的SQL Server数据库引擎对象。这些包括实例,数据库,表,存储过程和视图。

Microsoft.SQLServer.Management.Smo命名空间包含表示SQL Server数据库引擎的对象和一些实用工具类,代表特定的任务,如脚本的实例对象类。当连接到SQL Server数据库引擎的实例已经建立了使用Server对象变量,对象实例上可以访问使用SMO实例对象。例如,您可以使用数据库对象来访问数据库连接SQL Server数据库引擎实例。所有类实例对象层次中涉及到的服务器类。存在的实用工具类,服务器类对象层次结构之外的,代表特定的任务,如备份或脚本。

大多数类Microsoft.SqlServer.Management.Smo命 名空间驻留在Microsoft.SqlServer.Smo.dll和Microsoft.SqlServer.SmoExtended.dll文件。 此外,一些枚举类在Microsoft.SqlServer.SqlEnum.dll和Microsoft.SqlServer.SmoEnum.dll 的装配文件。您必须将所有四个文件导入,访问所有Microsoft.SqlServer.Management.Smo命名空间中的类

通过使用Microsoft.SqlServer.Management.Smo命名空间,你可以做到以下几点:

  • 连接到SQL Server数据库引擎的实例。
  • 查看和修改实例设置和配置选项。
  • 查看和修改数据库对象。
  • 执行DDL(数据定义语言)的任务在SQL Server数据库引擎的实例。
  • 脚本的数据库的依赖关系。
  • 执行数据库维护任务,如备份和恢复操作。
  • 传输数据库模式和数据。

一个基础例子:通过smo获得表的Create脚本

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.SqlServer.Management.Smo;
using System.Collections.Specialized;

namespace Sql_smoDemo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

//smo是SqlServer Management Ojbects的简称
//msdn参考文档:http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.aspx。
//需要引用的dll:
//Microsoft.SqlServer.ConnectionInfo.dll
//Microsoft.SqlServer.Smo.dll
//Microsoft.SqlServer.Management.Sdk.Sfc.dll
private void Form1_Load(object sender, EventArgs e)
{
Microsoft.SqlServer.Management.Common.ServerConnection conn = new Microsoft.SqlServer.Management.Common.ServerConnection(
new System.Data.SqlClient.SqlConnection("Data Source=ACE_YONG-PC;Initial Catalog=Gd_Dg;Integrated Security=True"));
Microsoft.SqlServer.Management.Smo.Server server = new Microsoft.SqlServer.Management.Smo.Server(conn);
Microsoft.SqlServer.Management.Smo.Database db = server.Databases["gd_dg"];
Microsoft.SqlServer.Management.Smo.Table tb = db.Tables["J001"];
//初始化脚本生成器
Microsoft.SqlServer.Management.Smo.Scripter a = new Microsoft.SqlServer.Management.Smo.Scripter(server);
//下面这些是可选项:作用是向脚本生成器中添加需要生成的脚本内容
//ScripOption类的属性:http://msdn.microsoft.com/zh-cn/library/microsoft.sqlserver.management.smo.scriptingoptions.aspx
a.Options.Add(ScriptOption.DriAllConstraints);
//DriAllConstraints 获取或设置布尔属性值,指定是否所有声明的参照完整性约束包含在生成的脚本。
a.Options.Add(ScriptOption.DriAllKeys);
//DriAllKeys 获取或设置布尔属性值指定的依赖关系是否生成的脚本中定义的所有声明的参照完整性密钥。
a.Options.Add(ScriptOption.Default);
//Default 获取或设置布尔属性值指定创建所引用对象是否包含在生成的脚本。
a.Options.Add(ScriptOption.ContinueScriptingOnError);
//ContinueScriptingOnError 获取或设置布尔属性值指定的脚本是否继续操作时遇到错误后。
a.Options.Add(ScriptOption.ConvertUserDefinedDataTypesToBaseType);
//ConvertUserDefinedDataTypesToBaseType 获取或设置布尔属性值指定是否将用户定义的数据类型转换成最合适的SQL Server基本数据类型生成的脚本中。
a.Options.Add(ScriptOption.IncludeIfNotExists);
// IncludeIfNotExists 获取或设置一个布尔属性值,指定包括它在脚本之前,是否检查一个对象是否存在。
a.Options.Add(ScriptOption.ExtendedProperties);
//声明统一资源名称集合对象
UrnCollection collection = new UrnCollection();
//The UrnCollection class represents a collection of Urn objects that represent Uniform Resource Name (URN) addresses.
collection.Add(tb.Urn);

//声明字符串集合对象:存储collection中的所有string对象(在这里其中有3个string对象)
StringCollection sqls = a.Script(collection);
//遍历字符串集合对象sqls中的string对象,选择要输出的脚本语句:
foreach (string s in sqls)
{
this.richTextBox1.Text += s;
}
//System.Collections.Specialized.StringCollection sc = tb.Script();
//foreach (String s in sc)
//{
// this.richTextBox1.Text += s;
//}

/* ///遍历表
foreach( var item in db.Tables ) {
//sb.AppendLine( item.ToString() );
}

//遍历字段
foreach( var item in tb.Columns ) {
//sb.AppendLine(item.ToString());
}

//遍历索引
foreach( var item in tb.Indexes ) {
//sb.AppendLine(item.ToString());
}

//遍历触发器
foreach( var item in tb.Triggers ) {
sb.AppendLine( item.ToString() );
}*/
}
}
}

结果示例:

 

 

<p!–出处!–>

 

ace_yong的头像

[作者]:ace_yong
[出处]:http://www.cnblogs.com/aceyong
[说明]:文章仅作个人知识整理备忘,方便自己查阅之用!如有雷同,敬请指出!

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏