天天看點

SQL Server2005中的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對象給出某伺服器中的資料庫數目:

SQL Server2005中的SMO程式設計

using system;

SQL Server2005中的SMO程式設計

using microsoft.sqlserver.management.smo;

SQL Server2005中的SMO程式設計

namespace smotest

SQL Server2005中的SMO程式設計

{

SQL Server2005中的SMO程式設計

class class1

SQL Server2005中的SMO程式設計
SQL Server2005中的SMO程式設計

public static void main()

SQL Server2005中的SMO程式設計
SQL Server2005中的SMO程式設計

microsoft.sqlserver.management.common.serverconnection conn = new microsoft.sqlserver.management.common.serverconnection("tcp:157.60.15.215,12345", "sa", "123456");

SQL Server2005中的SMO程式設計

server s = new server(conn);

SQL Server2005中的SMO程式設計

console.writeline("databasecount:" + s.databases.count);

SQL Server2005中的SMO程式設計

}

SQL Server2005中的SMO程式設計
SQL Server2005中的SMO程式設計

運作以上代碼就可以得到伺服器上資料庫的數目.下面我們再來看看在smo中對資料庫常見的操作:

1,建立删除資料庫.

database db2 = new database(s, "newdatabasename");

db2.create();

以上是建立資料庫的代碼,那麼删除資料庫的代碼就是:

database db2 = s.databases["newdatabasename"];

db2.drop();

2,建立表.

SQL Server2005中的SMO程式設計

database db = s.databases["adventureworks"];

SQL Server2005中的SMO程式設計

table tb = new table(db, "newtablename");

SQL Server2005中的SMO程式設計

column c = new column(tb, "customerid");

SQL Server2005中的SMO程式設計

c.identity = true;

SQL Server2005中的SMO程式設計

c.identityseed = 1;

SQL Server2005中的SMO程式設計

c.datatype = datatype.int;

SQL Server2005中的SMO程式設計

c.nullable = false;

SQL Server2005中的SMO程式設計

tb.columns.add(c);

SQL Server2005中的SMO程式設計

c = new column(tb, "customername");

SQL Server2005中的SMO程式設計

c.datatype = datatype.varchar(20);

SQL Server2005中的SMO程式設計

c.nullable = true;

SQL Server2005中的SMO程式設計
SQL Server2005中的SMO程式設計

tb.create();

SQL Server2005中的SMO程式設計

以上語句是在資料庫adventureworks中建立了一個表newtablename,其中我們定義了兩個字段,一個是customerid,一個是customername.需要注意的是在建立表的時候必須要指定其中的列,如果沒有指定列,那麼建立表就會失敗.

3,建立存儲過程.

SQL Server2005中的SMO程式設計

storedprocedure sp = new storedprocedure(db, "newstoredprocedure");

SQL Server2005中的SMO程式設計

storedprocedureparameter spp1 = new storedprocedureparameter(sp, "@addrid", datatype.int);

SQL Server2005中的SMO程式設計

sp.textmode = false;

SQL Server2005中的SMO程式設計

sp.parameters.add(spp1);

SQL Server2005中的SMO程式設計

sp.textbody = "select * from person.address where addressid=@addrid";

SQL Server2005中的SMO程式設計

sp.create();

這兒需要說明的是如果不寫sp.textmode = false;那麼可能建立存儲過程要失敗,是以最好把這句加上.

整個語句比較簡單,而且也比較好了解,就不用多作解釋了.

4,删除對象.

删除對象比較簡單,隻要将需要删除的對象引用過來,然後執行drop操作就可以了.比如:

删除表:

SQL Server2005中的SMO程式設計

table tb=db.tables["tablename"]; tb.drop();

SQL Server2005中的SMO程式設計

删除存儲過程:

SQL Server2005中的SMO程式設計

storedprocedure sp = db.storedprocedures["newstoredprocedure123"]; sp.drop();

5,執行存儲過程.

執行存儲過程不需要在storedprocedure對象下尋找方法,要smo直接執行存儲過程可以使用database對象下的executenonquery方法.

6,更新對象屬性.

若想要修改資料庫的屬性,修改存儲過程内容等,在進行修改後必須要執行alter方法才能真正更新.

比如修改資料庫屬性可以使用修改db.databaseoptions下的屬性,新屬性修改好後執行一句db.alter();便可.

若要修改存儲過程,代碼如下:

SQL Server2005中的SMO程式設計

storedprocedure sp = db.storedprocedures["newstoredprocedure123"];

SQL Server2005中的SMO程式設計

storedprocedureparameter spp1 = new storedprocedureparameter(sp, "@spid", datatype.int);

SQL Server2005中的SMO程式設計
SQL Server2005中的SMO程式設計
SQL Server2005中的SMO程式設計

sp.textbody = "select * from person.address where stateprovinceid=@spid";

SQL Server2005中的SMO程式設計

sp.alter();

其他的一下對象如表,視圖等等原理相同.