在存储过程中调用外部的动态连接库

问题的提出:

一般我们要根据数据库的纪录变化时,进行某种操作。我们习惯的操作方式是在程序中不停的查询表,判断是否有新纪录。这样耗费的资源就很高,如何提高这种效率,我想在表中创建触发器,在触发器中调用外部动态连接库通过消息或事件通知应用程序就可实现。而master的存储过程中最好能调用外部的动态连接库,我们在触发器中调用master的存储过程即可。

说明:VC6需要安装较新的Platform SDK才能顺利编译本代码,VC.Net可以直接编译本代码。另外还需要连接Opends60.lib

为了使没有较新Platform SDK的朋友也能编译本例子,已经将VC.Net中的Srv.h和Opends60.lib放到压缩包中

程序实现:

我们来实现一个存储过程中调用外部的dll(storeproc.dll)的函数SetFileName和addLine。

存储过程如下(需放到master库中):

CREATE PROCEDURE sp_testdll AS
exec sp_addextendedproc 'SetFileName', 'storeproc.dll'  --声明函数
exec sp_addextendedproc 'addLine', 'storeproc.dll'
declare @szFileName varchar(200)
declare @szText varchar(200)
declare @rt int
Select @szFileName = 'c:\welcome.txt'
EXEC @rt = SetFileName @szFileName  --调用SetFileName函数,参数为--szFileName;
if @rt = 0
begin
select @szText = 'welcome 01'
Exec @rt = addLine @szText          --调用addLine
select @szText = 'welcome 02'
Exec @rt = addLine @szText
end
exec sp_dropextendedproc 'SetFileName'
exec sp_dropextendedproc 'addLine'
dbcc SetFileName(free)
dbcc addLine(free)

时间: 2024-08-03 20:34:33

在存储过程中调用外部的动态连接库的相关文章

c++动态连接库中的函数返回值为指针,请问在主程序中如何调用这个库的函数。

问题描述 c++动态连接库中的函数返回值为指针,请问在主程序中如何调用这个库的函数. [code=c]extern "C" int __declspec(dllexport)add(int x, int y); extern "C" int __declspec(dllexport)*add1(); int add(int x, int y) { return x + y; } int *add1() { static int a[3]={1,2,3}; stati

c++调用matlab生成的Dll动态连接库

点击打开链接http://download.csdn.net/detail/nuptboyzhb/4228429 c++调用matlab生成的Dll动态连接库 实验平台:   matlab 7.0(R2009a)   VC++6.0思路:1. 设置matlab的编译器,使用外部的VC或者gcc等编译器. 2. 编译m文件成dll 3. 设置VC的Include路径和lib链接库的路径 4. 编写C++调用dll步骤:1.    设置matlab的编译器在命令行窗口下,输入并执行如下命令:mex

Flash中调用外部文本文件的两种方法

方法一:利用上下滚动按钮 1.打开文本文件,将文本复制到Windows 2000自带的程序"记事本"中,并在文本内容的前面输入"t="("t"为我们定义的一个变量),然后保存为"m.txt"文件,保存位置为"我的文档",编码设为"UTF-8"或"Unicode". 2.运行Flash MX,以"也谈在Flash中调用外部文本文件"为名,保存在&qu

Java中调用外部命令

Java中调用外部命令 public class ExecCommond{ public ExecCommond(){} /** * 执行一条命令 * @param execStr String 命令字符串 * @return String 执行命令错误时的信息. */ public static String exec(String execStr) { Runtime runtime = Runtime.getRuntime(); 取得当前运行期对象 String outInfo="&quo

存储过程中调用C#写的DLL

存储过程 最近一个项目中遇到一个转换FileTime的问题.时间是在C#中用DateTime.ToFileTime写入数据库中,这在存储过程中判断年和季度成了问题,怎么样才能把时间转换为正常的时间格式呢?Sql server中又没有FromFileTime对应的方法?其实很简单用C#写一个转换时间的Dll然后在存储过程中调用就可以了.转换时间的类如下:[Guid("729ba6af-3eff-4b75-b43b-d951a190dbe6")] public class FileTime

如何在Oracle存储过程中调用Java方法

存储过程中调用Java程序段 软件环境: 1.操作系统:Windows 2000 Server 2.数 据 库:Oracle 8i R2 (8.1.7) for NT 企业版 3.安装路径:C:\ORACLE 实现方法: 1.创建一个文件为Test.java public class Test { public static void main(String args[]) { System.out.println("HELLO THIS iS A Java PROCEDURE"):

spring-Spring配置中调用外部数据库配置文件

问题描述 Spring配置中调用外部数据库配置文件 (非web)将数据库配置文件放在src下编译后自动在类路径下生成该文件,这种方式会,但是,如果数据库配置文件不放在src下,而是和src同级目录,Spring配置文件中如何调用这个配置文件? 解决方案 src是类路径,在调用的时候可以在web.xml中指定路径参数classpath*:spring-context.xml这样来配置,如果不是放在src,那么就不在类路径下,那么只有指定具体路径来加载.

在Sql Server中调用外部EXE执行程序引发的问题

一.先开启xp_cmdshell 打开外围应用配置器-> 功能的外围应用配置器-> 实例名\Database Engine\xp_cmdshell-> 启用 二.解决方法 use master Exec xp_cmdshell 'mkdir d:\csj' --调用dos命令创建文件夹,(执行成功了!) Exec xp_cmdshell 'c:\calc.exe' --调用exe文件(但是执行exe文件,总一直显示"正在执行查询") 三.如果出现问题 可能会出现如上[

c++-我想写一个类动态连接库

问题描述 我想写一个类动态连接库 怎么写c++类动态连接库,就是导出一个类.然后写一个控制台程序调用出来. 解决方案 写完之后你把它编译成dll就行了,放在其他项目里直接引用 解决方案二: 在需要导出的类声明前面加上 declspec(dllexport)就可以导出到dll中了. 在另外一个工程使用该类的时候,需要在类名前加上declspec(dllimport)用来导入. 解决方案三: http://www.cnblogs.com/cswuyg/archive/2011/10/06/DLL2.