首页 > 开发 > 综合 > 正文

了解SQL2005中的SMO对象使用(-)

2024-07-21 02:12:07
字体:
来源:转载
供稿:网友

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    
     
 

   
  
   

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表