JET_USERDEFINEDDEFAULT结构

适用于:Windows |Windows服务器

JET_USERDEFINEDDEFAULT结构

JET_USERDEFINEDDEFAULT结构与JET_bitColumnUserDefinedDefault一起指定,以便为新列指定一个使用回调确定的默认值。 此方法可用于实现计算列。

Windows XP:Windows XP 中引入了JET_USERDEFINEDDEFAULT结构。

    typedef struct tag_JET_USERDEFINEDDEFAULT {
      tchar* szCallback;
      unsigned char* pbUserData;
      unsigned long cbUserData;
      tchar* szDependantColumns;
    } JET_USERDEFINEDDEFAULT;

成员

szCallback

以“module!function”格式实现回调的函数的导出名称。

回调作为列架构的一部分保留。 函数的实际主机可执行文件和导出名称必须持久保存,才能在运行时查找函数的真实地址。

模块名称是包含函数的主机二进制文件的名称。 函数名称是该函数的导出名称。 这两条信息将由数据库引擎在运行时使用,通过对模块名称执行 LoadLibrary 调用,然后对函数名称执行 GetProcAddress 调用来查找回调的真实地址。

例如,如果在名为 MyCallback.DLL 的 DLL 中实现回调,并且该 DLL 存储在 C:\MyApplication 中,实现回调的函数将从 DLL 导出为 UserDefinedDefaultCallback,则所需的字符串将为“C:\MyApplication\MyCallback.DLL!UserDefinedDefaultCallback”。

注意 不支持在回调名称的模块部分中嵌入的“!” 字符。

强烈建议使用不是主机体系结构函数的回调名称。 例如,不要使用修饰为 stdcall (UserDefinedDefaultCallback@32) 的导出,因为此调用约定仅在 x86 计算机上受支持。 如果使用此类回调,则数据库只能在 x86 计算机上使用。 在本例中,应使用别名进行与平台无关的导出。

强烈建议使用实现回调的模块名称的完整路径。 如果使用相对路径,则托管数据库的进程可能会容易受到流氓二进制文件的攻击。

应用程序应仅将受信任的回调传递给数据库引擎。 数据库引擎将加载二进制文件,以验证创建关联列时是否存在。 如果未验证或已知信任二进制文件的路径,则可能会攻击托管数据库的进程。

pbUserData

调用时要传递给回调的用户定义数据的自包含块。提供的数据块将保留为列架构的一部分。 因此,数据块必须完全独立,并且不能引用数据库范围之外的任何数据。

如果 pbUserData 为零,则忽略 cbUserData 的值。 在这种情况下,调用时不会将用户定义的数据传递给回调。

cbUserData

请参阅 pbUserData

szDependantColumns

保留供将来使用。

此成员应始终设置为 NULL。

要求

要求

客户端

需要 Windows Vista、Windows XP 或 Windows 2000 Professional。

Server

需要Windows Server 2008、Windows Server 2003 或 Windows 2000 Server。

标头

在 Esent.h 中声明。

Unicode

JET_ USERDEFINEDDEFAULT_W 实现为 unicode ( (unicode) 和 JET_ USERDEFINEDDEFAULT_A (ANSI) 。

另请参阅

JET_CBTYP
JET_COLUMNCREATE
JET_COLUMNDEF