public TableBinding Add(DataTable dataTable) { if (dataTable == null) { throw ExceptionBuilder.ArgumentNull("dataTable"); } DataTableBinding tableBinding = new DataTableBinding(dataTable); Add(tableBinding); return(tableBinding); }
public static DataTableBinding Bind(this DataTable table) { var result = new DataTableBinding { Rows = new List <string[]>() }; foreach (DataRow row in table.Rows) { string[] r = new string[table.Columns.Count]; for (int i = 0; i < table.Columns.Count; i++) { r.SetValue(row[i].ToString(), i); } result.Rows.Add(r); } return(result); }
private static void ReadAllTables(DataContext dataContext, string pathToMsiFile) { IntPtr databaseHandle; int openFlags = Msi.MsiDbPersistMode_ReadOnly; if (Path.GetExtension(pathToMsiFile).Equals(".msp", StringComparison.InvariantCultureIgnoreCase)) { openFlags += Msi.MsiDbPersistMode_PatchFile; } Msi.OpenDatabase(pathToMsiFile, openFlags, out databaseHandle); try { // Read table metadata table. DataTable tableDataTable = ReadTable(databaseHandle, "_Tables"); // NOTE: The metadata table itself is not listed in _Tables. dataContext.Tables.Add(tableDataTable); foreach (DataRow row in tableDataTable.Rows) { string tableName = (string)row["Name"]; DataTable table = ReadTable(databaseHandle, tableName); dataContext.Tables.Add(table); } // Add relations as described in the _Validation metadata table. DataTableBinding validationTableBinding = (DataTableBinding)dataContext.Tables["_Validation"]; if (validationTableBinding != null) { foreach (DataRow dataRow in validationTableBinding.DataTable.Rows) { if (dataRow.IsNull("KeyTable")) { continue; } string tableName = (string)dataRow["Table"]; string columnName = (string)dataRow["Column"]; string[] keyTablesNames = ((string)dataRow["KeyTable"]).Split(';'); int keyColumnNumber = (int)dataRow["KeyColumn"]; foreach (string keyTableName in keyTablesNames) { if (dataContext.Tables[tableName] != null) { TableBinding keyTable = dataContext.Tables[keyTableName]; if (keyTable != null && keyColumnNumber >= 1 && keyColumnNumber <= keyTable.Columns.Count) { string keyColumnName = keyTable.Columns[keyColumnNumber - 1].Name; dataContext.TableRelations.Add(tableName, new string[] { columnName }, keyTableName, new string[] { keyColumnName }); } } } } } } finally { Msi.CloseHandle(databaseHandle); } }