2013-04-30 25 views
0

我需要查詢使用wix代碼和C#創建二進制表。使用wix代碼和C#創建二進制表#

如:我能夠創造「AppSearch」表,如果不存在MSI使用下面的代碼

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 BinaryName CHAR(255)NOT NULL,Data Binary NOT NULL PRIMARY KEY Name)。

我需要這個的原因是我需要添加條目到二進制表,但有些時候msi沒有在這種情況下二進制表我需要創建表,否則我得到錯誤未知表二進制。

是否有任何其他方式來創建預定義的表'二進制'使用C#代碼和WIX或讓我知道我失蹤了什麼?

謝謝!

回答

1

我在印象中使用了WiX來構建你的MSI,並且缺少二進制表。如果沒有建立MSI並嘗試添加二進制表(你通常會做這個創造微星本身的變換沒有),那麼最簡單的方法很可能是:

一次: 使用ORCA : 1)創建一個MSI 2)將二進制表添加到MSI。 (右鍵點擊添加表格) 3)將新表格導出到IDT文件(右鍵單擊,導出表格)

結果將是一個名爲Binary.idt的文件。它會是這個樣子:(空格是很重要的,因爲它是一個製表符分隔的文件中,以便自己創建它,不要複製粘貼)在DTF

Name Data 
s72 v0 
Binary Name 

現在你可以使用導入方法的數據庫對象將IDT作爲二進制表導入數據庫。

database.ImportTable("Binary.idt"); 
+0

謝謝@Christopher您的解決方案適合我。我正在修改MSI的副本並使用CreateTransformSummaryInfo(,,,)創建MST。感謝您的跟進! – Rama 2013-05-03 06:37:42

+1

順便說一句,爲了完整性,你的SQL語句失敗的原因是因爲Binary的正確關鍵字是OBJECT。但是,當你只需導入表格規範時,爲什麼要亂用SQL呢...... :) – 2013-05-03 12:22:27

3

如果您使用EnsureTable Element,那麼即使WiX沒有任何數據,WiX也會爲這些表構建MSI。那麼你將不需要這些代碼。

+0

感謝您的留言。我如何使用C#,因爲我不使用XML。我沒有在使用C#的'數據庫'對象中找到'EnsureTable'方法。 – Rama 2013-05-02 05:33:07