Gå til innhold

stored procedure og asp.net


Anbefalte innlegg

Skrevet

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);

 

}

 

 

 

 

 

 

 

 

 

 

 

}

Videoannonse
Annonse
Skrevet

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

Skrevet

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?

Skrevet

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;

Skrevet
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 :)

Skrevet

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.

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...