Avatar billede torotune Nybegynder
12. september 2006 - 12:51 Der er 9 kommentarer og
1 løsning

MS SQL - Flere jobs under én connection

Hej, er lidt i tvivl, er det muligt at udføre flere jobs under én connection og måske under samme command? Det vil sige uden at skulle til at lukke connection og danne ny command.

Eksempel:

Private Sub ReadOData(ByVal connectionString As String)
    Dim queryString As String = _
        "SELECT OrderID, CustomerID FROM dbo.Orders;"

    Using connection As New SqlConnection(connectionString)
        Dim command As New SqlCommand(queryString, connection)
        connection.Open()

        Dim reader As SqlDataReader = command.ExecuteReader()   
        While reader.Read()
          'Gør noget
        End While     
        reader.Close()

        'ny sql-querystring
        'nyt job
    End Using
End Sub

Venlig hilsen.
Avatar billede snepnet Nybegynder
12. september 2006 - 13:00 #1
ADO.NET 2.0 understøtter MARS (multiple active result sets), men hvis du bruger .NET Connection tror jeg ikke du har faciliteten - selvom om du bruger den i en 2.0 løsning (med mindre de her for nylig har lavet en 2.0 udgave).
Mvh
Avatar billede arne_v Ekspert
13. september 2006 - 04:28 #2
For:
  - god performance
  - god portabilitet mellem databaser
vil jeg anbefale:
  - åben 1 connection
  - udfør 1..N database operationer serielt (uden overlap) med et command
    objekt per operation og alle med samme connection
  - luk connection igen
for hver request fra client
Avatar billede torotune Nybegynder
13. september 2006 - 11:26 #3
Hej Snepnet,

Det lyder spændende med MARS - må jeg ind og kigge på, men foreløbig ville det være rart at kunne bruge det i min eksisterde kode ned alm. SqlConnection :-)

Hej Arne,

Hvordan ser 1..N databaseoperationer med et command
objekt per operation ud jf. ovenstående kode. Opretter jeg både et ny commandobjekt og en reader pr. operation?

Hvad betyder serielt uden overlap?
Avatar billede arne_v Ekspert
13. september 2006 - 15:45 #4
en command per operation og en reader per query (du skal ikke bruge reader til update)

at du closer en reader inden du laver en ny reader
Avatar billede torotune Nybegynder
14. september 2006 - 00:35 #5
Ok, men jeg er nødt til at give hver command og hver reader et nyt unikt navn under hver operation i samme connection? Jeg kan ikke bare instantiere et nyt objekt af i forvejen definerede?

Eks. hvis jeg på forhånd har defineret

Dim MyCmd as SqlCommand
Dim MyRs as SqlDataReader

Og så bruge dem igen og igen under samme connection - bare for at spare tid og kodeplads.
Avatar billede arne_v Ekspert
14. september 2006 - 01:28 #6
du kan godt genbruge dem

men du sparer ikke noget ved det - og jeg synes at det gør koden grimmere

Dim insUserCmd SqlCommand
Dim selCreatedId SqlCommand
Dim insRefCmd SqlCommand

giver sådan nogle associationer om hvad det drejer sig om
Avatar billede arne_v Ekspert
14. september 2006 - 01:29 #7
men altså vi er nu ovre i afdelingen for smag og behag
Avatar billede arne_v Ekspert
14. september 2006 - 01:29 #8
ups - der mangler 3 x As

men pointen er variabel navnene
Avatar billede torotune Nybegynder
18. september 2006 - 16:05 #9
okay - helt fint. Fik så det på plads. Tak for hjælpen og læg et svar :-)
Avatar billede arne_v Ekspert
18. september 2006 - 18:48 #10
svar
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