2011-04-25 134 views
0

如何將來自不同公司域的兩個用戶發送到不同的SQL數據庫以檢索/存儲數據?我使用應用程序變量來存儲連接字符串,Request.ServerVariables(「LOGON_USER」)變量是獲取域名的有效方法。 GLOBAL.AsA文件是否被修改?這兩個數據庫中的表名完全相同,所以我認爲根據用戶域更改連接字符串應該有所裨益。不同用戶的連接字符串

用戶A與域ABC - >應用程序( 「ConnecttoDB」)發送到數據庫域XYZ甲 用戶B - >應用程序( 「ConnecttoDB」)發送到數據庫B

我有大致900+經典的ASP頁面,所以我真的不想添加一堆IF-THEN在每個頁面中選擇正確的數據庫。所有的想法都非常感謝!

更新:爲了使事情變得簡單,我構想了一個單一的應用程序變量(即:ConnecttoDB)但是,每當不同的用戶訪問並更改頁面結果時,它的值是否會不斷變化?

+0

我同意Global.asa是放置代碼的最佳位置。 – 2011-04-25 14:25:24

+0

那麼你的問題是什麼 – 2011-04-25 14:26:36

+0

如何將兩個來自不同公司域的用戶發送到不同的SQL數據庫來檢索/存儲數據? – Jorge 2011-04-25 14:30:24

回答

0

下面是做這件事的一種方法:

我猜你的類爲你的網頁代碼隱藏文件inheit的Page類。在繼承Page的ASP.net項目中創建一個新的類文件。稱它爲JorgePage。然後,讓你的代碼隱藏文件類繼承JorgePage

JorgePage,寫兩個功能:

private string getUsersDomain() 
{ 
     // returns the user's domain 
} 

protected string getUsersConnectionString() 
{ 
    switch (getUsersDomain().ToUpper()) 
    { 
     case "ABC": 
     return Application("ConnecttoDB_ABC"); 
     break; 
     case "xYZ": 
     return Application("ConnecttoDB_XYZ"); 
     break; 
    } 
} 

現在,功能getUsersConnectionString()是在所有頁面的上下文中可用,並返回正確的連接字符串。此外,你只有一個地方的代碼,所以如果你需要稍後改變邏輯,你可以輕鬆地做到這一點。

+0

我應該提到我使用的是經典的ASP。有沒有辦法堅持只有一個應用程序變量?我通常使用的代碼是這樣的: SQL = 「{一些SQL語法}」 組MYDB =的Server.CreateObject( 「ADODB.Connection」) 創建失敗=應用程序( 「ConnecttoDB」) myDB.Open創建失敗 – Jorge 2011-04-25 14:35:31

1

您無法使用應用程序變量,因爲它在所有用戶之間共享。這將是一個競爭條件。相反,您需要使用Session object來存儲連接,然後在需要連接到數據庫時使用該連接。

myDB=Server.CreateObject("ADODB.Connection") 
StrConn = Session("ConnecttoDB") 
myDB.Open StrConn 
+0

究竟!我對Application變量的範圍並不完全確定。謝謝你清理那個。 – Jorge 2011-04-25 15:15:46

0

假設你使用傳統的ASP,您可以定義一個函數返回相應的連接字符串中另一個.asp文件,並使用#include指令將其添加到您的所有網頁。