Avatar billede mhedex Nybegynder
14. januar 2001 - 22:03 Der er 10 kommentarer og
1 løsning

Stored Procedure med parametre returnerer ikke recordset???

Jeg har lavet følgende Stored Procedure i MSSQL server 2000..

CREATE PROCEDURE stp_GetSubjects
(@strKeyword varchar(255), @strOrderBy varchar(255), @intMediaID integer)
AS
DECLARE @SQLString NVARCHAR(500)
set @SQLString = \"select ID, Title, Owner, MediaID, Link, DATEDIFF(hour, added, getdate())  as AgeInHours, Loaner,Added from Subject \"

If (@strKeyword <> null)
Begin
    set @SQLString = @SQLString + \"Where (Title LIKE \'%\"+@strKeyword+\"%\' OR Owner = \'\" + @strKeyword + \"\')\"
End

if (@intMediaID > -1)
Begin
    set @SQLString = @SQLString + \" AND (MediaID = \"+ CONVERT(varchar(255), @intMediaID) + \")\"
end

set @SQLString = @SQLString + \" Order By \" + @strOrderBy
exec sp_executesql @SQLString
GO

Når jeg kører den i Query Analyzer returnerer den det jeg vil ha\' - Men når jeg tilgår den fra VB eller ASP returnerer den ikke noget?? Således gi\'r et RecordCount i VB/ASP resultatet 0....? øv :-(

Hvis jeg i stedet for sjov genererer SQL strengen manuelt i stedet for runtime og smider den i SP\'en returnerer den faktisk det RecordSet jeg gerne vil ha\'.. Så jeg lurer på om det ikke er Exec\'en der laver puha??
Er jeg blevet tosset?

Avatar billede mhedex Nybegynder
14. januar 2001 - 22:04 #1
Ja - jeg ved godt det er mange point, men jeg bruger eksperten 2 gange om året - så mon ikke jeg holder til det (så kan det også være at jeg får et svar :-)
Avatar billede -mystiq- Nybegynder
14. januar 2001 - 22:25 #2
tjaaa det eneste jeg kan se der ser forkert ud er den her linie
exec sp_executesql @SQLString

men ok på den anden side er jeg jo heller ikk den store sql ekspert .........sååå deeeeeet....

-MystiQ-
Avatar billede mhedex Nybegynder
14. januar 2001 - 22:32 #3
Jo - finten er bare at exec sp_executesql @SQLstring sådan set virker (for den sags skyld kan man udelade sp_executesql - men jeg har læst et eller andet sted at det gi\'r bedre performance)
- Og så alligevel - kommandoen gi\'r ingen fejl - og returnerer det rigtige i Query Analyzer - men altså ikke i VB/ASP
Avatar billede ortrak Nybegynder
14. januar 2001 - 22:38 #4
må man se den streng hvorved du eksekverer din SP fra ASP/VB/QA...


/ortrak
Avatar billede hatecaps Nybegynder
14. januar 2001 - 22:42 #5
hvis du ellers gør alt på samme måde, kan det at du godt nok får noget tilbage fra QA, men ikke fra et skript tyde på at det er noget med rettighederne. Er du sikker på at alle har ret til at udføre SP\'en, og at alle kan læse i registeret ?
Avatar billede mhedex Nybegynder
14. januar 2001 - 22:44 #6
jep:

Sådan ser kaldet ud i qa:
stp_getsubjects \"star\", \"added desc\", 3

det bli\'r så til følgende kald:

select ID, Title, Owner, MediaID, Link, DATEDIFF(hour, added, getdate())  as
AgeInHours, Loaner,Added from Subject Where (Title LIKE \'%star%\' OR Owner =
\'star\') AND (MediaID = 3) Order By added desc

I VB gør jeg nogenlunde sådan (har fiflet lidt med forskellige cursortypes, men netop dette virker i hvert fald, hvis min stored procedure indeholder det reele kald)

Dim rstResult As ADODB.Recordset
Dim cnn As ADODB.Connection
Dim cmdGetSubjects As ADODB.Command
\'
\'
  Set cnn = CreateObject(\"ADODB.Connection\")
  Set rstResult = CreateObject(\"ADODB.Recordset\")

If Not IsNull(strKeyword) Then strKeyword = \"Null\"
If Not IsNull(strOrderBy) Then strOrderBy = \"Added Desc\"
If Not IsNumeric(intMediaID) Then intMediaID = -1
 
  cnn.Open sDatabase
  Set cmdGetSubjects = CreateObject(\"ADODB.Command\")
  With cmdGetSubjects
    Set .ActiveConnection = cnn
    .CommandType = adCmdStoredProc
    .CommandText = \"stp_GetSubjects\"
    .CommandTimeout = 3600
    .Parameters.Append cmdGetSubjects.CreateParameter(\"strKeyword\",
adVarChar, adParamInput, 255, strKeyword)
    .Parameters.Append cmdGetSubjects.CreateParameter(\"strOrderBy\",
adVarChar, adParamInput, 255, strOrderBy)
    .Parameters.Append cmdGetSubjects.CreateParameter(\"intMediaID\",
adInteger, adParamInput, 4, intMediaID)
  End With

    rstResult.CursorLocation = adUseClient

    rstResult.Open cmdGetSubjects, , adOpenStatic, adLockReadOnly

    Set GetSubjects = rstResult
   

    \' Dissociate Command from connection and close:
    Set cmdGetSubjects.ActiveConnection = Nothing

 
    \' Dissociate Recordset from connection then close and dereference the
connection:
  If rstResult.State = adStateOpen Then Set rstResult.ActiveConnection =
Nothing

    cnn.Close

    Set cnn = Nothing

 
  Set rstResult = Nothing
Avatar billede mhedex Nybegynder
14. januar 2001 - 22:45 #7
Mht. rettigheder, giver min Stored Procedure det korrekte resultat i VB hvis den i stedet for den RunTime genererede @SQLString indeholder det reelle kald - så rettighederne er i orden..
Avatar billede mhedex Nybegynder
14. januar 2001 - 22:45 #8
Jeg tror stadig selv at problemet ligger ved Exec - men kan ikke rigtigt lure hvorfor?
Avatar billede mhedex Nybegynder
15. januar 2001 - 00:04 #9
hmmmmm - Det kan også være at jeg er en KÆMPENAR... Som har skrevet:
If Not IsNull(strKeyword) Then strKeyword = \"Null\"
If Not IsNull(strOrderBy) Then strOrderBy = \"Added Desc\"

hvor der i virkeligheden skulle ha\' stået if IsNull...

Godnat og sov godt
Avatar billede -mystiq- Nybegynder
15. januar 2001 - 00:20 #10
looooool =)
Avatar billede mhedex Nybegynder
15. januar 2001 - 00:24 #11
Det er faktisk næsten sjovt... - hvis bare jeg ikke havde bokset med det i 4 timer og var ved at blive sindssyg ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester