Avatar billede ylwen Nybegynder
26. oktober 2008 - 10:03 Der er 9 kommentarer og
2 løsninger

Stored procedure returnere ingen data

Jeg har en SP som skal hente max værdien og returnere denne.

USE [Marked]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[GetAnnonceId]


AS
BEGIN
Declare @MaxId Int

    SET NOCOUNT ON;

SELECT @MaxId = MAX(Id) FROM Advertisement
return @MaxId
END

jeg henter data fra SP med følgende kode

strConnection = System.Configuration.ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString
            sqlConn = New SqlConnection(strConnection)

            sqlCmd = New SqlCommand("EXEC GetAnnonceId", sqlConn)
            Try
                sqlConn.Open()
                SQLdr = sqlCmd.ExecuteReader()
                If SQLdr.HasRows = True Then
                    SQLdr.Read()
                    Label1.Text = SQLdr.Item("Id")
                End If

Men if sætningen bliver ikke kørt. Jeg har prøvet uden if. Så kører den alt igennem men der er ingen data i SQLdr?
Avatar billede ylwen Nybegynder
26. oktober 2008 - 10:10 #1
Label1.Text = SQLdr.Item("Id") skal selvfølgelig ændres til Label1.Text = SQLdr.Item("MaxId") men det ændre ikke noget.
Avatar billede HenrikSjang Nybegynder
26. oktober 2008 - 11:14 #2
Nu er jeg ikke lige ekspert på området med .NET vs SQL, men din stp laver en return-value som hedder @MaxId, og der hvor du prøver at mose resultatet ind i en Label, skriver du "SQLdr.Item("Id"). Jeg kan ikke se hvorfra .NET kan se hvad det er du forsøger at hente ud.

Da du laver en "..HasRows..", så vil jeg ikke tro at din sp skal lave en return-value, men derimod returnere én række med én kolonne. Prøv denne i stedet:

ALTER PROCEDURE [dbo].[GetAnnonceId]
AS
SELECT MAX(Id) AS Id FROM Advertisement
Avatar billede ylwen Nybegynder
26. oktober 2008 - 12:26 #3
Som jeg skrev kl 10:10, så havde jeg set fejlen med id og havde rettet den, men det hjalp ikke. Jeg har også prøvet med dit eksempel, hvilket heller ikke virker. Nu kører den godt nok if sætningen, men resultatet bliver en tom label1
Avatar billede hrc Mester
26. oktober 2008 - 12:38 #4
Kan det tænkes at det er fordi resultatet returneres i en variant-type? Jeg har oplevet (og derfor hader jeg dem), at hvis værdien f.eks. er taltegn ("12321" og dermed en streng), bliver det alligevel håndteret som et heltal. Derved er strengdelen i varianten er tom.

Er ikke .NET'ter men da det meget ligner det jeg arbejder med (et af Anders Hejlsbergs tidligere projekter) - kan du måske angive det eksplicit a la dette pseudokode Label1.Text = integer(SQLdr.Item("Id")).AsString;
Avatar billede HenrikSjang Nybegynder
26. oktober 2008 - 12:44 #5
Har du mulighed for at prøve at køre sp'en manuelt i en SQL Server Management Studio? Fejlen kan jo ligge 2 steder - enten i sp'en, eller i .NET koden. Og hvis sp'en fungerer, så er der nok mere hjælp at hente i .NET gruppen

Og det her er nok et rigtig dumt spørgsmål, men der ER data i tabellen ik'?
Avatar billede arne_v Ekspert
26. oktober 2008 - 16:32 #6
Øh.

Du kalder ExecuteReader som returnerer en DataReader - den bruges til at læse result set
med, men din SP returnerer ikke et result set men en retur værdi - du skal bruge
noget andet kode for at læse en retur værdi.

Jeg finder lige et eksempel.
Avatar billede arne_v Ekspert
26. oktober 2008 - 16:34 #7
Du skal bruge noget a la:

Dim cmd As SqlCommand = New SqlCommand("GetAnnonceId", con)
cmd.CommandType = CommandType.StoredProcedure
Dim ret As SqlParameter = New SqlParameter("@maxis", SqlDbType.Int)
ret.Direction = ParameterDirection.ReturnValue
cmd.Parameters.Add(ret)
cmd.ExecuteNonQuery
Dim maxid As Integer = CType(cmd.Parameters("@retval").Value, Integer)
Avatar billede ylwen Nybegynder
26. oktober 2008 - 19:09 #8
Jeg har fået det til at virke. Jeg prøvede at skrive tilbage herinde i eftermiddags, men min post er tilsyneladende forsvundet?

I SP skrev jeg SELECT MAX(Id) As MaxId FROM Advertisement
og på siden skrev jeg MaxId = SQLdr.Item("MaxId")

Det var sjang og hrc det fik løst problemet, så hvis i vil lægge et svar så får i point.
Beklager Arne v at jeg ikke har fået lukket tråden før du svarede.
Avatar billede hrc Mester
26. oktober 2008 - 19:24 #9
OK, men var min kommentar noget værd?
Avatar billede HenrikSjang Nybegynder
26. oktober 2008 - 19:30 #10
:)
Avatar billede ylwen Nybegynder
26. oktober 2008 - 23:22 #11
Ja, hrc, det var .AsString der fik mig på sporet. Tak for jeres hjælp
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