UPDATE:Wix - SQL parentesi quadre in file binari
Mentre le risposte di seguito funzionano come soluzioni alternative, vorrei dire che il mio metodo iniziale fa nel lavoro fatto. Dopo aver esaminato le risposte di seguito, ho scoperto che la mia chiamata Session.Log() in realtà stava eliminando [...] quando veniva pubblicata nel file di registro. Le parentesi quadre sono rimaste nel mio SQL mentre le ho inserite nell'oggetto SQLCommand. Il mio problema in realtà era che l'SQL (di cui ho pubblicato solo le prime poche righe) aveva 'GO in esso, che non sono comandi SQL. Una volta che ho risolto il problema tutto ha funzionato :)
* (Un ricordo, la pubblicazione di quante più informazioni possibile, è sempre utile: D)
In Wix, ho file SQL memorizzata in elementi binari
<Binary Id="SQLStep1" SourceFile="SourceDir\Step1_SQL_Build.sql"></Binary>
<Binary Id="SQLStep2a" SourceFile="SourceDir\Step2a_SQL_Build.sql"></Binary>
<Binary Id="SQLStep2b" SourceFile="SourceDir\Step2b_SQL_Build_sp_iv6Login.sql"></Binary>
<Binary Id="SQLStep2c" SourceFile="SourceDir\Step2c_SQL_Grant.sql"></Binary>
ho quindi utilizzare un'azione personalizzata per tirare lo sql fuori dalla tabella di binario, e la stringa-sostituire il nome del database (fornito da una casella di testo nel programma di installazione)
private static string ReplaceDBName(Session session, string binaryKeyName)
{
View v = session.Database.OpenView("SELECT Data FROM Binary WHERE Name = '{0}'", binaryKeyName);
v.Execute();
Record r = v.Fetch();
using (StreamReader reader = new StreamReader(r.GetStream("Data")))
{
string text = reader.ReadToEnd();
text = text.Replace(@"DB_NAME", session["DATABASE_NAME"]);
session.Log("Running SQL: " + text);
return text;
}
}
01.235.
un'istruzione SQL esempio è come questo:
USE [master]
GO
/****** Object: Database [DB_NAME] Script Date: 02/23/2010 15:02:47 ******/
CREATE DATABASE [DB_NAME] COLLATE SQL_Latin1_General_CP1_CI_AS
GO
Tuttavia, la stringa esco tavolo del 'binario' sembra tirare fuori tutto il contenuto [...] come se fossero proprietà WiX, così Sono rimasto con
C'è una bandiera che posso impostare per fare in modo che WiX non pensi che la sintassi SQL sia Proprietà WiX?
Come una parte pensava, per la parte di registrazione del problema, è possibile memorizzare i contenuti che si desidera registrare in una proprietà. E poi, facoltativamente, registra una stringa che fa riferimento alla proprietà, ma poiché i log dettagliati già registrano i valori delle proprietà, puoi probabilmente saltare quella parte. –