SMO是SQL Mangagement Objects的简称.与之相对应的是ADO.Net,不过不同的地方是ADO.Net是用于数据访问的,而SMO是用于设计的,虽然SMO能够再服务器上执行任意的SQL语句.另外一个不同的地方是ADO.Net可以访问计算机中任意数据源,而SMO对象是专门针对SQL Server而设计的.
在SMO中最重要的一个类就是Server.其他大多数对象都是Server对象的后代.比如Database,Table,View等等对象都是通过Server属性不断向下检索到的.
要在VS2005中使用必须引用SMO的程序集.我们建立好一个控制台应用程序,添加引用:Microsoft.SqlServer.ConnectionInfo和Microsoft.SqlServer.Smo.我们可以输入如下代码使用Server对象给出某服务器中的数据库数目:
运行以上代码就可以得到服务器上数据库的数目.下面我们再来看看在SMO中对数据库常见的操作:
1,创建删除数据库.
Database db2 = new Database(s, "NewDatabaseName");
db2.Create();
以上是创建数据库的代码,那么删除数据库的代码就是:
Database db2 = s.Databases["NewDatabaseName"];
db2.Drop();
2,创建表.
以上语句是在数据库AdventureWorks中创建了一个表NewTableName,其中我们定义了两个字段,一个是CustomerID,一个是CustomerName.需要注意的是在创建表的时候必须要指定其中的列,如果没有指定列,那么创建表就会失败.
3,创建存储过程.
这儿需要说明的是如果不写sp.TextMode = false;那么可能创建存储过程要失败,所以最好把这句加上.
整个语句比较简单,而且也比较好理解,就不用多作解释了.
4,删除对象.
删除对象比较简单,只要将需要删除的对象引用过来,然后执行Drop操作就可以了.比如:
删除表:
删除存储过程:
5,执行存储过程.
执行存储过程不需要在StoredProcedure对象下寻找方法,要SMO直接执行存储过程可以使用Database对象下的ExecuteNonQuery方法.
6,更新对象属性.
若想要修改数据库的属性,修改存储过程内容等,在进行修改后必须要执行Alter方法才能真正更新.
比如修改数据库属性可以使用修改db.DatabaseOptions下的属性,新属性修改好后执行一句db.Alter();便可.
若要修改存储过程,代码如下:
在SMO中最重要的一个类就是Server.其他大多数对象都是Server对象的后代.比如Database,Table,View等等对象都是通过Server属性不断向下检索到的.
要在VS2005中使用必须引用SMO的程序集.我们建立好一个控制台应用程序,添加引用:Microsoft.SqlServer.ConnectionInfo和Microsoft.SqlServer.Smo.我们可以输入如下代码使用Server对象给出某服务器中的数据库数目:
using
System;
using Microsoft.SqlServer.Management.Smo;
namespace SMOTest
{
class Class1
{
public static void Main()
{
Microsoft.SqlServer.Management.Common.ServerConnection conn = new Microsoft.SqlServer.Management.Common.ServerConnection("tcp:157.60.15.215,12345", "sa", "123456");
Server s = new Server(conn);
Console.WriteLine("DatabaseCount:" + s.Databases.Count);
}
}
}
using Microsoft.SqlServer.Management.Smo;
namespace SMOTest
{
class Class1
{
public static void Main()
{
Microsoft.SqlServer.Management.Common.ServerConnection conn = new Microsoft.SqlServer.Management.Common.ServerConnection("tcp:157.60.15.215,12345", "sa", "123456");
Server s = new Server(conn);
Console.WriteLine("DatabaseCount:" + s.Databases.Count);
}
}
}
运行以上代码就可以得到服务器上数据库的数目.下面我们再来看看在SMO中对数据库常见的操作:
1,创建删除数据库.
Database db2 = new Database(s, "NewDatabaseName");
db2.Create();
以上是创建数据库的代码,那么删除数据库的代码就是:
Database db2 = s.Databases["NewDatabaseName"];
db2.Drop();
2,创建表.
Database db
=
s.Databases[
"
AdventureWorks
"
];
Table tb = new Table(db, " NewTableName " );
Column c = new Column(tb, " CustomerID " );
c.Identity = true ;
c.IdentitySeed = 1 ;
c.DataType = DataType.Int;
c.Nullable = false ;
tb.Columns.Add(c);
c = new Column(tb, " CustomerName " );
c.DataType = DataType.VarChar( 20 );
c.Nullable = true ;
tb.Columns.Add(c);
tb.Create();
Table tb = new Table(db, " NewTableName " );
Column c = new Column(tb, " CustomerID " );
c.Identity = true ;
c.IdentitySeed = 1 ;
c.DataType = DataType.Int;
c.Nullable = false ;
tb.Columns.Add(c);
c = new Column(tb, " CustomerName " );
c.DataType = DataType.VarChar( 20 );
c.Nullable = true ;
tb.Columns.Add(c);
tb.Create();
3,创建存储过程.
StoredProcedure sp
=
new
StoredProcedure(db,
"
NewStoredProcedure
"
);
StoredProcedureParameter spp1 = new StoredProcedureParameter(sp, " @addrID " , DataType.Int);
sp.TextMode = false ;
sp.Parameters.Add(spp1);
sp.TextBody = " select * from Person.Address where AddressID=@addrID " ;
sp.Create();
StoredProcedureParameter spp1 = new StoredProcedureParameter(sp, " @addrID " , DataType.Int);
sp.TextMode = false ;
sp.Parameters.Add(spp1);
sp.TextBody = " select * from Person.Address where AddressID=@addrID " ;
sp.Create();
这儿需要说明的是如果不写sp.TextMode = false;那么可能创建存储过程要失败,所以最好把这句加上.
整个语句比较简单,而且也比较好理解,就不用多作解释了.
4,删除对象.
删除对象比较简单,只要将需要删除的对象引用过来,然后执行Drop操作就可以了.比如:
删除表:
Table tb
=
db.Tables[
"
TableName
"
]; tb.Drop();
StoredProcedure sp
=
db.StoredProcedures[
"
NewStoredProcedure123
"
]; sp.Drop();
5,执行存储过程.
执行存储过程不需要在StoredProcedure对象下寻找方法,要SMO直接执行存储过程可以使用Database对象下的ExecuteNonQuery方法.
6,更新对象属性.
若想要修改数据库的属性,修改存储过程内容等,在进行修改后必须要执行Alter方法才能真正更新.
比如修改数据库属性可以使用修改db.DatabaseOptions下的属性,新属性修改好后执行一句db.Alter();便可.
若要修改存储过程,代码如下:
StoredProcedure sp
=
db.StoredProcedures[
"
NewStoredProcedure123
"
];
StoredProcedureParameter spp1 = new StoredProcedureParameter(sp, " @spID " , DataType.Int);
sp.TextMode = false ;
sp.Parameters.Add(spp1);
sp.TextBody = " select * from Person.Address where StateProvinceID=@spID " ;
sp.Alter();
StoredProcedureParameter spp1 = new StoredProcedureParameter(sp, " @spID " , DataType.Int);
sp.TextMode = false ;
sp.Parameters.Add(spp1);
sp.TextBody = " select * from Person.Address where StateProvinceID=@spID " ;
sp.Alter();
其他的一下对象如表,视图等等原理相同.
本文转自深蓝居博客园博客,原文链接:http://www.cnblogs.com/studyzy/archive/2006/10/27/690308.html,如需转载请自行联系原作者