Avatar billede torotune Nybegynder
22. juni 2005 - 00:36 Der er 14 kommentarer og
1 løsning

Problemer med 2 connections

Hej. Jeg har lige et problem med at jeg kommer til at lave flere connections samtidig. I dette eksempel vælger jeg top ti navne ud i ObjDataReader("Navn"). Hver gang et navn bliver hentet ud, skal kolonnen "Visning" tælle én op for de navne der er udtrukket, i tabellen bruger.   

Men jeg får et problem med at have både SELECT og UPDATE kørende samtidigt, da der ikke kan skabes en ny connection før den anden er lukket. Er det en molbo-agtig måde jeg gør det på? Kan det gøres smartere? 

strSQL = "SELECT TOP 10 Navn FROM Bruger;"
'her kommer nogle WHERE-kriterier

objComm = New OleDbCommand(strSQL, objConn)
objDataReader = objComm.ExecuteReader()               

Do While objDataReader.Read = True               
                   
StrSql = "UPDATE Bruger SET [Bruger.Visning] = [Bruger.Visning]+1 WHERE Bruger.Navn = '" & ObjDataReader("Navn") & "';"   
       
objComm = New OleDbCommand(strSQL, objConn)
objDataReader = objComm.ExecuteReader()

Loop
Avatar billede skwat Praktikant
22. juni 2005 - 01:00 #1
Når du har en åben datareader på en forbindelse er den låst. Du kommer til at gemme ObjDataReader("Navn") i en arraylist el. for efter du kan lukke din reader loop igennem en gang til
Avatar billede torotune Nybegynder
22. juni 2005 - 01:52 #2
Okay, jeg har en nogenlunde idé om hvordan jeg evt. kan sætte Arraylisten ind..  Hvordan looper jeg dens poster igennem en gang til med min Reader?
Avatar billede arne_v Ekspert
22. juni 2005 - 07:11 #3
hvis du ikke vil bøvle med ArrayList så brug 2 connections:

strSQL = "SELECT TOP 10 Navn FROM Bruger;"
'her kommer nogle WHERE-kriterier

objComm = New OleDbCommand(strSQL, objConn)
objDataReader = objComm.ExecuteReader()             

Do While objDataReader.Read = True             
                 
    StrSql = "UPDATE Bruger SET [Bruger.Visning] = [Bruger.Visning]+1 WHERE Bruger.Navn = '" & ObjDataReader("Navn") & "';" 
     
    objComm = New OleDbCommand(strSQL, objAnotherConn)
    objAnotherConn.ExecuteNonQuery()

Loop
Avatar billede pfp Nybegynder
22. juni 2005 - 16:00 #4
skwat -> Låses selve databasen, eller bare den instans af forbindelsen man oprettet?
Avatar billede arne_v Ekspert
22. juni 2005 - 16:44 #5
kun connection
Avatar billede torotune Nybegynder
22. juni 2005 - 18:33 #6
Okay på den måde.. Men hvad gør.ExecuteNonQuery() ? Den har jeg ikke decleared.
Avatar billede torotune Nybegynder
22. juni 2005 - 18:33 #7
declared.
Avatar billede arne_v Ekspert
22. juni 2005 - 18:35 #8
ExecuteNonQuery

udfører SQL sætninger som ikke er SELECT
Avatar billede torotune Nybegynder
22. juni 2005 - 18:43 #9
Ah okay. Hvad skal jeg declarere den som?
Avatar billede torotune Nybegynder
22. juni 2005 - 22:23 #10
Det er fordi 'ExecuteNonQuery' is not a member of 'System.Data.OleDb.OleDbConnection'
Avatar billede torotune Nybegynder
22. juni 2005 - 22:45 #11
Okay, jeg tror jeg har det til at virke nu. Skal simpelhen bare lave en hel ny connection med sti til databasen og det hele
Avatar billede arne_v Ekspert
23. juni 2005 - 13:28 #12
sorry - jeg er en spade

ExecuteNoNQuery skal kaldes på Command ikke på Connection

men det fandt du vel ud af
Avatar billede arne_v Ekspert
23. juni 2005 - 13:28 #13
og ja - hele pointen er en seperat connection til UPDATE
Avatar billede arne_v Ekspert
23. juni 2005 - 13:28 #14
og et svar
Avatar billede torotune Nybegynder
27. juni 2005 - 02:42 #15
Jep. Jeg fandt ud af det :-) Her er points...
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