我需要查询使用wix代码和C#创建二进制表。
例如:如果msi中没有使用下面的代码,我可以创建“AppSearch”表
Database database = new Database(tempmsiPath, DatabaseOpenMode.Direct);
string query = "CREATE TABLE `AppSearch` (`Property` CHAR(255) NOT NULL, `Signature_`
CHAR(255) NOT NULL PRIMARY KEY `Property`)";
database.Execute(query);
但是当我尝试
时query = "CREATE TABLE `Binary` (`Name` CHAR(255) NOT NULL, `Data` Binary NOT NULL
PRIMARY KEY `Name`)";
database.Execute(query);
我收到错误“ BadQuerySyntaxException被捕获”
SQL查询语法无效或不受支持。数据库:\ c:\ xx.msi。 SQL查询中的类型说明符'Binary'无效CREATE TABLE Binary
(Name
CHAR(255)NOT NULL,Data
二进制NOT NULL PRIMARY KEY Name
)。
我需要这个的原因是我需要在二进制表中添加条目,但有时msi没有二进制表,在这种情况下我需要创建表,否则我得到错误未知表二进制。
有没有其他方法可以使用c#代码和WIX创建预定义的表'Binary',或者让我知道我缺少的是什么?
谢谢!
答案 0 :(得分:3)
如果您使用EnsureTable Element,即使WiX没有任何数据,WiX也会使用这些表构建MSI。那么您将不需要任何此代码。
答案 1 :(得分:1)
我的印象是你使用WiX来构建你的MSI并且错过了二进制表。如果您没有构建MSI并且正在尝试添加二进制表(您通常会这样做以创建不在MSI本身中的转换),那么最简单的方法可能是:
一次: 使用ORCA: 1)创建一个MSI 2)将二进制表添加到MSI。 (右键单击,添加表格) 3)将新表导出到IDT文件(右键单击,导出表)
结果将是一个名为Binary.idt的文件。它看起来像这样:(空白是重要的,因为它是制表符分隔文件,所以自己创建它;不要复制和粘贴)
Name Data
s72 v0
Binary Name
现在在DTF中,您可以使用Database对象上的Import方法将IDT作为二进制表导入数据库。
database.ImportTable("Binary.idt");
答案 2 :(得分:0)
由https://docs.microsoft.com/en-us/windows/desktop/msi/sql-syntax推荐
SQL应该是
CREATE TABLE `Binary` (`Name` CHAR(72) NOT NULL, `Data` OBJECT NOT NULL PRIMARY KEY `Name`)