Avatar billede kagehuset Nybegynder
10. august 2007 - 16:11 Der er 4 kommentarer og
1 løsning

Prioritering af database forbindelser

Hejsa

Jeg har et lille program der på baggrund af en række checkboxes genererer tilfældigt indhold til at smide ind i en Access database. Antal tabeller og indhold i disse varierer altså på baggrund af de valgte checkboxes. Tabellerne hægtes iøvrigt sammen via et id.
Det hele fungerer sådan set fint nok med mindre størrelser, men så snart man vil generere omkring 10000+ entries i 3+ forskellige tabeller så løbe jeg ind i en fejl.

Til hver tabel laves der en seperat forbindelse til databasen (ved godt det måske ikke er det mest optimale), så jeg går ud fra det simpelthen ikke går hurtigt nok med at oprette og fylde den første tabel før en anden forsøger at referere til den med et id der ikke eksisterer endnu.

Er der en måde at priorritere forbindelserne på så den ene ikke går igang før den anden er færdig?
Vil det evt. være en fordel at oprette hver enkelt databaseforbindelse i en tråd?

Håber det er til at forstå...

pft,
Mads
Avatar billede jens_klinting Nybegynder
10. august 2007 - 19:53 #1
Øh, nu ved jeg ikke om jeg har forstået dig korrekt. Men du ønsker vel netop ikke, at få dine oprettelser af data til at foregå parallelt, da det giver dig fejl med id'er, som ikke er oprettet endnu.

Så skal det ikke være:

Indsæt data i Tabel1
Indsæt data i Tabel2
Indsæt data i Tabel3
osv...

Så har du vel kun brug for én forbindelse til databasen, hvor du så indsætter tabellerne i rækkefølge.

Hvis det giver problemer med timeout, kan dette sættes på Command objektet.

Du skal forøvrigt være opmærksom på, at .NET bruger connection-pooling baseret på connectionstrengen, så når du opretter 3 connections med den samme connectionstreng, så kan du godt få den samme (hvis ikke den er åben selvfølgelig).

Mvh.
Jens
Avatar billede kagehuset Nybegynder
11. august 2007 - 09:29 #2
Helt korrekt forstået...
Hvis jeg sætter ind i tabeller i rækkefølge vil den så ikke bare fortsætte til den næste før den første er færdig stadigvæk?
Mht. connection-pooling - skal det så forståes som at .net bruger en allerede eksisterende connection hvis connectionstrengen er identisk med en der allerede er åben?

mvh
Mads
Avatar billede jens_klinting Nybegynder
11. august 2007 - 11:11 #3
Nej, hvis du benytter det samme connection object til at indsætte tabellerne, bliver de indsat i den rækkefølge de står i koden. Ingen magi eller tråd-fikumdik :o)

Så i pseudokode:

conn = Opret connection

Indsæt tabel (conn, Tabel1)
Indsæt tabel (conn, Tabel2)
Indsæt tabel (conn, Tabel3)

luk conn igen

Mht. til pooling, så nej. Den snupper ikke en tilfældig åben connection. Men når du lukker og disposer en connection, så nedlægges objektet ikke, men 'rengøres' og smides i en pool svarende til connectionstrengen. Når du så senere skal bruge en connection til samme connectionstreng, så ser den, om der er ledige objekter i poolen.

Du kan evt. læse mere om Connection Pooling i .NET her:

http://www.captator.dk/captator.aspx?article=109

Mvh.
Jens
Avatar billede kagehuset Nybegynder
11. august 2007 - 11:21 #4
OK fint fint - så vil jeg skrive lidt om så det hele bliver ordnet i en forbindelse i stedet for en til hver...tak for hjælpen! Du kan lige smide et svar hvis du vil have lidt point...

mvh
Mads
Avatar billede jens_klinting Nybegynder
11. august 2007 - 11:55 #5
:o)
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