2010-07-15 97 views
1

在遠程數據庫執行SqlScript執行SqlScript導致錯誤:WiX的問題與遠程數據庫

無法連接到SQL數據庫。 (-2147467259 MYDB1)

的SqlScript如下:

<sql:SqlString 
Id='UpdateSomething1' 
SqlDb='myDB1' 
ExecuteOnInstall='yes' 
User='SQLUser' 
ContinueOnError='no' 
ExecuteOnReinstall='no' 
ExecuteOnUninstall='no' 
Sequence='26' 
SQL='[SqlString]'/> 

其中Db的是:

<sql:SqlDatabase 
Id='myDB1' 
Database='myDB1' 
Server='[DATABASE_SERVER]' 
CreateOnInstall='yes' 
DropOnInstall='no' 
DropOnUninstall='no' 
ContinueOnError='no'/> 

並且用戶是:

<util:User 
Id="SQLUser" 
Name="myUserName1" 
Password="password1"/> 

問題確實不會在本地數據庫中發生。 我們從IP流量(實際誤差遠程MSSQL服務器拋出)提取更具體的錯誤消息:

Can not open database "myDb1" requested by the login. The login failed. {remote machine name} Login failed for user {user name}

謝謝你的任何幫助和信息。

最大

回答

0

我需要更多的信息,以確保但這裏有一些一般性的意見我已經在過去幾年。

在MSI中,您通常運行沒有模擬的延遲自定義操作,以便它們以管理員身份運行以支持託管/升級安裝,因爲調用用戶沒有管理員,或者因爲他們確實沒有或者因爲UAC沒有提升了他們的流程

在InstallShield中,我確信WiX是類似的,這通常會導致遠程數據庫連接出現問題。如果在UI序列中有一個對話框來測試連接,它將會成功(如果需要),因爲交互式用戶對該數據庫/實例有權限。如果在本地安裝,它將成功,因爲SYSTEM(通常)具有數據庫/實例的權限。但是,當安裝到遠程實例時,它會經常失敗,因爲SYSTEM無法對遠程計算機上的SQL進行身份驗證。如果使用sql認證(例如SA),您的里程將會提高。

就我個人而言,我有一些我遵循的做法。如果我正在創建單層系統,我將數據庫限制爲(本地)。如果我創建了2層系統,我創建了兩個安裝程序:一個用於我的數據庫層,我限制爲(本地),另一個用於我的應用程序層,然後重新使用sqllogin對話框驗證連接並將值寫入web.config或app.config。這允許我鬆散地耦合這些層並且相互獨立地服務它們。

我希望這有助於瞭解可能遇到的問題類型。沒有看到你的環境,我不知道你確切的問題。

0

WiX自定義操作僅使用標準OLEDB命令連接到遠程服務器。如果憑證可以在本地使用,但不能遠程使用,那麼我會首先確保憑據是正確的。本地和遠程服務器之間的WiX自定義操作沒有任何不同。

0

看着你的數據庫元素我會說你沒有將用戶屬性添加到sql:SqlDatabase,所以它正在創建模擬當前用戶的數據庫。

嘗試:

<sql:SqlDatabase 
    Id='myDB1' 
    Database='myDB1' 
    Server='[DATABASE_SERVER]' 
    User='SQLUser' 
    CreateOnInstall='yes' 
    DropOnInstall='no' 
    DropOnUninstall='no' 
    ContinueOnError='no' /> 
+0

這並假定你作爲一個組件安裝它! – Void 2014-08-29 08:43:23