【问题标题】:Connection strings for different users不同用户的连接字符串
【发布时间】:2011-04-25 14:16:36
【问题描述】:

如何将来自不同公司域的两个用户发送到不同的 SQL 数据库以检索/存储数据?我使用应用程序变量来存储连接字符串,而 Request.ServerVariables("LOGON_USER") 变量是获取域名的有效方法。是否要修改 GLOBAL.AsA 文件?两个数据库中的表名完全相同,所以我认为根据用户域更改连接字符串应该可以解决问题。

域 ABC 的用户 A --> 应用程序(“ConnecttoDB”)发送到数据库 A 域 XYZ 的用户 B --> Application("ConnecttoDB") 发送到数据库 B

我有大约 900 多个经典 ASP 页面,所以我真的不想在每个页面中添加一堆 IF-THEN 来选择正确的数据库。非常感谢所有想法!

更新:为了简单起见,我设想一个单一的应用程序变量(即:ConnecttoDB)但是,每次不同的用户访问并更改页面结果时,它的值不会不断变化吗?

【问题讨论】:

  • 我同意 Global.asa 是放置代码的最佳位置。
  • 那么你的问题是什么
  • 如何将来自不同公司域的两个用户发送到不同的 SQL 数据库以检索/存储数据?
  • 我们回答了您的问题吗?请点击最佳答案旁边的复选标记,将此问题标记为已回答。

标签: sql string connection


【解决方案1】:

您不能使用应用程序变量,因为它在所有用户之间共享。这将是一个竞争条件。相反,您需要使用 Session object 来存储连接,然后在需要连接到数据库时使用它。

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

【讨论】:

  • 没错!我不完全确定 Application 变量的范围。感谢您清除它。
【解决方案2】:

这是一种方法:

我猜你的网页代码隐藏文件的类继承了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() 可在所有页面的上下文中使用,并返回正确的连接字符串。此外,您的代码只有一个地方,因此如果您以后需要更改逻辑,您可以轻松地做到这一点。

【讨论】:

  • 我应该提到我使用的是经典的 ASP。有没有办法只坚持一个应用程序变量?我通常使用的代码是这样的: sql="{some sql syntax}" set myDB=Server.CreateObject("ADODB.Connection") StrConn = Application("ConnecttoDB") myDB.Open StrConn
【解决方案3】:

鉴于您使用的是经典 ASP,您可以定义一个函数以在另一个 .asp 文件中返回适当的连接字符串,并使用 #include 指令将其添加到您的所有页面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    相关资源
    最近更新 更多