[转载]关于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
一个基础例子:通过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
[出处]:http://www.cnblogs.com/aceyong
[说明]:文章仅作个人知识整理备忘,方便自己查阅之用!如有雷同,敬请指出!
Mikel