• C#用SQLDMO操作数据库----转载


    C#用SQLDMO操作数据库

     

    sqldmo.dll是随sql server2000一起发布的。sqldmo.dll自身是一个com对象

    sqldmo(sql distributed management objects,sql分布式管理对象)封装 microsoft sql server 2000 数据库中的对象。sql-dmo 允许用支持 自动化或 com 的语言编写 应用程序,以管理 sql server 安装的所有部分。sql-dmo 是 sql server 2000 中的 sql server 企业管理器所使用的 应用程序接口 (api);因此使用 sql-dmo 的 应用程序可以执行 sql server 企业管理器执行的所有功能。
    ------
    sqlserver的大致关系:
    application-->sqlserver-->database
    ------
    实例sqldmo,主要用到的是其中的以下几个类:
    sqldmo.application(使用 sqldmo.applicationclass创建)、
    sqldmo.sqlserver(使用sqldmo.sqlserverclass创建,主要用到它的connect来连接 数据库服务器)、
    sqldmo.namelist(可以通过它和application获取服务器集合,其它的请看其api)
    sqldmo.database(可以通过它和sqlserver.databases获取 数据库集合)

    示例一:获取局域网内sql服务器列表
    主要用到application的listavaiablesqlservers来获取namelist,

     1  sqldmo.application sqlapp  =   new  sqldmo.applicationclass();
     2         sqldmo.namelist names  =  sqlapp.listavailablesqlservers();
     3         serverlist.items.clear();
     4          for ( int  i = 1 ;i < names.count;i ++ )
     5          {
     6            if(names.item(i)!=null)
     7                serverlist.items.add(names.item(i));
     8        }
     9          if (serverlist.items.count > 0 )
    10          {
    11            serverlist.selectedindex = 1;
    12        }
    13          else
    14          {
    15            serverlist.text = "没有可用的sql服务器";
    16        }       


    示例二:获取某个服务器下的 数据库列表:
    主要用到sqlserver以及其属性databases

     1
     2         sqldmo.sqlserver database =   new  sqlserverclass();
     3          try
     4          {
     5            database.connect(serverlist.selecteditem.text, "sa""");
     6            databaselist.items.clear();
     7            foreach (sqldmo.database db in database.databases)
     8            {
     9                databaselist.items.add(db.name);
    10            }
    11        }
    12          catch  (system.exception ee)
    13          {
    14            databaselist.items.clear();
    15            databaselist.items.add("无法连接所选服务器");
    16        }



    下面是SMO的基本操作

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.SqlServer.Management.Common;
    using Microsoft.SqlServer.Management.Smo;
    using Microsoft.SqlServer.Management;


    namespace ConsoleApplication1
    {
        class Program
        {

            static void Main(string[] args)
            {
                //建立数据库实例连接
                Server s = new Server("POOFLY-PC");
                ServerConnection sc = s.ConnectionContext;
                sc.LoginSecure = false;
                sc.Login = "sa";
                sc.Password = "123456";
                sc.Connect();
                //输出数据库数目和第一个数据库名
                Console.WriteLine("DatabaseCount:" + s.Databases.Count);
                Console.WriteLine(s.Databases[0].Name);
                //创建数据库
                Database db = new Database(s, "newdb");
                db.Create();
                //建表Tb
                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);
                c = new Column(tb, "CustomerName");
                c.DataType = DataType.VarChar(20);
                c.Nullable = true;
                tb.Columns.Add(c);
                tb.Create();
                //创建存储过程
                StoredProcedure sp = new StoredProcedure(db, "sptest");
                StoredProcedureParameter pa1 = new StoredProcedureParameter(sp, "@pa1", DataType.Int);
                sp.TextMode = false;
                sp.Parameters.Add(pa1);
                sp.TextBody = "select * from NewTableName where CustomerID=@pa1";
                sp.Create();
                //执行存储过程
                db.ExecuteNonQuery("sptest 1");
                
            }


        }
    }

  • 相关阅读:
    OCP-1Z0-051-V9.02-26题
    谨慎使用A2W等字符转换宏
    MySQL 递归查询 当前节点及子节点
    std count_if用法
    OCP-1Z0-053-V12.02-660题
    OCP-1Z0-053-V12.02-667题
    OCP-1Z0-053-V12.02-676题
    OCP-1Z0-051-V9.02-159题
    手工不完全恢复(非归档模式下,日志被覆盖)
    手工完全恢复(非归档模式下,日志没有被覆盖)
  • 原文地址:https://www.cnblogs.com/bedfly/p/12208505.html
Copyright © 2020-2023  润新知