如何将提交的电子邮件域与域数组匹配并将其插入数据库? ASP 经典

How to match a submitted email domain with an array of domains and Insert it into a database? ASP CLASSIC

我正在努力解决 ASP 经典中的以下问题。

我在 ASP classic 中创建了一个表单,其中必须提供多个输入字段,并且在提交时输入字段应存储在 Microsoft SQL 数据库中。

然而,一个字段,公司,不能立即存储在数据库中table字段。数据库中的company字段是代表公司的char类型,比如company'Apple'等于字段值D0001,'Microsoft'等于D0002等等(别问我为什么要这样做,因为以前的人这样做过,我无法更改)。

在表单中,此人无法插入公司名称,因为这些名称是默认设置的,链接到它们的代码字符也是如此。为了在数据库中仍然获得正确的公司名称,我想将电子邮件的域与正确的公司匹配(因为公司的电子邮件域始终相同且无法更改)。

现在我可能有点不知所措,但我想知道最好的方法是什么?我正在考虑创建一个包含所有公司的电子邮件域的数组,并为它们指定正确的字符。然后当提交电子邮件时,我会像这样检查域:

EmailDomain = len(request.Form("EMail")) - InStrRev(request.Form("EMail"),"@")
EmailDomain = Right(request.Form("EMail"),EmailDomain)

(对于 person@company.com 这将导致 company.com)

然后我会将 EmailDomain 与正确的公司数组相匹配(例如数组 (5) 等于 comany.com)

然后可以将指向正确数组(例如 D0001)的数组值传输到 var 中并传递给数据库查询。

虽然我不知道这是否是正确的方法,因为我只是在大声思考。除此之外,我不知道如何使这个数组(在 foreach 中)与域匹配。是否有可能创建像 Company[0] = company.com --> D0001 这样的数组以及如何我会这样做吗?

一些指点将不胜感激!

提前致谢!

您可以使用 Dictionary 将键映射到值(即,将电子邮件域映射到公司代码):

Dim CompanyByDomain
Set CompanyByDomain = CreateObject("Scripting.Dictionary")

CompanyByDomain.Add "microsoft.com", "D0001"
CompanyByDomain.Add "apple.com", "D0002"
' and so on, maybe you want to use a DB query and a loop to fill the dictionary

字典建好后,就可以这样使用了:

Domain = LCase(SubstringAfter(Request.Form("EMail"), "@"))

If CompanyByDomain.Exists(Domain) Then
    CompanyCode = CompanyByDomain(Domain)
    ' insert record
Else
    ' show error
End If

其中 SubstringAfter() 是一个小辅助函数

Function SubstringAfter(str1, str2)
    Dim pos
    pos = InStr(str1, str2)
    If pos Then SubstringAfter = Mid(str1, pos + 1)
End Function

这是其中一种方法。其他想法:

  • 直接在数据库中查询公司代码ASP,不用建字典
  • 在 SQL 中构建适当的 INSERT 语句,从相关的 table 中获取公司代码并使用 ASP
  • 中的公司代码
  • 创建一个存储过程来完成 SQL 中的所有工作和必要的检查,以便 ASP 没有自己的业务逻辑,它所做的只是将表单字段作为参数传递给存储过程