2012年5月14日 星期一

C# - 操作資料庫的利器 - SQL Server Management Objects (SMO)


前陣子因為要寫 Log 的相關功能,
所以需要程式可以自動產生 Log 的 Table ,
但是無奈 C# 並沒有內建相關的功能可以使用,
然後我又不想自己去解析 sys.object & sys.columns 相關的東西,
雖然已經解析過兩三次了,也有半成品可以使用,
但總是覺得這樣程式寫起來不漂亮,所以不想使用!
然後就一直搜尋是否有比較直覺的方式可以使用,
就在快放棄的時候讓我看到了一篇文章,
Getting started with SQL Server Management Objects (SMO)
裡面有介紹如何使用,我大致看了一下,
便覺得這就是我要找的東西丫!丫!丫!丫!
於是跟著做了一次,使用上果然直覺多了!
馬上就拿來應用在我的程式上了!
下面我就大概講一下如何使用吧!
首先妳的專案要先 reference 幾個東西,
跟文章裡面講得有點不一樣,因為他講的東西我有一樣找不到,

Microsoft.SqlServer.ConnectionInfo
Microsoft.SqlServer.Management.Sdk.Sfc
Microsoft.SqlServer.Smo
Microsoft.SqlServer.SmoExtended
Microsoft.SqlServer.SqlEnum

文章裡面有解釋各自是甚麼東西,做甚麼用的,請自行參考。


再來我們要建立 ServerConnection 的物件,
該篇文章講的那種方式我沒有辦法連上DB,
後來我找到用這種方式可以連上 SQL Server。


ServerConnection sc = new ServerConnection(serverName, userId, userPassword);
Server server = new Server(sc);


然後取得指定的 Database,可以用 null 來判斷有沒有取得,
如果是 null 表示沒有那個 DB 存在。


Database Db = server.Databases[databaseName];


取得指定的資料表,如果資料表已經存在,則直接幫他改名字。
oldTable.Rename 是不是很直覺得使用方式,讚!


Table oldTable = Db.Tables[tableName];


if (oldTable != null) oldTable.Rename(newName);


新增資料表,第一個參數是指定要掛在哪一個 DB。


Table newTable = new Table(Db, tableName);


增加欄位的方式有好幾種,因為我要用程式自動產生,所以我用下面這一種方式。
先新增一個  ,然後去設定他的資料類別,最後把他加到資料表去。


DataType dt = new DataType();


VARCHAR


dt.SqlDataType = SqlDataType.VarChar;
dt.MaximumLength = len;


NUMERIC


dt.SqlDataType = SqlDataType.Numeric;
dt.NumericPrecision = 20;
dt.NumericScale = 5;


DATETIME, INT


dt.SqlDataType = SqlDataType.DateTime;
dt.SqlDataType = SqlDataType.SmallInt;
dt.SqlDataType = SqlDataType.Int;


最後新增一個 Column ,然後加到資料表就可以了!


Column col = new Column(newTable, colName, dt);
newTable.Columns.Add(col);


最後的最後,當所有的欄位都加好之後就把資料表 Create 起來就大功告成了!


newTable.Create();


這樣是不是很簡單,有沒有直覺多了!

ps.個人覺得本機應該要裝 SQL Server 的東西才會有那些 dll 可以 reference 吧?

更多的參考資料可以看這邊:SQL Server Management Objects (SMO)











什麼
重命名(

沒有留言:

張貼留言