1、簡介:
在這系列文章中,我將示范如何使用smo(sql management objects)來實現多種通用的數據庫管理任務,比如:備份、恢復、索引處理、完整性檢查等
在此文中我們將集中如何編譯一個smo應用程序和如何使用smo連接到sql server并獲得一些服務器信息,示例代碼將分別使用vb.net、c#和vbscript。如果你沒有使用visual studio 2005,我將介紹如何用命令行進行編譯操作
2、編譯一個smo應用程序:
要使用smo對象在.net應用程序,我們必須添加smo assemblies應用程序中,在visual studio 2005這是非常容易的,通過選擇project>add reference 菜單項,然后選擇下面assemblies即可
microsoft.sqlserver.connectioninfo
microsoft.sqlserver.smo
microsoft.sqlserver.smoenum
microsoft.sqlserver.sqlenum
當然,如果你想cool一點,你可以用命令行來編譯,如:
[visual basic]
vbc /t:exe c:/smotest.vb /r:
"c:/program files/microsoft sql server/90/sdk/assemblies/microsoft.sqlserver.connectioninfo.dll",
"c:/program files/microsoft sql server/90/sdk/assemblies/microsoft.sqlserver.smo.dll",
"c:/program files/microsoft sql server/90/sdk/assemblies/microsoft.sqlserver.smoenum.dll",
"c:/program files/microsoft sql server/90/sdk/assemblies/microsoft.sqlserver.sqlenum.dll"
[c#]
csc /t:exe /out:c:/smotest.exe c:/smotest.vb /r:
"c:/program files/microsoft sql server/90/sdk/assemblies/microsoft.sqlserver.connectioninfo.dll",
"c:/program files/microsoft sql server/90/sdk/assemblies/microsoft.sqlserver.smo.dll",
"c:/program files/microsoft sql server/90/sdk/assemblies/microsoft.sqlserver.smoenum.dll",
"c:/program files/microsoft sql server/90/sdk/assemblies/microsoft.sqlserver.sqlenum.dll"
3、獲得連接
獲得到sqlserver的連接是非常容易的,對于缺省的實例并采用win授權驗證的連接,我們只需簡單的創建一個smo服務器對象,如下代碼
[visual basic]
imports microsoft.sqlserver.management.smo
module smotest
sub main()
dim svr as server = new server()
console.writeline(svr.name & " " & svr.information.versionstring)
end sub
end module
[c#]
using system;
using microsoft.sqlserver.management.smo;
namespace smotest
{
class program
{
static void main()
{
server svr = new server();
console.writeline(svr.name + " " + svr.information.versionstring);
}
}
}
[vbscript]
set svr = createobject("sqlsmo.server")
wscript.echo svr.name & " " & svr.information.versionstring
set svr = nothing
當然,如果你的服務器不是缺省的,比如是用 服務器名/實例名組成,可以使用下面語句:
dim svr as server = new server("(local)")
server svr = new server(@"(local)/instance01")
如果你想更復雜一點,也不想用win授權驗證,可以參考下面代碼
[visual basic]
imports microsoft.sqlserver.management.smo
imports microsoft.sqlserver.management.common
module smotest
sub main()
dim svr as server = new server()
svr.connectioncontext.loginsecure = false
svr.connectioncontext.login = "username"
svr.connectioncontext.password = "password"
console.writeline(svr.name & " " & svr.information.versionstring)
end sub
end module
[c#]
using system;
using microsoft.sqlserver.management.smo;
using microsoft.sqlserver.management.common;
namespace smotest
{
class program
{
static void main()
{
serverconnection conn = new serverconnection();
conn.loginsecure = false;
conn.login = "username";
conn.password = "password";
server svr = new server(conn);
console.writeline(svr.name + " " + svr.information.versionstring);
}
}
}
[vbscript]
set svr = createobject("sqlsmo.server")
svr.connectioncontext.loginsecure = false
svr.connectioncontext.login = "username"
svr.connectioncontext.password = "password"
wscript.echo svr.name & " " & svr.information.versionstring
set svr = nothing
缺省smo對象行為是使用連接池的,連接將自動建立和按要求被釋放。 如果你不想這樣,你可以設置 autodisconnectmode 屬性改變它的行為,如果設置當然屬性值為 noautodisconnect,則連接要求顯示的建立和顯示的關閉,且這個連接是不能被池應用的,通過設置 nonpooledconnection 屬性值為true時,我們是明確指出當前連接不能被pool,你可以通過使用 profiler 來觀察smo應用程序的這種行為
如下:
缺省行為-緩沖連接
dim svr as server = new server()
console.writeline(svr.name & " " & svr.information.versionstring)
profiler觀察器將會顯示下面信息:
非缺省行為-非緩沖連接
dim svr as server = new server()
svr.connectioncontext.nonpooledconnection = true
svr.connectioncontext.connect()
console.writeline(svr.name & " " & svr.information.versionstring)
svr.connectioncontext.disconnect()
profiler觀察器將會顯示下面信息:
好了,此文到此為止,下文將會更加深入的了解smo對象,并應用其做一些簡單的備份、恢復等操作
該文來自英文文章- http://www.sqldbatips.com/showarticle.asp?id=37
新聞熱點
疑難解答