内部验证
创作安装包时,可以使用 MsiViewModify 函数或 View.Modify 方法来确保输入的数据语法正确。 有关详细信息,请参阅 Modify 方法。 在最低级别,数据库表的列可以存储整数(短或长)、字符串或二进制数据。 但是,安装包需要特定表中的特定整数或字符串。 这些规范在 _Validation 表中维护。 例如,File 表的 FileName 列 是字符串列,但它专门存储文件名。 因此,条目不仅应为字符串,还应遵循命名文件的要求。
与 MsiViewModify 函数一起使用的各种验证枚举值允许在不同级别进行即时验证。 MSIMODIFY_VALIDATE_FIELD枚举可用于验证记录的各个字段。 它不验证外键。 MSIMODIFY_VALIDATE枚举将验证整行并包括外键验证。 如果要将新行插入表中,请使用MSIMODIFY_VALIDATE_NEW枚举来验证是否正在添加有效数据以及使用唯一的主键。 如果主键不唯一,则插入将失败。 如果调用 MsiViewModify 且其中一个验证枚举返回错误,则可以重复调用 MsiViewGetError 来诊断问题。 MsiViewGetError 指示发生错误的列以及枚举值以帮助解决问题。 有关详细信息,请参阅 GetError 方法。
还可以使用内部验证来确保其他作者在自定义表中正确输入数据。 使用自定义表名称和列名作为主键将自定义表的每个列添加到_Validation表中。 提供_Validation表中“说明”列中每列的说明或用途。 使用 Nullable、MinValue、MaxValue、KeyTable、KeyColumn、Category 和 Set 列输入每个列的适用要求:
- 如果列可为 Null,请输入“Y”。 如果没有,请输入“N”。
- 如果列是整数列,并且可以包含整数范围,请使用 MinValue 和 MaxValue 列输入该区域。
- 使用 KeyTable 和 KeyColumn 列标识外键列。
- 对于字符串列,请指定“文件名”、“GUID”或“标识符”等类别。 有关详细信息,请参阅 列数据类型。
- 如果数据只能与特定数量的值(字符串或整数)相关,请使用“设置”列列出可接受的值。
下面是_Validation表中的列(除了表、列和说明)的列表,如果列的类型为指定类型,则可以填充这些列。 (请注意,无需填写所有列。
类型 | 列 |
---|---|
整数 | Nullable、MinValue、MaxValue、KeyTable、KeyColumn、Set |
字符串 | Nullable、KeyTable、KeyColumn、Category、Set、MinValue、MaxValue |
二元的 | 可以为 Null,类别(类别必须为“Binary”) |
创作环境可以使用MSIMODIFY_VALIDATE_DELETE。 此枚举假定要删除该行。 不执行字段或外键验证。 此枚举实际上执行反向外键验证。 它检查_Validation表,以获取 KeyTable 和 KeyColumn 列中的引用,以获取“已删除”行所属的表。 如果有列将包含“已删除”行的表列为潜在的外键,则它会循环访问该列,以查看“已删除”行中是否有任何值引用值。 返回错误意味着通过删除行来破坏数据库的关系完整性。