设为首页 收藏本站
查看: 977|回复: 0

[经验分享] SQL Server2005中的SMO编程

[复制链接]

尚未签到

发表于 2016-11-10 09:40:53 | 显示全部楼层 |阅读模式
<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>SMO编程
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对象给出某服务器中的数据库数目:
DSC0000.gif usingSystem;
usingMicrosoft.SqlServer.Management.Smo;
namespaceSMOTest
DSC0001.gif DSC0002.gif
...{
DSC0003.gif
classClass1
DSC0004.gif DSC0005.gif
...{
publicstaticvoidMain()
...{
Microsoft.SqlServer.Management.Common.ServerConnectionconn
=newMicrosoft.SqlServer.Management.Common.ServerConnection("tcp:157.60.15.215,12345","sa","123456");
Servers
=newServer(conn);
Console.WriteLine(
"DatabaseCount:"+s.Databases.Count);
DSC0006.gif }

}

DSC0007.gif }



运行以上代码就可以得到服务器上数据库的数目.下面我们再来看看在SMO中对数据库常见的操作:
1,创建删除数据库.
Database db2 = new Database(s, "NewDatabaseName");
db2.Create();
以上是创建数据库的代码,那么删除数据库的代码就是:
Database db2 = s.Databases["NewDatabaseName"];
db2.Drop();
2,创建表.
Databasedb=s.Databases["AdventureWorks"];
Tabletb
=newTable(db,"NewTableName");
Columnc
=newColumn(tb,"CustomerID");
c.Identity
=true;
c.IdentitySeed
=1;
c.DataType
=DataType.Int;
c.Nullable
=false;
tb.Columns.Add(c);
c
=newColumn(tb,"CustomerName");
c.DataType
=DataType.VarChar(20);
c.Nullable
=true;
tb.Columns.Add(c);
tb.Create();


以上语句是在数据库AdventureWorks中创建了一个表NewTableName,其中我们定义了两个字段,一个是CustomerID,一个是CustomerName.需要注意的是在创建表的时候必须要指定其中的列,如果没有指定列,那么创建表就会失败.
3,创建存储过程.
StoredProceduresp=newStoredProcedure(db,"NewStoredProcedure");
StoredProcedureParameterspp1
=newStoredProcedureParameter(sp,"@addrID",DataType.Int);
sp.TextMode
=false;
sp.Parameters.Add(spp1);
sp.TextBody
="select*fromPerson.AddresswhereAddressID=@addrID";
sp.Create();



这儿需要说明的是如果不写sp.TextMode = false;那么可能创建存储过程要失败,所以最好把这句加上.
整个语句比较简单,而且也比较好理解,就不用多作解释了.
4,删除对象.
删除对象比较简单,只要将需要删除的对象引用过来,然后执行Drop操作就可以了.比如:
删除表:Tabletb=db.Tables["TableName"];tb.Drop();


删除存储过程:StoredProceduresp=db.StoredProcedures["NewStoredProcedure123"];sp.Drop();


5,执行存储过程.
执行存储过程不需要在StoredProcedure对象下寻找方法,要SMO直接执行存储过程可以使用Database对象下的ExecuteNonQuery方法.
6,更新对象属性.
若想要修改数据库的属性,修改存储过程内容等,在进行修改后必须要执行Alter方法才能真正更新.
比如修改数据库属性可以使用修改db.DatabaseOptions下的属性,新属性修改好后执行一句db.Alter();便可.
若要修改存储过程,代码如下:
StoredProceduresp=db.StoredProcedures["NewStoredProcedure123"];
StoredProcedureParameterspp1
=newStoredProcedureParameter(sp,"@spID",DataType.Int);
sp.TextMode
=false;
sp.Parameters.Add(spp1);
sp.TextBody
="select*fromPerson.AddresswhereStateProvinceID=@spID";
sp.Alter();



其他的一下对象如表,视图等等原理相同.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-298290-1-1.html 上篇帖子: SQL插入表方法总结 下篇帖子: Sql语句--行转列--列转行
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表