<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的簡稱.與之相對應(yīng)的是ADO.Net,不過不同的地方是ADO.Net是用于數(shù)據(jù)訪問的,而SMO是用于設(shè)計的,雖然SMO能夠再服務(wù)器上執(zhí)行任意的SQL語句.另外一個不同的地方是ADO.Net可以訪問計算機中任意數(shù)據(jù)源,而SMO對象是專門針對SQL Server而設(shè)計的.
在SMO中最重要的一個類就是Server.其他大多數(shù)對象都是Server對象的后代.比如Database,Table,View等等對象都是通過Server屬性不斷向下檢索到的.
要在VS2005中使用必須引用SMO的程序集.我們建立好一個控制臺應(yīng)用程序,添加引用:Microsoft.SqlServer.ConnectionInfo和Microsoft.SqlServer.Smo.我們可以輸入如下代碼使用Server對象給出某服務(wù)器中的數(shù)據(jù)庫數(shù)目:
using
System;
using
Microsoft.SqlServer.Management.Smo;
namespace
SMOTest
{
class
Class1
{
public
static
void
Main()
{
Microsoft.SqlServer.Management.Common.ServerConnectionconn
=
new
Microsoft.SqlServer.Management.Common.ServerConnection(
"
tcp:157.60.15.215,12345
"
,
"
sa
"
,
"
123456
"
);
Servers
=
new
Server(conn);
Console.WriteLine(
"
DatabaseCount:
"
+
s.Databases.Count);
}
}
}
運行以上代碼就可以得到服務(wù)器上數(shù)據(jù)庫的數(shù)目.下面我們再來看看在SMO中對數(shù)據(jù)庫常見的操作:
1,創(chuàng)建刪除數(shù)據(jù)庫.
Database db2 = new Database(s, "NewDatabaseName");
db2.Create();
以上是創(chuàng)建數(shù)據(jù)庫的代碼,那么刪除數(shù)據(jù)庫的代碼就是:
Database db2 = s.Databases["NewDatabaseName"];
db2.Drop();
2,創(chuàng)建表.
Databasedb
=
s.Databases[
"
AdventureWorks
"
];
Tabletb
=
new
Table(db,
"
NewTableName
"
);
Columnc
=
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();
以上語句是在數(shù)據(jù)庫AdventureWorks中創(chuàng)建了一個表NewTableName,其中我們定義了兩個字段,一個是CustomerID,一個是CustomerName.需要注意的是在創(chuàng)建表的時候必須要指定其中的列,如果沒有指定列,那么創(chuàng)建表就會失敗.
3,創(chuàng)建存儲過程.
StoredProceduresp
=
new
StoredProcedure(db,
"
NewStoredProcedure
"
);
StoredProcedureParameterspp1
=
new
StoredProcedureParameter(sp,
"
@addrID
"
,DataType.Int);
sp.TextMode
=
false
;
sp.Parameters.Add(spp1);
sp.TextBody
=
"
select*fromPerson.AddresswhereAddressID=@addrID
"
;
sp.Create();
這兒需要說明的是如果不寫sp.TextMode = false;那么可能創(chuàng)建存儲過程要失敗,所以最好把這句加上.
整個語句比較簡單,而且也比較好理解,就不用多作解釋了.
4,刪除對象.
刪除對象比較簡單,只要將需要刪除的對象引用過來,然后執(zhí)行Drop操作就可以了.比如:
刪除表:
Tabletb
=
db.Tables[
"
TableName
"
];tb.Drop();
刪除存儲過程:
StoredProceduresp
=
db.StoredProcedures[
"
NewStoredProcedure123
"
];sp.Drop();
5,執(zhí)行存儲過程.
執(zhí)行存儲過程不需要在StoredProcedure對象下尋找方法,要SMO直接執(zhí)行存儲過程可以使用Database對象下的ExecuteNonQuery方法.
6,更新對象屬性.
若想要修改數(shù)據(jù)庫的屬性,修改存儲過程內(nèi)容等,在進行修改后必須要執(zhí)行Alter方法才能真正更新.
比如修改數(shù)據(jù)庫屬性可以使用修改db.DatabaseOptions下的屬性,新屬性修改好后執(zhí)行一句db.Alter();便可.
若要修改存儲過程,代碼如下:
StoredProceduresp
=
db.StoredProcedures[
"
NewStoredProcedure123
"
];
StoredProcedureParameterspp1
=
new
StoredProcedureParameter(sp,
"
@spID
"
,DataType.Int);
sp.TextMode
=
false
;
sp.Parameters.Add(spp1);
sp.TextBody
=
"
select*fromPerson.AddresswhereStateProvinceID=@spID
"
;
sp.Alter();
其他的一下對象如表,視圖等等原理相同.
SMO是SQL Mangagement Objects的簡稱.與之相對應(yīng)的是ADO.Net,不過不同的地方是ADO.Net是用于數(shù)據(jù)訪問的,而SMO是用于設(shè)計的,雖然SMO能夠再服務(wù)器上執(zhí)行任意的SQL語句.另外一個不同的地方是ADO.Net可以訪問計算機中任意數(shù)據(jù)源,而SMO對象是專門針對SQL Server而設(shè)計的.
在SMO中最重要的一個類就是Server.其他大多數(shù)對象都是Server對象的后代.比如Database,Table,View等等對象都是通過Server屬性不斷向下檢索到的.
要在VS2005中使用必須引用SMO的程序集.我們建立好一個控制臺應(yīng)用程序,添加引用:Microsoft.SqlServer.ConnectionInfo和Microsoft.SqlServer.Smo.我們可以輸入如下代碼使用Server對象給出某服務(wù)器中的數(shù)據(jù)庫數(shù)目:














運行以上代碼就可以得到服務(wù)器上數(shù)據(jù)庫的數(shù)目.下面我們再來看看在SMO中對數(shù)據(jù)庫常見的操作:
1,創(chuàng)建刪除數(shù)據(jù)庫.
Database db2 = new Database(s, "NewDatabaseName");
db2.Create();
以上是創(chuàng)建數(shù)據(jù)庫的代碼,那么刪除數(shù)據(jù)庫的代碼就是:
Database db2 = s.Databases["NewDatabaseName"];
db2.Drop();
2,創(chuàng)建表.














3,創(chuàng)建存儲過程.






這兒需要說明的是如果不寫sp.TextMode = false;那么可能創(chuàng)建存儲過程要失敗,所以最好把這句加上.
整個語句比較簡單,而且也比較好理解,就不用多作解釋了.
4,刪除對象.
刪除對象比較簡單,只要將需要刪除的對象引用過來,然后執(zhí)行Drop操作就可以了.比如:
刪除表:



5,執(zhí)行存儲過程.
執(zhí)行存儲過程不需要在StoredProcedure對象下尋找方法,要SMO直接執(zhí)行存儲過程可以使用Database對象下的ExecuteNonQuery方法.
6,更新對象屬性.
若想要修改數(shù)據(jù)庫的屬性,修改存儲過程內(nèi)容等,在進行修改后必須要執(zhí)行Alter方法才能真正更新.
比如修改數(shù)據(jù)庫屬性可以使用修改db.DatabaseOptions下的屬性,新屬性修改好后執(zhí)行一句db.Alter();便可.
若要修改存儲過程,代碼如下:






其他的一下對象如表,視圖等等原理相同.
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
