2016-09-29 123 views
0

我正在使用旧的经典ASP网站,并遇到问题。我可以查询数据库表,但不是视图。无法查询SQL视图

在桌子下面的查询返回正确的行数:

Set rs = Server.CreateObject("ADODB.Recordset") 
sqlQuery = "SELECT * FROM tblContent;" 
rs.Open sqlQuery, conn, 1, 2 
response.write "q1 cnt = " & rs.RecordCount 

在视图上相同的查询返回-1

Set rs = Server.CreateObject("ADODB.Recordset") 
sqlQuery = "SELECT * FROM myView;" 
rs.Open sqlQuery, conn, 1, 2 
response.write "q2 cnt = " & rs.RecordCount 

两个查询返回正确的行数,如果从运行SQL Server Management Studio,但只有一个从.asp网页调用时才起作用。这同样适用于数据库中的所有表格和视图(我已经测试了每个表格的几十个)。

任何人都可以提供任何线索,这是怎么回事?

+1

一种可能的解决方法是在SQL级别对您的行进行计数。你可以把你的查询命令'SELECT COUNT(*)as myrecordcount FROM myView',并且你可以用rs(“myrecordcount”)显示这个值' – John

+0

@John:谢谢。我仍然对上述问题感到困惑,但是您的解决方法完全符合我的需求,所以如果您将其作为答案,我会接受它。干杯。 – Robert

+1

请注意,该视图的查询可能会*返回正确的行;它只是'.RecordCount'属性没有得到正确的值。所以另一个解决方法是将结果填入数组(使用'GetRows'),然后使用'UBound()'。 – Martha

回答

1

OK,这里是作为一个答案

这是一种解决方法我的评论,它并不能解释为什么recordcount属性不适用于视图,但可以使用SQL查询来计算行数,例如

Set rs = Server.CreateObject("ADODB.Recordset") 
sqlQuery = "SELECT COUNT(*) as myrecordcount FROM myView;" 
rs.Open sqlQuery, conn, 1, 2 
response.write "q2 cnt = " & rs("myrecordcount") 
-1

您正在请求可能在视图上失败的可编辑记录集。尝试打开默认只进只读的记录

rs.Open sqlQuery, conn, adOpenForwardOnly, adLockReadOnly 

rs.Open sqlQuery, conn, 0, 1 
+0

谢谢,但仍然返回-1。 – Robert

+3

“RecordCount属性将为只进游标返回-1(请参阅https://msdn.microsoft.com/de-de/library/ms676701(v=vs.85).aspx),所以请删除此错误-信息。 (最高选民应该感到羞愧) –