Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >SQL Server2005中的SMO编程

SQL Server2005中的SMO编程

作者头像
深蓝studyzy
发布于 2022-06-15 12:05:42
发布于 2022-06-15 12:05:42
1K00
代码可运行
举报
文章被收录于专栏:深蓝居深蓝居
运行总次数:0
代码可运行

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对象给出某服务器中的数据库数目:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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", "");

            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,创建表.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Database db = s.Databases["AdventureWorks"];

Table tb = new Table(db, "NewTableName");

Column c = new Column(tb, "CustomerID");

c.Identity = true;

c.IdentitySeed = ;

c.DataType = DataType.Int;

c.Nullable = false;

tb.Columns.Add(c);

c = new Column(tb, "CustomerName");

c.DataType = DataType.VarChar();

c.Nullable = true;

tb.Columns.Add(c);

tb.Create();

以上语句是在数据库AdventureWorks中创建了一个表NewTableName,其中我们定义了两个字段,一个是CustomerID,一个是CustomerName.需要注意的是在创建表的时候必须要指定其中的列,如果没有指定列,那么创建表就会失败.

3,创建存储过程.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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操作就可以了.比如:

删除表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Table tb=db.Tables["TableName"]; tb.Drop();

删除存储过程:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
StoredProcedure sp = db.StoredProcedures["NewStoredProcedure123"]; sp.Drop();

5,执行存储过程.

执行存储过程不需要在StoredProcedure对象下寻找方法,要SMO直接执行存储过程可以使用Database对象下的ExecuteNonQuery方法.

6,更新对象属性.

若想要修改数据库的属性,修改存储过程内容等,在进行修改后必须要执行Alter方法才能真正更新.

比如修改数据库属性可以使用修改db.DatabaseOptions下的属性,新属性修改好后执行一句db.Alter();便可.

若要修改存储过程,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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();

其他的一下对象如表,视图等等原理相同.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2006-10-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SQL Server 高性能写入的一些总结
1.1.1 摘要 在开发过程中,我们不时会遇到系统性能瓶颈问题,而引起这一问题原因可以很多,有可能是代码不够高效、有可能是硬件或网络问题,也有可能是数据库设计的问题。 本篇博文将针对一些常用的数据库性能调休方法进行介绍,而且,为了编写高效的SQL代码,我们需要掌握一些基本代码优化的技巧,所以,我们将从一些基本优化技巧进行介绍。 本文目录 代码中的问题 数据库性能开销 使用存储过程 使用数据库事务 使用SqlBulkCopy 使用表参数 1.1.2 正文 假设,我们要设计一个博客系统,其中包含一个
小端
2018/04/11
1.8K0
SQL Server 高性能写入的一些总结
StoredProcedure「建议收藏」
这个玩意称为存储过程,类似于其他编程语言中的函数,它含有可与IF,WHILE等这样的编程构造所结合的SQL语句,以编译的形式保存在数据库中。存储过程可用来编写数据库中处理事务的代码。
全栈程序员站长
2022/09/18
3700
SQL Server常用命令(平时不用别忘了)
SQL Server 2008 在Microsoft的数据平台上发布,可以组织管理任何数据。可以将结构化、半结构化和非结构化文档的数据直接存储到数据库中。可以对数据进行查询、搜索、同步、报告和分析之类的操作。数据可以存储在各种设备上,从数据中心最大的服务器一直到桌面计算机和移动设备,它都可以控制数据而不用管数据存储在哪里 一、基础 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql ser
昱良
2018/04/08
1.5K0
Quartz.net官方开发指南 第九课: JobStore
JobStore负责保持对所有scheduler “工作数据”追踪,这些工作数据包括:job(任务),trigger(触发器),calendar(日历)等。为你的Quartz scheduler选择合适的JobStore是非常重要的一步,幸运的是,如果你理解了不同的JobStore之间的差别,那么选择就变得非常简单。在提供产生scheduler 实例的SchedulerFactory的属性文件中声明scheduler所使用的JobStore(以及它的配置)。 注:不要在代码中直接使用JobStore实例,
张善友
2018/01/19
1.2K0
SQL Server 2008新特性——策略管理
策略管理是SQL Server 2008中的一个新特性,用于管理数据库实例、数据库以及数据库对象的各种属性。策略管理在SSMS的对象资源管理器数据库实例下的“管理”节点下,如图:
深蓝studyzy
2022/06/16
9300
SQL Server 2008新特性——策略管理
ADO.NET入门教程(六) 谈谈Command对象与数据检索
摘要 到目前为止,我相信大家对于ADO.NET如何与外部数据源建立连接以及如何提高连接性能等相关知识已经牢固于心了。连接对象作为ADO.NET的主力先锋,为用户与数据库交互搭建了扎实的桥梁。它的一生是平凡而又伟大的,总是尽自己最大的努力为用户搭建一条通往数据库的平坦大道。相比连接对象来说,Command对象似乎耀眼的多。Command对象在ADO.NET世界里总是忙忙碌碌,它就像一个外交官,为用户传达了所有操作数据库的信息。 ---- 目录 准备 什么是Command对象? 必须掌握的几个属性 必须掌握的几
刘皓
2018/04/03
1.4K0
ADO.NET入门教程(六) 谈谈Command对象与数据检索
MySQL常用SQL语句大全
    >CREATE USER name IDENTIFIED BY ‘ssapdrow’;
全栈程序员站长
2022/07/01
2.5K0
ASP.NET MVC5+EF6+EasyUI 后台管理系统(89)-EF执行SQL语句与存储过程
这一节,我们来看看EF如何执行SQL语句与读取存储过程的数据,可能有一部分人,还不知道EF如何执行存储过程与原生SQL语句! 我们什么时候要直接使用原生的SQL语句? 返回值过于复杂 过于复杂的联合查询,可能连了好几张表 报表自定义SQL语句(自定义报表居多) 使用EF,但是写了一条性能很差的LINQ 批量操作 所以实际开发中,我往往两合一处理 EF上下文 DbContext包含了DataBase属性,里面有很多方法,但是实际我们只需要用到个方法      ExecuteSqlCommand 和 Sql
用户1149182
2018/03/27
1.2K0
ASP.NET MVC5+EF6+EasyUI 后台管理系统(89)-EF执行SQL语句与存储过程
SQL 语句大全
1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建 备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat' --- 开始 备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
Hongten
2018/09/18
5.5K0
Sqlserver2005日志文件太大,使其减小的方法
backup log dbNamewith NO_LOG backup log dbNamewith TRUNCATE_ONLY DBCC SHRINKDATABASE(dbName)
全栈程序员站长
2022/07/17
1.1K0
MSSQL之十一 数据库高级编程总结
2.1)使用复数,Pascal Case,而复数只加在最后一个单词上如:Products,Users,UserRoles
用户9184480
2024/12/17
1180
SQL SERVER几种数据迁移/导出导入的实践
SQLServer提供了多种数据导出导入的工具和方法,在此,分享我实践的经验(只涉及数据库与Excel、数据库与文本文件、数据库与数据库之间的导出导入)。 (一)数据库与Excel 方法1: 使用数据库客户端(SSMS)的界面工具。右键选择要导出数据的数据库,选择“任务”——“导出数据”,下图1,按照向导一步一步操作即可。而导入则相反,导入时,SQLServer会默认创建一张新表,字段名也默认跟导入的Excel标题一样,并且会默认字段数据类型等。当然在可以在向导进行修改。需要注意的是如果标题不是英文而是中文
逸鹏
2018/04/10
8.6K0
SQL SERVER几种数据迁移/导出导入的实践
Web.Config和Sql Server2005连接字符串总结
 SQL Native Client ODBC Driver 标准安全连接 
阳光岛主
2019/02/19
2K0
Enterprise Library 4 数据访问应用程序块
Enterprise Library 数据访问应用程序块简化了实现常规数据访问功能的开发任务。应用程序可以在各种场景中使用此应用程序块,例如为显示而读取数据、传递数据穿过应用程序层( application layers)、以及将修改的数据提交回数据库系统。应用程序块包含对存储过程和内联 SQL 的支持。常规内部(housekeep)处理,如管理连接、创建并缓存参数,都封装在应用程序块的方法中。换句话说,数据访问应用程序块在简单易用的类中提供了对 ADO.NET 的最常用的特性的访问;这提高了开发人员的工作
张善友
2018/01/19
1.8K0
经典MySQL语句大全和常用SQL语句命令的作用。
转载自 http://blog.csdn.net/suyu_yuan/article/details/51784893
allsmallpig
2021/02/25
1.5K0
同样的SQL语句在查询分析器执行很快,但是网站上执行超时的诡异问题
    同样的SQL语句在查询分析器执行很快,但是网站上执行超时,这个问题以前遇到过,解决办法是重新启动服务器,但过一段时间后(时间长短不一定,一般为一天后),这次又出现了,不能总是重新启动服务器了事吧,决定探个究竟。     首先,打开SQLSERVER 事务探查器,找到那个执行超时的SQL语句: exec sp_executesql N'       SELECT a.WorkNo,a.理财经理网点,a.理财经理姓名,a.序号,CAST( ROUND(a.金额/10000,2) as float) 金额
用户1177503
2018/02/26
2.5K0
C# 利用IDbDataAdapter / IDataReader 实现通用数据集获取
在.net 应用中,与数据库进行连接并查询相关数据,填充到数据集是我们经常用到的功能,数据集的表现形式基本包括如下:
初九之潜龙勿用
2024/06/20
1450
C# 利用IDbDataAdapter / IDataReader 实现通用数据集获取
Attacking SQL Server CLR Assemblies
本文中我将以Nathan Krik的CLR系列文章提到的CLRassembly)为基础进行拓展,同时我也会介绍如何创建、导入、导出以及修改SQL Server的CRL库去实现提权、命令执行以及持久化操作
Al1ex
2022/06/23
1.7K0
Attacking SQL Server CLR Assemblies
SQL Server 2008使用自定义表类型
本文转载:http://www.cnblogs.com/chenxizhang/archive/2009/04/28/1445234.html
跟着阿笨一起玩NET
2018/09/18
1.8K0
SQL Server 2008使用自定义表类型
MSSQL利用总结
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。 雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。
安恒网络空间安全讲武堂
2019/09/17
3.3K0
MSSQL利用总结
相关推荐
SQL Server 高性能写入的一些总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验