簡體   English   中英

Wix-Msi:如何檢查特定行是否存在於msi數據表中

[英]Wix - Msi :How to check if a particular row exists in a msi Data table or not

我想檢查數據表中是否存在特定的行。

例如,我想檢查屬性表是否存在於msi數據表中。 如果存在,那么我想檢查“屬性”列和“值”列是否存在。 如果兩者都存在,那么我想檢查屬性“ ARPNOMODIFY”是否存在。

                if (database.Tables.Contains("Property"))
                {
                    if (database.Tables["Property"].Columns.Contains("Property"))
                    {
                        // here I want to checked if "ARPNOMODIFY" or any other property exists or not. If it exists then I want its value.
                    }
                }

我有一個數據表,其結構為(“ TableName”,“ ColumnNAme1”,“ ColumnName2”,“ ColumnName1的值”)。 因此,對於上面的記錄,該行類似於(“屬性”,“屬性”,“值”,“ ARPNOMODIFY”),我想返回值1,因為存在ARPNOMODIFY並且其值為1。

現在,將另一行視為(“屬性”,“屬性”,“值”,“ ICFAGREE”)。 現在,如果ICFAGREE屬性在屬性表中不存在,那么我想返回空字符串。 提前致謝。

還考慮另一行(“ AdminExecuteSequence”,“ Action”,“ Condition”,“ SetSpecifiedDir”)。 現在,在此示例中,AdminExecuteSequence表具有“操作”和“條件”列。 “操作”列下的值之一是“ SetSpecifiedDir”,因此其在“條件”列下的對應值是“ ORCADIR”。因此,我想將此字符串返回“ ORCADIR”,如果AdminExecuteSequence表中存在“ SetSpecifiedDir”值,否則我將返回null 。

DTF具有豐富的類來幫助您進行此類測試。

另請參閱:MSI提示:使用C#/ DTF編寫ICE

   using System;
    using Microsoft.Deployment.WindowsInstaller;

    namespace ConsoleApplication1
    {
        class Tester : IDisposable
        {
            Database _database;

            public Tester(string databasePath)
            {
                _database = new Database(databasePath, DatabaseOpenMode.ReadOnly);
            }

            public void Dispose()
            {
                _database.Dispose();
            }

            public bool HasTable(string tableName)
            {
                return _database.Tables.Contains(tableName);
            }

            public bool HasColumn(string tableName, string columnName)
            {
                bool columnExists = false;
                if (HasTable(tableName))
                {
                    columnExists = _database.Tables[tableName].Columns.Contains(columnName);
                }
                return columnExists;
            }


            public bool QueryReturnsData(string sqlStatement, params object[] args)
            {
                return QueryReturnsData(string.Format(sqlStatement, args));
            }

            public bool QueryReturnsData(string sqlStatement)
            {
                bool containsData = false;
                using (View view = _database.OpenView(sqlStatement))
                {
                    view.Execute();
                    using (Record rec = view.Fetch())
                    {
                        if(rec != null )
                        {
                            containsData = true;
                        }
                    }
                }
                return containsData;

            }

        }
    }

有用於檢索屬性值的API: MsiGetProperty

編輯:要查詢是否存在任何表,可以使用MsiDatabaseGetPrimaryKeys

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM