由触发器调用的 MS SQL XP 更改 C++ 文件日期戳,以允许刷新表单应用程序 vb.net
c++ file datestamp change by ms sql xp called by trigger to allow refresh vb.net forms application
我正在使用SQL2012和VS2012。
我想实现这个解决方案来观察文件的日期和时间戳,当触发 SQL 表上的触发器时,该时间戳由 dll 更新。
这就是我要做的。
引用了 MSDN 文章
我已经按照说明进行操作,但得到了这个:
Msg 17750, Level 16, State 0, Procedure xsp_UpdateSignalFile, Line 1
Could not load the DLL XSP.dll, or one of the DLLs it references. Reason: 193(%1 is not a valid Win32 application.).
我假设是因为我使用的是 64 位SQL2012。
我下载了 XSP.DLL 源代码并在 VS2012 中查看,但无法编译它,即使找到自己一份 opends60.lib 的副本
Error 4 error LNK2019: unresolved external symbol _srv_rpcparams referenced in function _xsp_UpdateSignalFile C:UsersAdministratorDocumentsxsp.dllWickedCode0304XSPXSP.obj XSP
C++向导可以帮助我将其编译为 64 位还是我早点出错?
它说它无法解决一些收到的参数?
.cpp文件如下所示:
#include <windows.h>
#include <srv.h>
///////////////////////////////////////////////////////////////////////
// Entry point
extern "C" BOOL WINAPI DllMain (HINSTANCE hInstance, DWORD dwReason,
LPVOID lpReserved)
{
return TRUE;
}
///////////////////////////////////////////////////////////////////////
// Exported functions
extern "C" __declspec (dllexport)
ULONG __GetXpVersion ()
{
return ODS_VERSION;
}
extern "C" __declspec (dllexport)
SRVRETCODE xsp_UpdateSignalFile (SRV_PROC *srvproc)
{
//
// Make sure an input parameter is present.
//
if (srv_rpcparams (srvproc) == 0)
return -1;
//
// Extract the file name from the input parameter.
//
BYTE bType;
char file[256];
ULONG ulMaxLen = sizeof (file);
ULONG ulActualLen;
BOOL fNull;
if (srv_paraminfo (srvproc, 1, &bType, &ulMaxLen, &ulActualLen,
(BYTE*) file, &fNull) == FAIL)
return -1;
if (bType != SRVBIGCHAR && bType != SRVBIGVARCHAR)
return -1;
file[ulActualLen] = 0;
//
// Update the file's time stamp.
//
char path[288] = "C:\AspNetSql\";
lstrcat (path, file);
HANDLE hFile = CreateFile (path, GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile != INVALID_HANDLE_VALUE)
CloseHandle (hFile);
return 0;
}
我使用SQL Server 2008 SP3 Dev 64位和VS 2012 Ultimate在Win 7 Pro 64位上运行。这是我所做的:
- 从 VS 中的
VC++
模板创建了一个新Empty Project
,并添加了一个空的C++文件。 - 将平台更改为
x64
Configuration manager
。 - 在
Configuration Properties/General
下将Configuration Type
更改为Dynamic library (.dll)
。 - 安装了SQL x64本机客户端,包括获取
opends60.lib
SQL Server Native Client SDK
。我不确定是否真的需要 SDK 组件。 - 在链接器选项中添加了
C:Program FilesMicrosoft SQL Server90SDKLibx64
Additional library directories
。这是安装本机客户端的。 - 在链接器选项中添加了
opends60.lib
Additional
dependencies
。 - 编译时没有错误。
- 创建了
XSP.dll
使用的输出目录:C:AspNetSql
。 - 已将
XSP.dll
复制到步骤 8 中创建的目录。 -
使用以下方法安装了扩展存储过程:
USE master
EXEC sp_addextendedproc 'xsp_UpdateSignalFile', 'C:AspNetSqlXSP.dll'
GRANT EXECUTE ON xsp_UpdateSignalFile TO PUBLIC
-
使用
master..xsp_UpdateSignalFile 'Quotes.Quotations'
执行它,并通过确认文件Quotes.Quotations
是在输出目录中创建的来验证它是否正常工作。
如果您有任何问题或想澄清任何步骤,我可以添加屏幕截图或提供更多信息。
相关文章:
- 是否可以配置提升日志刷新?
- 如何在qt中同步应用程序和显示器的刷新率?
- 在 3ds Max 中更新进度条后,环境和效果 UI 不刷新
- std::endl,在 Python 中是否有等价物?(返回 + 刷新)
- 在 directx11 代码中更改全屏模式下的刷新率不起作用
- 如何在 Windows 中立即刷新文件夹图标
- 刷新来自Qpid质子连接的所有消息而不是等待?
- 如何让 cout 缓冲区在 ubuntu 上刷新
- 显示DHT1306温度数据时如何正确刷新Adafruit 11 OLED?
- 为什么PNG图像的stdout有时会在printf中刷新图像的一半
- QML:收到C 信号从C 传递时刷新问题
- 托管语言是否锁定本机库的刷新和重新加载变量?
- 记录器何时应刷新
- 在 Linux 上编译一个 c++ 应用程序,并在 TI TIVA TM4C123GH6PM上刷新它
- 如何刷新CPU缓存中的地址范围?
- 有没有办法刷新与程序相关的整个CPU缓存
- 在关闭 QFile 之前是否需要刷新 QTextStream?
- Eclipse 不会刷新 .project 信息
- 缓冲区刷新究竟是如何工作的(std::endl 和 之间的区别)?
- 在HTML内部刷新div,没有任何PHP