【问题标题】:SQL Query with "SET" output to ASP Classic [closed]带有“SET”输出到 ASP Classic 的 SQL 查询 [关闭]
【发布时间】:2016-03-11 13:06:07
【问题描述】:

我以前从未使用过这样的代码,并且不知道如何将代码输出到 asp 经典页面。 我尝试简单地调用 rs("theFile") 但是,这不起作用。 它正在破坏并给我一个错误。

这是要输出的代码,带有演示行。 我需要将代码以与在 SSMS 中输出相同的方式放在经典 ASP 页面中。

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
对象关闭时不允许操作。

谁能告诉我如何将此代码输出到经典 ASP。 谢谢你 韦恩

【问题讨论】:

  • 您提供的代码是纯SQL,没有经典的asp VBScript。您的错误消息意味着您尚未打开记录集对象。我认为您需要阅读有关如何使用 Classic ASP 与数据库对话的教程 - 这是一个。 4guysfromrolla.com/webtech/faq/Databases/faq4.shtml
  • John 3,对不起,我没有剩下的代码。我知道如何显示记录,而上面的代码,我只需要知道如何让它显示记录。即使使用代码中提供的记录,仍然会给出该错误。所以。关于如何获取此代码、显示记录的任何想法...
  • 您缺少来自If Not rsSongs.EOF ThenNot,此时If 语句只会在没有要显示的记录时进入“在此处显示记录”。 If Not 则相反,当 Recordset 未达到 EOF 时,您将“在此处显示记录”。如果记录集已达到 EOF(文件结尾),它将被关闭,因为没有记录可显示。
  • 那是一个错误类型的 Lankymart。代码的问题在于它不会显示记录,即使它们在那里,它也不会显示它们。使用 If rs.eof then,,,,, else..... end if.... 不起作用.....
  • 终于回到了这个问题上。瘦长的,这行得通,添加了 SET NOCOUNT ON。但是,它只返回一条记录,而且有很多条记录。我将如何使用 NextRecordSet。我以前从未使用过它,现在正在寻找有关它的信息。

标签: sql-server asp-classic


【解决方案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

谢谢你 韦恩

【讨论】:

  • 不,没关系,有很多类似的例子。
【解决方案2】:

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

EV_WikiConn.Open

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

【讨论】:

  • Hello Joel.... 第二段.... >> 带有演示行
  • EV_WikiConn 可以是连接字符串,在这种情况下,经典 ASP 会自行创建一个临时连接,并在后台打开它。这里的问题在其他地方。 (参见here:“如果您在将此属性设置为打开的连接对象或有效的连接字符串之前尝试在Command对象上调用Execute方法,则会发生错误。”)
  • 阴影。如果我用一个简单的查询替换 SQL 代码......从表中选择字段“........它运行没有问题,它只是不能使用这个 SQL 查询。连接已打开,只是没有使用这种类型的查询,如果我一起删除 if rsSongs.eof,那么我会在 rsSongs("theFile") 上收到错误,说它不存在。............我以前从未使用过这种类型的 SQL 查询,所以,我进入了新的领域。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多