2016-09-29 66 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),所以請刪除此錯誤-信息。 (最高選民應該感到羞愧) –