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
新闻热点
疑难解答