tommy18 Skrevet 29. april 2006 Del Skrevet 29. april 2006 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
Kirikiri Skrevet 30. april 2006 Del Skrevet 30. april 2006 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
dude80 Skrevet 30. april 2006 Del Skrevet 30. april 2006 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
j000rn Skrevet 1. mai 2006 Del Skrevet 1. mai 2006 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
Manfred Skrevet 2. mai 2006 Del Skrevet 2. mai 2006 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
dude80 Skrevet 4. mai 2006 Del Skrevet 4. mai 2006 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå