UPDATE:維克斯 - SQL方括號中的二進制文件
雖然答案下面做工作作爲替代解決方案,我想提一提,我最初的方法是實際可行的。在查看下面的答案之後,我發現Session.Log()調用實際上在發佈到日誌文件時剝離了它。當我將它提交到SQLCommand對象時,方括號仍保留在我的SQL中。我的問題是SQL(我只發佈了前幾行)中有'GO',它不是SQL命令。一旦我解決了這個問題一切工作:)
*(提醒一下,發佈儘可能多的信息可能總是有益的:d)
在維克斯,我已經存儲在二進制元素
SQL文件<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>
然後我用一個自定義操作拉出來的SQL二進制表,並串替換數據庫名稱(通過一個文本框,在安裝程序中提供)
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;
}
}
一個例子SQL語句是這樣的:
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
不過,我得到了「二進制」表的字符串似乎使出了渾身[...]內容,如他們WiX的屬性,所以我留下
USE
GO
/****** Object: Database Script Date: 02/23/2010 15:02:47 ******/
CREATE DATABASE COLLATE SQL_Latin1_General_CP1_CI_AS
GO
有一個標誌,我可以設置讓維克斯沒有想到的SQL語法是維克斯屬性?
作爲一個側面的想法,對於問題的日誌記錄部分,您可以存儲您想要登錄到屬性的內容。然後可以選擇記錄一個引用該屬性的字符串,但由於詳細日誌已經記錄了屬性值,因此可以跳過該部分。 –