【发布时间】:2014-02-03 23:45:23
【问题描述】:
我真的不明白为什么 if 测试总是失败。我已经验证了会话变量 sCrs_cde(课程代码)是正确的,并且仅存在于 sql 查询返回的多条记录之一中。 (它是与年份和学期相关的外键的一部分)。我正在尝试为课程标题设置值,但它始终写为空值 ('')
Dim Recordset1
Dim Recordset1_cmd
Dim Recordset1_numRows
Set Recordset1_cmd = Server.CreateObject ("ADODB.Command")
Recordset1_cmd.ActiveConnection = MM_Jenz_STRING
Recordset1_cmd.CommandText = "SELECT ID_NUM, Crs_Title, YR_CDE, TRM_CDE, CRS_CDE, TRANSACTION_STS, SUBTERM_CDE FROM dbo.STUDENT_CRS_HIST WHERE ID_NUM = ? And Transaction_sts = 'C' "
Recordset1_cmd.Prepared = true
Recordset1_cmd.Parameters.Append Recordset1_cmd.CreateParameter("param1", 5, 1, -1, Recordset1__MMColParam) ' adDouble
Set Recordset1 = Recordset1_cmd.Execute
Recordset1_numRows = 0
%>
<%
Do While not Recordset1.Eof
response.write(Recordset1.Fields.Item("CRS_cde").Value)
IF (Recordset1.Fields.Item("CRS_cde").Value) = (Session("sCrs_cde")) THEN
Session("sCrs_Title") = (Recordset1.Fields.Item("CRS_Title").Value)
Session("sYr_cde") = (Recordset1.Fields.Item("YR_CDE").Value)
Session("sTrm_cde") = (Recordset1.Fields.Item("Trm_Cde").Value)
Session("sSubterm_cde") = (Recordset1.Fields.Item("Subterm_cde").Value)
EXIT Do
ELSE
Recordset1.movenext
END IF
Loop
【问题讨论】:
-
CRS_cde是什么数据类型?我会将 Session("sCRS_cde") 保存到一个变量中,确保它是相同的数据类型(整数),然后进行比较。如果您将整数与字符串进行比较,这可以解释您的问题
-
为什么在while循环之前有服务器标签(
%><%) -
@meda - 可能是剪切、复制和粘贴的结果。他正在关闭一个脚本块并在下一行打开另一个,这是不必要的,但实际上并没有错
-
你不能一起摆脱 if 语句并在 SQL 查询中使用 (Session("sCrs_cde") - SELECT ID_NUM, Crs_Title, YR_CDE, TRM_CDE, CRS_CDE, TRANSACTION_STS, SUBTERM_CDE FROM dbo .STUDENT_CRS_HIST WHERE CRS_CDE = "&Session("sCRS_cde")& " and ID_NUM = ? and Transaction_sts = 'C'
-
另外,这段代码显然是由 Dreamweaver 生成的。 Dreamweaver 的 ASP 数据库连接代码是可怕的。我建议您学习如何自己编写代码。 webcheatsheet.com/asp/database_connection.php
标签: sql asp-classic recordset