【问题标题】:SQL and ASP HELP!SQL 和 ASP 帮助!
【发布时间】:2010-07-26 23:09:23
【问题描述】:

我在过去一周左右一直在编写这个脚本,但我在试图理解为什么它不能正常工作时遇到了重大问题。

我有一些复选框链接到电子邮件地址,我只需要相应的用户名与该电子邮件一起使用。此脚本适用于已注册不同时事通讯的用户。

这是我的代码

Set conn = Server.CreateObject("ADODB.Connection")
conn.open connStr

emails = Request("emaillist")

emails = Replace( emails, "'", "''" )
emails = Replace( emails, ", ", "','" )

strSQL = "SELECT name, email FROM emails WHERE email IN ('" & emails & "')"
Set rs = conn.Execute(strSQL)

namesAndEmails = rs.GetRows()
rs.close

for lnRowCounter = 0 To Ubound(namesAndEmails,2) 
For lnColumnCounter = 0 To Ubound(namesAndEmails,1)
Response.Write namesAndEmails(lnColumnCounter, lnRowCounter)
Response.write "</P>"
Next
Next

这是整个脚本的一部分,我对其进行了一些更改,并包含了 for...next 以进行调试。

现在的问题,如SELECT语句'name,email'所示,结果完全忽略了email,只给我名字。

我已经尝试直接使用 SQL 语句,它可以完美地同时显示姓名和电子邮件,但不能在我的 ASP 页面中显示。我什至尝试在它的位置放一个 *。

strSQL = "SELECT * FROM emails WHERE email IN ('" & emails & "')"

会从数据库中返回用户 ID、姓名和其他一些项目,但不会同时返回姓名和电子邮件,为什么?????

它是带有 SQL Server 数据库的 asp

问候

瑞克

测试结果

strSQL 设置为这样时的值:

SELECT name, email 
FROM emails 
WHERE email IN ('test@test.com','test1@test1.com') 

SQL中的这个会给我下面的答案

name | email 
jo   | test@test.com 
fred | test1@test1.com 

答案是

test@test.com 
test1@test1.com 

我不明白为什么在 SQL 中它会显示姓名和电子邮件,但在 ASP 中它只会显示电子邮件而不显示姓名。

我试过了

strSQL = "SELECT * FROM emails WHERE email IN ('test@test.com','test1@test1.com')

这将在 ASP 中产生除名称以外的所有结果!!!!!

【问题讨论】:

  • 您的 strSQL 作业中电子邮件的价值是什么?是否有多个(逗号分隔)电子邮件值?能否将emails 替换后提交给SQL Server 的SELECT 语句提供给我们。
  • 如果您尝试 'select name as SomeName , ....' 会发生什么(即给 name anothor fieldname )?
  • 你能告诉我们你的 emails 表的表定义(数据类型和列长度)吗?最简单的方法是在 SQL Management Studio 中右键单击表,将表编写为脚本,创建并粘贴到您的问题中。

标签: sql-server asp-classic


【解决方案1】:

我可能不完全理解这一点,但如果您只想输出一个姓名列表及其各自的电子邮件地址,您可以尝试简化为:

name = rs("name")
email = rs("email")

do while rs.eof <> true
    response.write(name & " " & email & "<br />")
    rs.movenext
loop

……至少用于测试目的。或者,您可以将 SQL 语句中的姓名和电子邮件连接成一列:

SELECT name + '|' + email as nameemail FROM emails WHERE email IN ('" & emails & "')

...将为您提供“姓名|电子邮件”,您可以轻松地进行字符串操作。

【讨论】:

  • 我同意。 GetRows() 有点奇怪。与使用 GetRows() 相比,使用循环可以更清楚地看到自己在做什么。
【解决方案2】:

我不是 100% 确定,但我猜你必须交换 ubound() 的 rank 参数

for lnRowCounter = 0 To Ubound(namesAndEmails,1)
For lnColumnCounter = 0 To Ubound(namesAndEmails,2)

【讨论】:

  • 感谢您的评论,我认为也是如此,但尝试后出现“超出范围”错误。
  • 好吧,我的回答是错误的,因为 Response.Write namesAndEmails(lnColumnCounter, lnRowCounter) 也交换了参数。因此,您应该首先期望 name 列中的所有名称,然后是 emails 列中的所有电子邮件。
【解决方案3】:

试试

For i = LBound(namesAndEmails, 2) To UBound(namesAndEmails , 2)
    Name = namesAndEmails(0, i)
    Email = namesAndEmails(1, i)
    Response.Write Name & " " & Email
Next

【讨论】:

    【解决方案4】:

    如果您“查看源”输出网页会怎样。有时我会遇到看不到的错误,因为它看起来像是一个无效标签,渲染器会默默忽略。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多