SQL查询,“SET”输出到ASP Classic

时间:2016-03-05 03:02:04

标签: sql-server asp-classic

我之前从未使用过这样的代码,并且在如何将代码输出到asp经典页面时迷失了方向。 我试过简单地调用rs(“theFile”)然而,这不起作用。 它打破并给我一个错误。

这是带有演示线的代码输出。 我需要在经典ASP页面中将代码与SSMS中输出的代码相同。

Set sqlGetSong = Server.CreateObject("ADODB.Command")
sqlGetSong.ActiveConnection=EV_WikiConn
sqlGetSong.Prepared = true

sqlGetSong.commandtext = "DECLARE @seperator INT;" & vbCrLf & _
   "Declare @String nvarchar(max);" & vbCrLf & _
   "Declare @Tab TABLE (DT   VARCHAR(100));" & vbCrLf & _
   "set @String='File_Date_(Jan_21,_1976) / File_Date_(Mar_18,_1996) / File_Date_(Jan_22,_1983) / File_Date_(Jan_20,_1983) / File_Date_(Jan_14,_1976) / File_Date_(Jan_18,_1979) / File_Date_(Dec_18,_1979)';" & vbCrLf & _
   "WHILE (CHARINDEX('/', @String, 0) > 0) BEGIN" & vbCrLf & _
       "SET @seperator =   CHARINDEX('/', @String, 0);" & vbCrLf & _
       "INSERT INTO   @Tab (DT) SELECT RTRIM(LTRIM(SUBSTRING(@String, 0, @seperator)));" & vbCrLf & _
       "SET @String = STUFF(@String, 1, @seperator, '');" & vbCrLf & _
   "END" & vbCrLf & _
   "INSERT INTO   @Tab (DT) SELECT RTRIM(LTRIM(@String));" & vbCrLf & _ 
   "select DT as theFile from" & vbCrLf & _
       "(select right(REPLACE(DT,right(DT,7),''),2)DY, right(REPLACE(DT, ')',''), 4)YR, * from  @Tab) A" & vbCrLf & _
   "order by YR, DY;"

set rsSongs = sqlGetSong.execute
if rsSongs.eof then
    ' show records here
end if

这给我一个错误:

  

if rsSongs.eof then
  关闭对象时不允许操作。

有人可以告诉我如何将此代码输出到Classic ASP。 谢谢 韦恩

2 个答案:

答案 0 :(得分:1)

我已使用Lankymart提供的信息更新了代码。现在一切都很美妙。

Lankymart,如果您想获取此信息并将其作为您自己的信息,我会接受您作为答案。

Set sqlGetSong = Server.CreateObject("ADODB.Command")
sqlGetSong.ActiveConnection=EV_WikiConn
sqlGetSong.Prepared = true

sqlGetSong.commandtext = "SET NOCOUNT ON DECLARE @seperator INT;" & vbCrLf & _
   "Declare @String nvarchar(max);" & vbCrLf & _
   "Declare @Tab TABLE (DT   VARCHAR(100));" & vbCrLf & _
   "set @String='File_Date_(Jan_21,_1976) / File_Date_(Mar_18,_1996) / File_Date_(Jan_22,_1983) / File_Date_(Jan_20,_1983) / File_Date_(Jan_14,_1976) / File_Date_(Jan_18,_1979) / File_Date_(Dec_18,_1979)';" & vbCrLf & _
   "WHILE (CHARINDEX('/', @String, 0) > 0) BEGIN" & vbCrLf & _
       "SET @seperator =   CHARINDEX('/', @String, 0);" & vbCrLf & _
       "INSERT INTO   @Tab (DT) SELECT RTRIM(LTRIM(SUBSTRING(@String, 0, @seperator)));" & vbCrLf & _
       "SET @String = STUFF(@String, 1, @seperator, '');" & vbCrLf & _
   "END" & vbCrLf & _
   "INSERT INTO   @Tab (DT) SELECT RTRIM(LTRIM(@String));" & vbCrLf & _ 
   "select DT as theFile from" & vbCrLf & _
       "(select right(REPLACE(DT,right(DT,7),''),2)DY, right(REPLACE(DT, ')',''), 4)YR, * from  @Tab) A" & vbCrLf & _
   "order by YR, DY;"

set rsSongs = sqlGetSong.execute
while not rsSongs.eof%>
<%=rsSongs("theFile")%><br />
<%rsSongs.movenext
Wend
'set rsSongs = rsSongs.Nextrecordset ' was not needed

谢谢 韦恩

答案 1 :(得分:0)

您需要在使用记录集之前打开连接:

EV_WikiConn.Open

另外:这似乎是一种非常尴尬的方式来做一些简单的字符串操作。人们想知道为什么你在这里连接到数据库,这个数据可以按照正确的顺序硬编码到一个数组中。