Avatar billede c-sharp Nybegynder
27. marts 2006 - 10:03 Der er 15 kommentarer og
2 løsninger

Hjælp til stored procedure

Er det muligt at modtage et resultset samt nogle enkelte værdier fra en stored procedure? hvis ja hvordan?
Avatar billede dr_chaos Nybegynder
27. marts 2006 - 10:04 #1
ja ved at bruge parametre og så definerer nogle outputs variabler.
Mener jeg :)
Avatar billede c-sharp Nybegynder
27. marts 2006 - 10:21 #2
Kan du prøve at give et eksempel på det?
Avatar billede ladyhawke Novice
27. marts 2006 - 10:28 #3
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnadvnet/html/vbnet09102002.asp

Her er en artikel om det, det er godt nok VB, men det skulle være til at oversætte
Avatar billede dr_chaos Nybegynder
27. marts 2006 - 10:32 #4
Her er et eksempel på en SP med begge dele:
CREATE PROCEDURE test
@Test1 int OUTPUT,
@Test2 varchar(50) OUTPUT
AS
BEGIN
  SELECT * FROM letter_template WHERE letter_template.letter_id= 250
SET @Test1 = 1224
SET @Test2 = 'wetwetwetew'
END
Avatar billede dr_chaos Nybegynder
27. marts 2006 - 10:34 #5
Her er en super artikel af arne om brugen af stored procedures :)
http://www.eksperten.dk/artikler/831
Avatar billede dr_chaos Nybegynder
27. marts 2006 - 10:42 #6
lidt simplificeret:

    SqlCommand cmd = new SqlCommand(
                "Test", conn);

        // 2. set the command object so it knows
        //    to execute a stored procedure
        cmd.CommandType = CommandType.StoredProcedure;

        // 3. add parameter to command, which
        //    will be passed to the stored procedure
        SqlParameter p = new SqlParameter("@Test1",SqlDbType.Int);
        p.Direction = ParameterDirection.Output;

          SqlParameter p1 = new SqlParameter("@Test1",SqlDbType.VarChar,50);
        p1.Direction = ParameterDirection.Output;

        cmd.Parameters.Add(p);
        cmd.Parameters.Add(p1);

        SqlDataReader rdr = cmd.ExecuteReader();
        Response.Write(cmd.Parameters["p"].Value);
        Response.Write(cmd.Parameters["p1"].Value);
Avatar billede arne_v Ekspert
28. marts 2006 - 01:42 #7
SqlParameter p1 = new SqlParameter("@Test2",SqlDbType.VarChar,50);
...
Response.Write(cmd.Parameters["@Test1"].Value);
Response.Write(cmd.Parameters["@Test2"].Value);

vil jeg tro
Avatar billede dr_chaos Nybegynder
28. marts 2006 - 08:02 #8
ja det har du ret i :)
Avatar billede c-sharp Nybegynder
28. marts 2006 - 11:02 #9
Men den skriver stadig ikke noget ud?
Avatar billede arne_v Ekspert
29. marts 2006 - 04:22 #10
meget mystisk

hvad indeholder cmd.Parameters["@Test1"].Value og cmd.Parameters["@Test2"].Value ?
Avatar billede arne_v Ekspert
29. marts 2006 - 04:24 #11
jeg har et komplet eksempel (console app) som jeg ved virker

CREATE PROCEDURE TEST_OUTRSRET
@outarg INTEGER OUTPUT
AS
SELECT @outarg = 123
SELECT * FROM T1
RETURN 456
GO

using System;
using System.Data;
using System.Data.SqlClient;

class MainClass
{
    public static void Main(string[] args)
    {
        SqlConnection con = new SqlConnection("server=ARNEPC2;Integrated Security=SSPI;database=Test");
        con.Open();
        SqlCommand cmd = new SqlCommand("TEST_OUTRSRET", con);
        cmd.CommandType = CommandType.StoredProcedure;
        SqlParameter prm = new SqlParameter("@outarg", SqlDbType.Int, 0, "outarg");
        prm.Direction = ParameterDirection.Output;
        cmd.Parameters.Add(prm);
        SqlParameter ret = new SqlParameter("@retval", SqlDbType.Int);
        ret.Direction = ParameterDirection.ReturnValue;
        cmd.Parameters.Add(ret);
        SqlDataReader rdr = cmd.ExecuteReader();
        while(rdr.Read())
        {
            Console.WriteLine(rdr[0] + " " + rdr[1]);
        }
        rdr.Close();
        Console.WriteLine((int)cmd.Parameters["@outarg"].Value);
        Console.WriteLine((int)cmd.Parameters["@retval"].Value);
        con.Close();
    }
}
Avatar billede c-sharp Nybegynder
30. marts 2006 - 09:48 #12
Det virkede :-)

Så lige et sidste spørgsmål, er det muligt at modtage flere "reslutsets" fra samme stored procedure?
Avatar billede dr_chaos Nybegynder
30. marts 2006 - 10:22 #13
Ja men jeg ved ikke om du kan med en reader men hvis det ryger i et dataset kan du bruge

Dataset.Tables[index]
Avatar billede c-sharp Nybegynder
30. marts 2006 - 11:10 #14
Det er super, mange tak for hjælpen.
dr_chaos og arne_v smid svar så er der point.
Avatar billede dr_chaos Nybegynder
30. marts 2006 - 11:21 #15
svar :)
Avatar billede arne_v Ekspert
30. marts 2006 - 13:57 #16
.
Avatar billede arne_v Ekspert
30. marts 2006 - 14:02 #17
ja

også med reader

der er en metode til at swicthe readeren til næste result set !
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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