Gå til innhold

stored procedure og asp.net


Anbefalte innlegg

Jeg utvikler i asp.net med språket C#. Jeg bruker Stored Procedures ved all databasekommunikasjon.

Det jeg lurer på er om dette er riktig måten det gjøres på. Jeg synes det blir vanvittig mye kode bare for å gjøre en enkelt spørring mot databasen. Her er et eksempel:

 

 

public static Boolean leggTilVare( <parameter1>, <parameter2> )

{

String connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

String dbProviderName = ConfigurationManager.ConnectionStrings["ConnectionString"].ProviderName;

DbProviderFactory factory = DbProviderFactories.GetFactory(dbProviderName);

DbConnection conn = factory.CreateConnection();

conn.ConnectionString = connectionString;

DbCommand comm = conn.CreateCommand();

comm.CommandType = CommandType.StoredProcedure;

 

comm.CommandText = "<navn på Stored Procedure>";

 

SqlParameter VareParameter = new SqlParameter("@KundeNr", System.Data.SqlDbType.NChar, 11);

VareParameter.Value = <parameter1>;

comm.Parameters.Add(VareParameter);

 

<det samme med parameter2>

 

int resultat = -1;

try

{

resultat = DBaccess.ExecuteNonQuery(comm);

}

catcj{}

return (resultat != -1);

 

}

 

 

 

 

 

 

 

 

 

 

 

}

Lenke til kommentar
Videoannonse
Annonse

Lag en egen klasse hvor du lager en eller flere generelle funksjoner for håndtering av databasekall. Så lager du heller nye funksjoner for hver unike stored procedure. Da slipper du i hvertfall 11 linjene hver gang.

Se også på eksempler på internett om hvordan du gjør parametersetting generell. Og jeg ville gjort all error handling i hver unike funksjon, heller enn å gjøre det i databasekallet.

 

Kirikiri

Lenke til kommentar

jeg har en stored procedure som returnerer enten 1 eller -1 :

IF EXISTS( <select commando > )
  BEGIN return 1 END
ELSE
  BEGIN return -1 END

 

 

og så prøver jeg i min C# kode å få tak i den returnerte verdien slik:

int value = Convert.ToInt32(command.ExecuteScalar());

 

problemet er at jeg bare får returverdien 0 uansett. Noen som ser hva som er galt?

Lenke til kommentar

SqlParameter svar = new SqlParameter();

svar.ParameterName = "@return_value";

svar.SqlDbType = SqlDbType.Int;

svar.Direction = ParameterDirection.ReturnValue;

command.Parameters.Add(svar);

command.ExecuteNonQuery();

int value = (int)command.Parameters["@return_value"].Value;

Lenke til kommentar
jeg har en stored procedure som returnerer enten 1 eller -1 :

IF EXISTS( <select commando > )
  BEGIN return 1 END
ELSE
  BEGIN return -1 END

 

 

og så prøver jeg i min C# kode å få tak i den returnerte verdien slik:

int value = Convert.ToInt32(command.ExecuteScalar());

 

problemet er at jeg bare får returverdien 0 uansett. Noen som ser hva som er galt?

6018751[/snapback]

PÅ denne må du nok bruke command.ExecuteNonQuery(), den vil gi deg returverdien fra prosedyren din :)

Lenke til kommentar

Problemet er at jeg bare får tak i returverdien om jeg først deklarerer en output variabel i den lagra prosedyren.

Jeg kan f.eks gjøre det slik:

 

IF EXISTS( select... )

BEGIN

SET @OK = 1

RETURN @OK

END

 

 

Men det er ikke det jeg ønsker.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...