如何将来自不同公司域的两个用户发送到不同的SQL数据库以检索/存储数据?我使用Application变量来存储连接字符串,而Request.ServerVariables(“LOGON_USER”)变量是获取域名的有效方法。是否要修改GLOBAL.AsA文件?两个数据库中的表名完全相同,因此我认为根据用户域更改连接字符串应该可以解决问题。
具有域ABC的用户A - >应用程序(“ConnecttoDB”)发送到数据库A. 用户B与域XYZ - >应用程序(“ConnecttoDB”)发送到数据库B
我有大约900多个经典的ASP页面,所以我真的不想添加一堆IF-THEN来在每个页面中选择正确的数据库。所有的想法都非常感谢!
更新:为了简单起见我设想了一个单独的应用程序变量(即:ConnecttoDB)但是,每当不同的用户访问并改变页面结果时,它的价值是否会不断变化?
答案 0 :(得分:1)
您不能使用Application变量,因为它在所有用户之间共享。这将是一场竞争条件。相反,您需要使用Session object来存储连接,然后在需要连接到数据库时使用它。
myDB=Server.CreateObject("ADODB.Connection")
StrConn = Session("ConnecttoDB")
myDB.Open StrConn
答案 1 :(得分:0)
这是一种方法:
我猜你的网页代码隐藏文件的类在Page
类中。在ASP.net项目中创建一个继承Page
的新类文件。称之为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()在所有页面的上下文中都可用,并返回正确的连接字符串。此外,您只在一个地方拥有代码,因此如果您以后需要更改逻辑,则可以轻松完成。
答案 2 :(得分:0)
鉴于您使用的是经典ASP,您可以定义一个函数以在另一个.asp文件中返回相应的连接字符串,并使用#include
指令将其添加到您的所有页面。