SQL Server调用OLE对象
T-SQL 中是可以调用 OLE 的,将这一功能应用到触发器、存储过程等对象中,SQL Server 运用变得更贴近我们的功能,更加满足我们的需要。
T-SQL 中有七个存储过程是围绕本节内容进行的,我们只介绍其中最常用的四个存储过程,其余内容您可以参见 SQL Server 联机丛书。
sp_OACreate
创建 OLE 对象实例。sp_OAMethod
调用 OLE 对象的方法。sp_OAGetErrorInfo
获取 OLE 自动化错误信息。sp_OADestroy
释放已创建的 OLE 对象。
1、示例
我们以ASP
中常见的Scripting.FileSystemObject
介绍如何利用T-SQL调用DLL。
首先看一个示例,为了便于您在SQL查询分析器中测试,本示例中添加了两句输出代码(已经在示例中注明),您在应用到触发器或存储过程时,应该去掉这两句,另外在关键语句的后面添加了等效的ASP
语句,便于您理解。
DECLARE @errCode int
DECLARE @fso int
EXEC @errCode = sp_OACreate 'Scripting.FileSystemObject', @fso OUT /*等效于:set fso = Server.CreateObject("Scripting.FileSystemObject")*/
if @errCode <> 0
BEGIN
DECLARE @description varchar(256)
EXEC sp_OAGetErrorInfo @fso, NULL, @description OUT
PRINT @description /*SQL 查询分析器中有效*/
END
DECLARE @exists bit
EXEC sp_OAMethod @fso, 'FileExists', @exists OUT, 'C:\foo.txt' /*等效于:exists = fso.FileExists("C:\foo.txt")*/
PRINT @exists /*SQL 查询分析器中有效*/
DECLARE @f int
EXEC sp_OAMethod @fso, 'CreateTextFile', @f OUT, 'C:\foo.txt', 1 /*等效于:set f = fso.CreateTextFile("C:\foo.txt", true)*/
EXEC sp_OAMethod @f, 'Write', NULL, '写一行内容' /*等效于:f.Write("写入内容")*/
EXEC sp_OAMethod @f, 'Close' /*等效于:f.Close*/
EXEC sp_OADestroy @f /*等效于:set f = nothing*/
EXEC sp_OADestroy @fso /*等效于:set fso = nothing*/
上述中 bit 类型的值 1 表示 true,bit 类型的值 0 表示 false。
示例将判断 C 盘下是否存在 foo.txt,并且创建一个 foo.txt,并向其中写入一行文字。
代码似乎有些多,不过您有兴趣一定要仔细看完,因为并不复杂,而且它涵盖了最常用的代码。
2、讲解
sp_OACreate
创建 OLE 对象实例。- 第一个参数为 OLE 对象的程序标识符(ProgID)或类标识符(CLSID)。
- 第二个参数为返回的对象令牌,必须是数据类型为 int 的局部变量,在后面的方法中都要用到对象令牌。输出参数,必须加 OUT 或 OUTPUT。
sp_OAMethod
调用 OLE 对象的方法。- 第一个参数为对象令牌。
- 第二个参数为方法名称。
- 第三个参数为方法的返回值,如果方法返回的是对象,则该参数类型为 int。输出参数,必须加 OUT 或 OUTPUT。
- 第四个及以后的参数为方法的参数值,如果方法的参数是输出参数,则要加上 OUT 或 OUTPUT。
- sp_OAMethod也可用来获取属性值。
sp_OAGetErrorInfo
获取 OLE 自动化错误信息。- 第一个参数为对象令牌。
- 第二个参数为错误信息的来源。输出参数,必须加 OUT 或 OUTPUT。
- 第三个参数为错误的描述。输出参数,必须加 OUT 或 OUTPUT。
sp_OADestroy
释放已创建的 OLE 对象。- 第一个参数为对象令牌。
sp_OAGetProperty
获取 OLE 对象的属性值sp_OASetProperty
将 OLE 对象的属性设置为新值sp_OAStop
停止服务器范围内的 OLE 自动化存储过程执行环境。
这七个存储过程都有返回值,如果返回值是 0 表示成功,其它值表示失败,示例中只对 sp_OACreate
的返回值作了判断。
3、扩展
T-SQL 中还可以利用 sp_addextendedproc
向 SQL Server 注册新扩展存储过程的名称,但是 SQL Server 2005 联机丛书中已经说明将在后续版本中删除该功能,不建议我们继续使用该存储过程,所以这里不介绍 sp_addextendedproc
。
SQL Server调用OLE对象的更多相关文章
- ADO.NET访问SQL Server调用存储过程带回参
1,ADO.NET访问SQL Server调用存储过程带回参 2,DatabaseDesign use northwind go --存储过程1 --插入一条商品 productname=芹菜 un ...
- SQL Server 调用 C# 方法实现正则表达式验证
Ø 前言 1. 在 SQL Server 中默认是不支持正则表达式验证的,如果需要某个字符串匹配一个正则表达式的验证规则,就需要额外的编写 C# 方法,并发布到 SQL Server 数据库中. ...
- 在SQL Server中查看对象依赖关系
原文 在SQL Server中查看对象依赖关系 Viewing object dependencies in SQL Server Deleting or changing objects may ...
- sql server 调用webservice
sql server版本2008以上,应该都可以 更改服务器配置 sp_configure ; GO RECONFIGURE; GO sp_configure ; GO RECONFIGURE; GO ...
- SQL Server修改数据库对象所有者(Owner)浅析
在SQL Server数据库中如何修改数据库对象(表.视图.存储过程..)的所有者(Owner)呢?一般我们可以使用系统提供的系统存储过程sp_changeobjectowner来修改. 我们先看看s ...
- Sql Server 调用DLL
背景 在处理数据或者分析数据时,我们常常需要加入一定的逻辑,该些处理逻辑有些sql是可以支持,有些逻辑SQL则无能为力,在这种情况下,大多数人都会编写相关的程序来处理成自己想要的数据,但每次处理相同逻 ...
- SQL Server 判断各种对象是否存在和sysobjects的关系
一.判断表是否存在 object_id():获取表的ID,其中N表示Unicode类型.可以支持不同语种的对象名 ) drop table [dbo].[表名] 二.判断要创建的存储过程名是否存在 ) ...
- SQL SERVER 2012 第五章 创建和修改数据表 の SQL SERVER中的对象名
[ServerName.[DataBaseName.[SchemeName.]]]ObjectName 服务器名,数据库名,模式名,对象名 其中模式是一个新出的坑爹的东西.
- SQL SERVER调用textcopy写文件
SET @PATH = 'textcopy /S ' + @LServer + ' /U '+ @LUser + ' /P '+ @LPass + ' /D '+ @LDB + ' /T '+@tab ...
- PowerDesigner16建表在SQL SERVER 2008报 对象名 'sysproperties' 无效。
http://blog.itpub.net/30150152/viewspace-1454979/
随机推荐
- SqlServer 死锁查询
use master go create procedure sp_who_lock as begin declare @spid int,@bl int, @intTransactionCountO ...
- Vue 3指令与事件处理
title: Vue 3指令与事件处理 date: 2024/5/25 18:53:37 updated: 2024/5/25 18:53:37 categories: 前端开发 tags: Vue3 ...
- C# xml与对象相互转换
例如: 1.对象转xml(对象序列化为xml) string strImage= XmlSerializeHelper.Serialize<List<ImageSingle>> ...
- 基于centos7的企业级ceph集群搭建[nautilus14.22版]
集群规划 本案例通过ceph-deploy方式部署 主机名 配置 外网IP / 内网IP 角色 系统版本 ceph-node01 磁盘x3 50G 192.168.3.101/24 172.16.1. ...
- redis安装和基础使用
redis安装 mkdir /server/tools -p cd /server/tools echo 'PATH=/usr/local/redis/src:$PATH' >>/etc/ ...
- C#开源实用的工具类库,集成超过1000多种扩展方法
前言 今天大姚给大家分享一个C#开源(MIT License).免费.实用且强大的工具类库,集成超过1000多种扩展方法增强 .NET Framework 和 .NET Core的使用效率:Z.Ext ...
- Android应用程序启动流程浅析-(三万字长文慎点&Android14)
在Android桌面Launcher源码浅析中介绍了Android的桌面程序Launcher是如何响应用户点击事件并启动App的,这篇文章继续介绍App在Android系统层是的启动流程. 一.启动流 ...
- 浏览器的同源策略 jsonp方法解决跨域
// 浏览器的同源性 // 在 浏览器 处理请求时 默认执行的是 同源策略 // 也就是 浏览器 只 允许 同源的项目/请求 之间 获取响应体内容 // ...
- kettle从入门到精通 第五十五课 ETL之kettle Excel输入
1. Excel输入,Microsoft Excel输入步骤的作用是从Microsoft Excel中读取数据,如下图所示: 1)Excel输入步骤从文件D:\data\测试数据.xlsx读取数据. ...
- es6.6.1 索引的增加,查询,修改,删除
1.新增 test2/user2/1/_create PUT操作{"name":"qiqi","age":17} 2.查询 test2/us ...