12. marts 2002 - 19:48Der er
18 kommentarer og 2 løsninger
Forbindelse til database
Hejsa
Jeg er lige begyndt at kigge på ASP.NET (koder C#) og har nogen spørgsmål til hvordan man bedst forbinder til sin database (i mit tilfælde Oracle).
Hvilken måde er bedst at lave forbindelse til databasen? er det ved at åbne en forbindelse i global.asax og benytte den eller at åbne en ny forbindelse hver gang (og selvfølgelig huske at lukke igen) man skal bruge basen?
Håber der er nogen der har nogen gode forslag til hvordan jeg gør det bedst, meget gerne med eksempler.
ved bruk av .NET, så får man muligheten til å legge recordsets i minnet til serveren, såkalt disconnected recordset. Dette er et recordset som du fx. kan knytte mange klienter til, for på den måten å nettopp slippe for å åpne og lukke forbindelsen til db'en hele tiden.
En annen ting er at db forbindelse er rimelig optimert i .NET. JEg er ikke sikker på hvordan oracle er understøttet, men ved bruk av SQL Server så er iallefall connection pooling innebygget pr connection string, så man slipper nærmest å tenke på optimal db forbindelse.
Kikk litt i dokumentasjonen under 'ADO.NET', så får du gjerne svar på noen spørsmål...
Tak for de gode links, kendte et par af dem i forvejen :-)
Det jeg egentlig tænkte på, var hvordan man på den bedste måde opretter forbindelse til databasen - jeg finder det f.eks. ikke særlig hensigtsmæssigt at have følgende stående 20+ steder i ens applikation:
//Forbindelse til database const string strConn = "Provider=OraOLEDB.Oracle;Data Source=db_navn; User ID=XXX; Password=XXX"; OleDbConnection con = new OleDbConnection(strConn); con.Open();
con.Close();
Hvordan gør i det? - har i funktion i kalder hver gang eller kører jeres forbindelse til databasen som ApplikationsSession eller??
Du laver en application-variabel med din connectionstring, og så genbruger du denne. Så skal du kun ét sted (global.asax), ændre strengen. Dette er MÅDEN at gøre det på. Et alternativ som jeg udelukkende bruger, et at lave en DLL som står for AL kommunikation med databasen. Så er det kun i DLL'en det skal ændres. Du kan f.eks. oprette dit DLL objekt ved application-start, og derved holde forbindelsen åben (hvis du altså åbner forbindelsen i DLL-koden ved instantiering af objektet).
odegaard >>hmmm...skriver du ikke litt mot deg selv ?
<snip> Så skal du kun ét sted (global.asax), ændre strengen. Dette er MÅDEN at gøre det på </snip>
men allikevel skriver du at du utelukkende gjør noe annet. Hvorfor ?
Jeg er helt enig i å legge kommunikasjonslaget inn i en .dll og dette er også måten jeg gjør det på, men hvorfor motsier du seg selv ? Eller er det bare meg som misforstår ??
Nute: Det er MÅDEN, hvis man ikke ønsker at lave DLL'er :-)
Men stadig er det vel egentlig måden, eftersom man tit har et udviklingssite og et færdigt site (med hver sin connectionstring), og det ikke er fedt med to forskellige DLL'ere. Så hellere to forskellige web.config/global.asax
Jeg har bare ikke lige gidet finde ud af hvordan jeg får fat i session og application-variabler inde fra DLL'en. :-)
odegaard >> ahhh...så er vi enige :) Og det er også fornuftig å legge connection opplysninger i en ekstern konfigurasjonsfil, sånn at men ikke skal recompile hvis man skal legge noe på sitt live-site. Dette er også en måte jeg arbeider på.
wwwbolig >> kanskje denne lille "guide" kan hjelpe:
1) opprett en fil (Test.cs) og legg dette inn i den:
using System; namespace MyTest{ public class Test{ private String myString; public Test(){ myString = "Hei Hei"; }
public String getString(){ return myString; } } }
2) compiler filen med:
csc /target:library Test.cs
3) kopier Test.dll filen over i 'bin' katalogen under din webserver (hvis du ikke har denne katalog, så opretter du den bare.
4) opprett en vilkårlig .aspx fil og legg dette innhold i den:
<%@ Page Language="C#" Debug="true" %> <%@ import Namespace = "MyTest" %> <html> <head> </head> <body> <% Test t = new Test(); Response.Write( t.getString() ); %> </body> </html>
Er det ikke lidt overkill at lave en DLL-funktion til at retunere connectionstring ??!? Jeg forstår ikke hvorfor du vil igennem en DLL, når du ligeså godt kan bruge en application-variabel. Så slipper du både for compiling, en masse overflødig kode, og instantiering af objektet hver gang du skal bruge det.
Jeg forstår ikke helt hvor du vil igennem besværet med at lave en DLL der returnerer connectionstring. En application-variabel kan klare det samme, og det med 1½ linje kode. Og så slipper du også for at instantiere dit DLL objekt.
nja...en klasse som returnerer en SqlConnection er det jeg benytter. Hvor jeg får connectionstringen fra er jo forsåvidt likegyldig. Man kan jo bare lage en static metode som returnerer en Connection, så slipper man jo for instansiering...
Ja. En DLL har vel så vidt jeg ved intet med hjemmesider at gøre. Men der er vist en anden funktion man kan bruge (kan ikke lige huske hvilken, men den hedder noget med ".write" til sidst).
Joda...du kan benytte Response/Request inne i en .dll, du skal bare passe på å bruke det i en metode som eksekveres *etter* at 'Page' objektet er tilgjengelig
/nute
Synes godt om
Ny brugerNybegynder
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.