數據行定義格式

MsiViewGetColumnInfo 和 View 物件的 ColumnInfo 屬性 使用下列格式來描述資料庫數據行定義。 每個數據行都會由函式或屬性所傳回之對應記錄欄位中的字串來描述。 定義字串是由單一字母所組成,代表數據類型,後面接著數據行的寬度(如果適用,則為字元,否則為位元組)。 零的寬度會指定未系結的寬度(例如長文字欄位和數據流)。 大寫字母表示數據行中允許 Null 值。

數據行描述元 定義字串
s? 字串,可變長度 (?=1-255)
s0 字串,可變長度
i2 短整數
i4 長整數
v0 二進位數據流
g? 暫存字串 (?=0-255)
j? 暫存整數 (?=0,1,2,4)
O0 暫存物件

 

用來描述數據行的字串與 CREATE 和 ALTER 所使用的 SQL 查詢字串具有下列關聯性。 如需詳細資訊,請參閱 SQL 語法。

傳回的值 SQL 語法
s0 LONGCHAR
l0 LONGCHAR LOCALIZABLE
s# CHAR(#)
s# CHARACTER(#)
l # CHAR(#) LOCALIZABLE
l # CHARACTER(#) LOCALIZABLE
i2 短
i2 INT
i2 整數
i4 長
v0 物件

 

如果字母沒有大寫,SQL 語句應該附加 NOT NULL。

傳回的值 SQL 語法
s0 LONGCHAR NOT NULL

 

安裝程式不會在內部將數據行長度限制為數據行定義格式所指定的值。 如果輸入欄位的資料超過指定的資料行長度,封裝就無法透過 套件驗證。 若要在此案例中傳遞驗證,必須變更數據或資料庫架構。 變更標準數據表數據行長度的唯一方法是使用 MsiDatabaseExport導出數據表、編輯導出的 .idt 檔案,然後使用 msiDatabaseImport匯入數據表。 作者無法變更標準數據表中任何數據行的數據行數據類型、可為 Null 或當地語系化屬性。 作者可以使用具有任何數據行屬性的數據行來建立自定義數據表。

使用 MsiDatabaseMerge 將參考資料庫合併至目標資料庫時,數據行名稱、主鍵數目和數據行數據類型必須相符。 MsiDatabaseMerge 會忽略當地語系化和數據行長度屬性。 如果參考資料庫中的數據行長度是 0 或大於該數據行在目標資料庫中的長度,MsiDatabaseMerge 會將目標資料庫中的數據行長度增加到參考資料庫中的長度。

使用 Mergmod.dll 2.0 版時,合併模組對 .msi 檔案的應用程式永遠不會變更現有資料庫數據表的數據行或數據行類型長度。 不過,如果模組將新的數據行加入至有效加入數據行的數據表,合併模組的應用程式可以變更現有資料庫數據表的架構。 使用小於 2.0 版的 Mergemod.dll 版本時,合併模組的應用程式永遠不會變更數據行長度,也永遠不會變更目標資料庫的架構。