[英]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具有豐富的類來幫助您進行此類測試。
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.