Avatar billede c-sharp Nybegynder
11. maj 2005 - 14:14 Der er 7 kommentarer og
1 løsning

Modtage data fra Stored Procedure

Hvordan er det muligt at modtage et eller flere dataset fra en stored procedure?

Indtil nu har jeg kun kunne modtage enkelte værdier eks.

    SqlParameter [] arParms = new SqlParameter[2];

    arParms[0] = new SqlParameter("@aktiv", SqlDbType.Bit);
    arParms[0].Value = Convert.ToInt32(aktiv.Checked);

            // Output parameter
    arParms[6] = new SqlParameter("@underkatIdOut", SqlDbType.Int);
    arParms[6].Direction = ParameterDirection.Output;

    arParms[7] = new SqlParameter("@filnavnOut", SqlDbType.VarChar, 50);
    arParms[7].Direction = ParameterDirection.Output;

                SqlHelper.ExecuteNonQuery( connStr, CommandType.StoredProcedure, "indsaetUnderkategori", arParms);
    underkatId.Text = arParms[6].Value.ToString();
    filnavn = arParms[7].Value.ToString();
Avatar billede arne_v Ekspert
11. maj 2005 - 14:22 #1
et er bare ExecuteReader

eksempel:

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 arne_v Ekspert
11. maj 2005 - 14:22 #2
med flere skal man også kalde NextResult

eksempel:

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("getall", con);
        cmd.CommandType = CommandType.StoredProcedure;
        SqlDataReader rdr = cmd.ExecuteReader();
        Console.WriteLine("lige f1:");
        while(rdr.Read())
        {
            Console.WriteLine(rdr[0] + " " + rdr[1]);
        }
        rdr.NextResult();
        Console.WriteLine("ulige f1:");
        while(rdr.Read())
        {
            Console.WriteLine(rdr[0] + " " + rdr[1]);
        }
        rdr.Close();
        con.Close();
    }
}
Avatar billede arne_v Ekspert
11. maj 2005 - 14:23 #3
matchende SP'ere:

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





CREATE PROCEDURE getall AS

SELECT * FROM t1 WHERE f1 % 2 = 0

SELECT * FROM t1 WHERE f1 % 2 = 1

GO
Avatar billede c-sharp Nybegynder
12. maj 2005 - 06:23 #4
Super det var det jeg skulle brug, jeg har lige et lille tillægsspørgsmål.

Kan jeg modtage enkelte værdier samtidig med at jeg modtager et Dataset?
Avatar billede arne_v Ekspert
13. maj 2005 - 09:34 #5
det første eksempel har også en out parameter
Avatar billede arne_v Ekspert
13. maj 2005 - 09:35 #6
og et result set med kun en værdi kan jo hentes med ExecuteScalar
Avatar billede arne_v Ekspert
13. maj 2005 - 09:35 #7
og svar
Avatar billede c-sharp Nybegynder
17. maj 2005 - 10:36 #8
Jeg takker mange gange for hjælpen
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