gpt4 book ai didi

c++文件日期戳由触发器调用的ms sql xp更改以允许刷新vb.net表单应用程序

转载 作者:太空宇宙 更新时间:2023-11-04 13:59:30 24 4
gpt4 key购买 nike

我正在使用 SQL2012 和 VS2012。

我想实现这个解决方案来监视文件的日期和时间戳,当 SQL 表上的触发器被触发时,它由 dll 更新。

Here is what I'm trying to do.

其中引用了 MSDN article

我已按照说明进行操作,但得到了这个:

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.).

我假设是因为我使用的是 SQL2012 64 位。

我下载了 XSP.DLL 源代码并在 VS2012 中查看,但无法编译它,即使找到了 opends60.lib 的拷贝也是如此

Error 4    error LNK2019: unresolved external symbol _srv_rpcparams referenced in function _xsp_UpdateSignalFile     C:\Users\Administrator\Documents\xsp.dll\WickedCode0304\XSP\XSP.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 位和在 Win 7 Pro 64 位上运行的 VS 2012 Ultimate 来完成这项工作。这是我所做的:

  1. 从 VS 中的 VC++ 模板创建了一个新的 Empty Project,并添加了一个空的 C++ 文件。
  2. 配置管理器中将平台更改为x64
  3. Configuration Properties/General 下将 Configuration Type 更改为 Dynamic library (.dll)
  4. 安装了 SQL x64 native client包括 SQL Server Native Client SDK 以获取 opends60.lib。我不确定是否真的需要 SDK 组件。
  5. 在链接器选项中将 C:\Program Files\Microsoft SQL Server\90\SDK\Lib\x64 添加到 Additional library directories。这是安装了 native 客户端。
  6. 在链接器选项中将 opends60.lib 添加到 Additional dependencies
  7. 编译无误。
  8. 创建了 XSP.dll 使用的输出目录:C:\AspNetSql\
  9. XSP.dll 复制到第 8 步中创建的目录中。
  10. 安装扩展存储过程使用:

    使用大师
    EXEC sp_addextendedproc 'xsp_UpdateSignalFile', 'C:\AspNetSql\XSP.dll'
    GRANT EXECUTE ON xsp_UpdateSignalFile TO PUBLIC

  11. 使用 master..xsp_UpdateSignalFile 'Quotes.Quotations' 执行它并通过确认文件 Quotes.Quotations 已在输出目录中创建来验证它是否有效.

如果您有任何问题或想对任何步骤进行说明,我可以添加屏幕截图或提供更多信息。

关于c++文件日期戳由触发器调用的ms sql xp更改以允许刷新vb.net表单应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19836305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com