2011-11-03 29 views
1

我不是很精通ASP,但是这是我的客户的网站是用,所以我采取简单的出路。ASP Classic - 显示MSSQL2000存储过程的结果?

基本上,我试图显示从基于的值,我给一个存储过程的结果。应该有多个记录从SP返回,因此我不确定是否需要循环访问它们,或者是什么。

到目前为止,我有

set rst2 = server.createobject("ADODB.Recordset") 
rst2.open "exec zSProc_Name of SP " & resID,conL 

while not rst2.eof 
      Response.Write(rst2.Fields("fieldname1").value & ", ") 
      Response.Write(rst2.Fields("fieldname2").value & "<br />") 
      Response.Write(rst2.Fields("fieldname3").value & "<br />") 
      Response.Write(rst2.Fields("fieldname4").value & "<br />") 
     rst2.movenext 
     wend 

set rst2 = nothing 'Clear up memory used 
rst2.close 

任何人都可以澄清什么,我可能是错在这里干什么?

+0

我发现一个例子,但使用Oracle ...也许它可以帮助你以某种方式:http://support.microsoft.com/kb/229919 –

+0

我不知道问题是什么...你看到的你期望的结果?有没有错误? – 2011-11-04 12:15:20

回答

4

在调用Close之前,您正在分配Nothingrst2,这样会导致“..object not set”错误。交换线路来解决这个问题。

潜在您都可以从客户端发送来的页面数据resID。如果是这样,你使用字符串连接来创建一个SQL批处理是暴露该网站到SQL注入攻击。

相反,你应该使用ADODB.Command对象执行的,而不是构建SQL的SP。有关示例,请参阅KB164485

你正在写的字段值直接大部分时间会确定,但如果任何文本包含的字符,如<&将无法​​正常渲染。将值包装在Server.HTMLEncode方法中。

+0

有趣的是,如何调换两条线可以解决某些问题。并且很好地调用SQL攻击。虽然我没有从他们那里获取resID,但还有其他脚本可以从用户那里获得信息,所以我将使用这篇文章。 (rst2.Fields(“fieldname2”).Server.HTMLEncode(value)?or Response.Write(Server.HTMLEncode(rst2.Fields(“fieldname2”).value(012)( ) .... 再次感谢 – NarfFlarf

+0

@NarfFlarf:后者,我怀疑一个ADODB.Field对象有HTML编码的任何知识;) – AnthonyWJones

+0

LOL !!有时候逻辑再次入选,右手感谢安东尼?!?。 – NarfFlarf