• 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对象给出某服务器中的数据库数目:
    using System;
    using Microsoft.SqlServer.Management.Smo;
    namespace SMOTest
    {
        
    class Class1
        
    {
            
    public static void Main()
            
    {
                Microsoft.SqlServer.Management.Common.ServerConnection conn 
    = new Microsoft.SqlServer.Management.Common.ServerConnection("tcp:157.60.15.215,12345""sa""123456");
                Server s 
    = new Server(conn);
                Console.WriteLine(
    "DatabaseCount:" + s.Databases.Count);
     }

        }

    }

    运行以上代码就可以得到服务器上数据库的数目.下面我们再来看看在SMO中对数据库常见的操作:
    1,创建删除数据库.
    Database db2 = new Database(s, "NewDatabaseName");
    db2.Create();
    以上是创建数据库的代码,那么删除数据库的代码就是:
     Database db2 = s.Databases["NewDatabaseName"];
    db2.Drop();
    2,创建表.
    Database db = s.Databases["AdventureWorks"];
    Table tb 
    = new Table(db, "NewTableName");
    Column c 
    = new Column(tb, "CustomerID");
    c.Identity 
    = true;
    c.IdentitySeed 
    = 1;
    c.DataType 
    = DataType.Int;
    c.Nullable 
    = false;
    tb.Columns.Add(c);
    = new Column(tb, "CustomerName");
    c.DataType 
    = DataType.VarChar(20);
    c.Nullable 
    = true;
    tb.Columns.Add(c);
    tb.Create();
    以上语句是在数据库AdventureWorks中创建了一个表NewTableName,其中我们定义了两个字段,一个是CustomerID,一个是CustomerName.需要注意的是在创建表的时候必须要指定其中的列,如果没有指定列,那么创建表就会失败.
    3,创建存储过程.
    StoredProcedure sp = new StoredProcedure(db, "NewStoredProcedure");
    StoredProcedureParameter spp1 
    = new StoredProcedureParameter(sp, "@addrID", DataType.Int);
    sp.TextMode 
    = false;
    sp.Parameters.Add(spp1);
    sp.TextBody 
    = "select * from Person.Address where AddressID=@addrID";
    sp.Create();

    这儿需要说明的是如果不写sp.TextMode = false;那么可能创建存储过程要失败,所以最好把这句加上.
    整个语句比较简单,而且也比较好理解,就不用多作解释了.
    4,删除对象.
    删除对象比较简单,只要将需要删除的对象引用过来,然后执行Drop操作就可以了.比如:
    删除表:
    Table tb=db.Tables["TableName"]; tb.Drop();
    删除存储过程:
    StoredProcedure sp = db.StoredProcedures["NewStoredProcedure123"]; sp.Drop();

    5,执行存储过程.
    执行存储过程不需要在StoredProcedure对象下寻找方法,要SMO直接执行存储过程可以使用Database对象下的ExecuteNonQuery方法.
    6,更新对象属性.
    若想要修改数据库的属性,修改存储过程内容等,在进行修改后必须要执行Alter方法才能真正更新.
    比如修改数据库属性可以使用修改db.DatabaseOptions下的属性,新属性修改好后执行一句db.Alter();便可.
    若要修改存储过程,代码如下:
    StoredProcedure sp = db.StoredProcedures["NewStoredProcedure123"];
    StoredProcedureParameter spp1 
    = new StoredProcedureParameter(sp, "@spID", DataType.Int);
    sp.TextMode 
    = false;
    sp.Parameters.Add(spp1);
    sp.TextBody 
    = "select * from Person.Address where StateProvinceID=@spID";
    sp.Alter();

    其他的一下对象如表,视图等等原理相同.
    【本文章出自博客园深蓝居,转载请注明作者出处,如果您觉得博主的文章对您有很大帮助,欢迎支付宝(studyzy@163.com)对博主进行打赏。】
  • 相关阅读:
    iconv 文件编码相互转换
    MySQL 字符编码
    MySQL there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause同时创建多个更新当前时间戳字段 解决方法
    PHP 输出日志到文件 DEMO
    Nginx http -> https 跳转后 POST 丢失
    SSH SCP 远程密钥登录配置和服务器间的文件传输
    Mac 安装 7zip
    git pull There is no tracking information for the current branch.
    MacOS 安装配置 Laravel
    Mac OS 安装 MySQL5.7
  • 原文地址:https://www.cnblogs.com/studyzy/p/690308.html
Copyright © 2020-2023  润新知