2016-08-18 2 views
3

Ich versuche, 4 Variablen aus einer gespeicherten Prozedur auf eine Seite in ASP.Net VB Script zurückzugeben. Es gibt nur das erste Ergebnis zurück und bricht dann. Meine Kenntnisse in SQL sind begrenzt. Ich habe folgendes versucht:Rückgabe mehrerer Werte aus gespeicherten SQL-Prozedur

SQL:

Alter PROCEDURE [dbo].[spDashboardPaymentRequests] 
@id integer 
AS 
SELECT COUNT(Receiptno) as requestsSent 
FROM [demofeepay3].[dbo].[vwallrequests] 
Where Orgid = @id 

SELECT Sum(totamount) as requestTotal 
FROM [demofee].[dbo].[vwallrequests] 
Where Orgid = @id 

SELECT Sum(totamount) as requestTotalPaid 
FROM [demofee].[dbo].[vwallrequests] 
Where Orgid = @id AND status = 'paid' 

SELECT Sum(totamount) as requestTotalUnpaid 
FROM [demo].[dbo].[vwallrequests] 
Where Orgid = @id AND status = 'unpaid' 

ASP.NET

Function RequestsSent() 
    Dim objCmd2 As sqlCommand 
    Dim objRdr2 As sqlDataReader 
    objCmd2 = New SqlCommand("spDashboardPaymentRequests", objConn) 
    objCmd2.CommandType = CommandType.StoredProcedure 
    objCmd2.Parameters.AddWithValue("@orgid", Session("orgid")) 
    objConn.Open() 
    objRdr2 = objCmd2.ExecuteReader 
    objRdr2.Read() 
    Session("RequestsSent") = objRdr2("requestsSent") 
    Session("RequestsTotal") = objRdr2("requestTotal") 
    Session("RequestsTotalPaid") = objRdr2("requestTotalPaid") 
    Session("RequestsTotalUnpaid") = objRdr2("requestTotalUnpaid") 
    objConn.Close() 
End Function 
+0

Statt einer Funktion es sich um ein Verfahren zu machen, Sie sind nicht etwas Rückkehr . Deklariere einige Ausgabeparameter für deine Richtung und setze sie in SQL ... Auch diese sql kann in 1 Aussage reduziert werden. – Codexer

Antwort

5

Sie haben mehr select s, was bedeutet, mu Kleinere Ergebnis-Sets. Also muss man durch sie bewegen:

objRdr2.Read() 
Session("RequestsSent") = objRdr2("requestsSent") 

objRdr2.NextResult() 
objRdr2.Read() 
Session("RequestsTotal") = objRdr2("requestTotal") 

objRdr2.NextResult() 
objRdr2.Read() 
Session("RequestsTotalPaid") = objRdr2("requestTotalPaid") 

objRdr2.NextResult() 
objRdr2.Read() 
Session("RequestsTotalUnpaid") = objRdr2("requestTotalUnpaid") 

Oder können Sie die gespeicherten Prozeduren ändern ein resultset mit mehreren Spalten zurück:

Alter PROCEDURE [dbo].[spDashboardPaymentRequests] 
@id integer 
AS 
SELECT 
    (SELECT COUNT(Receiptno) FROM [demofeepay3].[dbo].[vwallrequests] Where Orgid = @id) 
    as requestsSent, 

    (SELECT Sum(totamount) FROM [demofee].[dbo].[vwallrequests] Where Orgid = @id) 
    as requestTotal, 

    (SELECT Sum(totamount) FROM [demofee].[dbo].[vwallrequests] Where Orgid = @id AND status = 'paid') 
    as requestTotalPaid, 

    (SELECT Sum(totamount) FROM [demo].[dbo].[vwallrequests] Where Orgid = @id AND status = 'unpaid') 
    as requestTotalUnpaid 
0

Ich weiß nicht, über asp, aber Sie wahrscheinlich tun, hier so eine Abfrage alle bekommen von ihnen als die gleichen Reihe, passen Sie die aSP-Code entsprechend:

SELECT COUNT(Receiptno) as requestsSent, 
     (SELECT Sum(totamount) 
     FROM [demofee].[dbo].[vwallrequests] 
     Where Orgid = @id) as requestTotal, 
     --Query 3, 
     --Query 4 
FROM [demofeepay3].[dbo].[vwallrequests] 
Where Orgid = @id 
+0

Prost Kumpel, werde versuchen, und lassen Sie es wissen :-) – Johnn5er

Verwandte Themen