Windows Installer XML DataSource Extension
This extension significantly simplifies authoring of data source connection points, creating databases at install time and dropping databases during uninstall. Unlike the wix Sql extensions it is constructed on top of pure ODBC and built to support other database types in the near future.
- Example: Executing Statements on a Generic ODBC Connection
<AppSecInc:ODBCConnection Id="LocalGenericConnection" ConnectionString="Driver={SQL Server};Server=localhost,1433;Database=master;Trusted_Connection=Yes;" />
<Component Id="MasterDatabaseSysDatabases" Guid="0399235A-BFF3-41ef-993C-8FA9C0E354D6" KeyPath="yes">
<AppSecInc:ODBCExecute Id=
"SelectSysDatabases" ConnectionId=
"LocalGenericConnection" Sql=
"SELECT * FROM sysdatabases" OutputFilename=
"[INSTALLLOCATION]SysDatabases.xml" ExecuteOnInstall=
"yes" />
</Component>
- Example: Creating an MSSQL Database and Executing SQL Statements
<AppSecInc:MSSQLDatabaseConnection Id="LocalSQLServerConnection" IpAddress="localhost" Port="1433" Protocol="Tcp" WindowsAuthentication="yes" />
<Binary Id="CreateBinaryTable_sql" SourceFile="CreateBinaryTable.sql" />
...
<File Id="CreateFileTable_sql" Name="CreateTable.sql" Source="CreateTable.sql" />
...
<AppSecInc:MSSQLDatabase Id=
"MSSQLDemoDatabase" Name=
"[MSSQL_DATABASE_NAME]" Connection=
"LocalSQLServerConnection" CreateOnInstall=
"yes" DropOnUnInstall=
"yes">
<AppSecInc:MSSQLDatabaseOption Id="MSSQLDemoDatabase_QuotedIdentifierOn" Value="QUOTED_IDENTIFIER ON" />
<AppSecInc:MSSQLDatabaseFileSpec Id="MSSQLDemoDatabase_PRIMARY" Name="Demo_mdf" Filename="[INSTALLLOCATION]Demo.mdf" Size="10MB" Type="PRIMARY" />
<AppSecInc:MSSQLDatabaseFileSpec Id="MSSQLDemoDatabase_LOG" Name="Demo_ldf" Filename="[INSTALLLOCATION]Demo.ldf" Size="12MB" Type="LOG ON" />
<AppSecInc:ODBCExecute Id=
"MSSQLDemoDatabase_CreateOptionalTable1" Sql=
"CREATE TABLE [\[][MSSQL_DATABASE_NAME]Optional[\]].[\[]dbo[\]].[\[]OptionalTable1[\]] ( [\[]OptionalTable1_Id[\]] [\[]int[\]] IDENTITY(1,1) NOT NULL )" ExecuteOnInstall=
"yes" />
<AppSecInc:ODBCExecute Id=
"MSSQLDemoDatabase_DropOptionalTable1" Sql=
"DROP TABLE [\[][MSSQL_DATABASE_NAME]Optional[\]].[\[]dbo[\]].[\[]OptionalTable1[\]]" ExecuteOnUnInstall=
"yes" />
<AppSecInc:ODBCExecuteBinary Id=
"MSSQLDemoDatabase_Binary" ExecuteOnInstall=
"yes" BinaryId=
"CreateBinaryTable_sql" />
<AppSecInc:ODBCExecuteFile Id=
"[#CreateFileTable_sql]" ExecuteOnInstall=
"yes" />
</AppSecInc:MSSQLDatabase>
- Example: Inserting BULK Data into an MSSQL Database
<AppSecInc:MSSQLDatabase Id=
"MSSQLDemoDatabase" Name=
"[MSSQL_DATABASE_NAME]" ConnectionId=
"LocalSQLServerConnection" CreateOnInstall=
"yes" DropOnUnInstall=
"yes">
<AppSecInc:MSSQLDataFile Id=
"MSSQLDemoDatabase_BulkInsert_CSV" Filename=
"[INSTALLLOCATION]BinaryTable.csv" ExecuteOnInstall=
"yes" Schema=
"dbo" Table=
"BinaryTableEncoded">
<AppSecInc:MSSQLDataFileParameter Id="MSSQLDemoDatabase_BulkInsert_CSV_KEEPIDENTITY" Value="KEEPIDENTITY" />
<AppSecInc:MSSQLDataFileParameter Id="MSSQLDemoDatabase_BulkInsert_CSV_DATAFILETYPE" Value="DATAFILETYPE = 'char'" />
<AppSecInc:MSSQLDataFileParameter Id="MSSQLDemoDatabase_BulkInsert_CSV_FIELDTERMINATOR" Value="FIELDTERMINATOR = ','" />
</AppSecInc:MSSQLDataFile>
<AppSecInc:MSSQLDataBinaryFile Id=
"MSSQLDemoDatabase_BulkInsert_Binary_CSV" BinaryId=
"BinaryTable_csv" ExecuteOnInstall=
"yes" Schema=
"dbo" Table=
"BinaryTableNotEncoded">
<AppSecInc:MSSQLDataFileParameter Id="MSSQLDemoDatabase_BulkInsert_Binary_CSV_KEEPIDENTITY" Value="KEEPIDENTITY" />
<AppSecInc:MSSQLDataFileParameter Id="MSSQLDemoDatabase_BulkInsert_Binary_CSV_DATAFILETYPE" Value="DATAFILETYPE = 'char'" />
<AppSecInc:MSSQLDataFileParameter Id="MSSQLDemoDatabase_BulkInsert_Binary_CSV_FIELDTERMINATOR" Value="FIELDTERMINATOR = ','" />
</AppSecInc:MSSQLDataBinaryFile>
</AppSecInc:MSSQLDatabase>
- Example: Creating Generic, Access and MSSQL Data Sources
Name="DemoODBCGenericSystemDSN" Type="system" Value="Server=localhost;Description=[MSSQL_DATABASE_NAME] DSN created by ODBCDataSource;Database=[MSSQL_DATABASE_NAME];Trusted_Connection=yes" />
Name="DemoMSSQLDatabaseUserDSN" Type="user" Address="localhost" Description="[MSSQL_DATABASE_NAME] DSN created by MSSQLDataSource"
Database="[MSSQL_DATABASE_NAME]" TrustedConnection="yes" Server="localhost" Network="DBMSSOCN" />
<AppSecInc:AccessDataSource Id=
"AccessDemoDatabase_DataSource" CreateOnInstall=
"yes" DBQ=
"[INSTALLLOCATION]Database.mdf"
Name=
"DemoAccessDatabaseSystemDSN" Type=
"system" Description=
"Access Demo DSN" DeleteOnUnInstall=
"yes" />
- Example: Creating a Microsoft Access Database
<Property Id="ACCESS_DATABASE_DBQ" Value="[INSTALLLOCATION]AccessDemoDatabase.mdf">
<!-- database name saved for uninstall -->
<RegistrySearch Id="AccessDatabaseDBQSearch" Root="HKLM" Type="raw" Key="SOFTWARE\AppSecInc\AccessDatabaseMsi" Name="ACCESS_DATABASE_DBQ" />
</Property>
<Component Id="AccessDatabaseMsiComponent" Guid="D2CF0414-4650-4192-8A6F-41F1FB31C290">
...
<AppSecInc:AccessDatabase Id=
"AccessDemoDatabase" DBQ=
"[ACCESS_DATABASE_DBQ]" ConnectionId=
"AccessConnection" CreateOnInstall=
"yes" DropOnUnInstall=
"yes">
<AppSecInc:ODBCExecute Id=
"AccessDemoDatabase_CreateTable1" Sql=
"CREATE TABLE Table1 ( Table1_Id INTEGER NOT NULL )" ExecuteOnInstall=
"yes" OutputFilename=
"[INSTALLLOCATION]CreateTable1.xml" />
<AppSecInc:ODBCExecute Id=
"AccessDemoDatabase_DropTable1" Sql=
"DROP TABLE Table1" ExecuteOnUnInstall=
"yes" />
</AppSecInc:AccessDatabase>
</Component>
<!-- save the database name for uninstall -->
<Component Id="AccessDatabaseMsiRegistry" Guid="9B3E538F-8C30-4c68-8C00-97B1FA14522A">
<RegistryKey Id="AccessDatabaseMsiRegistryKey" Root="HKLM" Key="Software\AppSecInc\AccessDatabaseMsi" Action="createAndRemoveOnUninstall">
<RegistryValue Id="AccessDatabaseMsiRegistryKey_Access_DATABASE_DBQ" Name="ACCESS_DATABASE_DBQ" Value="[ACCESS_DATABASE_DBQ]" Type="string" />
</RegistryKey>
</Component>