Avatar billede page Nybegynder
04. marts 2012 - 12:27 Der er 13 kommentarer og
1 løsning

Indsæt fra arrailist til mysql

Hey,

Jeg forsøger at indsætte de afmærkede felter i en CheckBoxList i en Mysql tabel...

Men den vil ikke helt som jeg og jeg kan ikke se hvor det er kæde hopper fra.

Jeg laver en For løkke der går igennem listen, og en if sætning der begrænser det til at vælge de valgte felter.

For at se om den fanger noget har jeg sat en response.write ind, som skriver det korrekt ud.

Længden af arraylist: 5

KID: 1, og value: 8
KID: 1, og value: 9
KID: 1, og value: 2
KID: 1, og value: 3
KID: 1, og value: 7

Når jeg så indsætter en Try statement, så medtager den kun hver anden. Altså den indsætter kun
KID: 1, og value: 8
KID: 1, og value: 2
KID: 1, og value: 7

Hvis jeg indsætter en Response.Write i mit Try statement skriver den også kun hver anden ud.

Koden ser således ud:

for i=0 to chkTest.Items.Count-1
  if chkTest.Items(i).Selected then
  Dim strValue As String = chkTest.Items(i).Value
 
  Response.Write("KID: " + strLastPost + ", og value: " + strValue + "<br />")
               
    Try   
      conn.ConnectionString = myConnectionString
                       
      com.Connection = conn
      com.CommandText = "Insert Into _tblMix (" _
        & "SID, KID) values (" _
        & "'" & Replace(strValue, "'", "''") _
        & "', " _
        & "'" & Replace(strLastPost, "'", "''") _
        & "')"
                       
      conn.Open()   
      com.ExecuteNonQuery() 
      Catch ex As MySql.Data.MySqlClient.MySqlException   
      conn.close()
    End Try
  end if
next


Hvad er det jeg overser?

mvh
page
Avatar billede erikjacobsen Ekspert
04. marts 2012 - 12:39 #1
Jeg kan ikke se hvorfor den gør som beskrevet. Men jeg kan se at du vil åbne databaseforbindelsen for hver INSERT - det er overflødigt, og langsomt. Du kan åbne for FOR og lukke efter NEXT.
Avatar billede erikjacobsen Ekspert
04. marts 2012 - 12:40 #2
... åbne **før** FOR ...
Avatar billede page Nybegynder
04. marts 2012 - 12:49 #3
Hmm jeg forsøgte mig med følgende:

conn.ConnectionString = myConnectionString
                       
      com.Connection = conn
      com.CommandText = "Insert Into _tblMix (" _
        & "SID, KID) values (" _
        & "'" & Replace(strValue, "'", "''") _
        & "', " _
        & "'" & Replace(strLastPost, "'", "''") _
        & "')"
                       
      conn.Open()

for i=0 to chkTest.Items.Count-1
  if chkTest.Items(i).Selected then
  Dim strValue As String = chkTest.Items(i).Value
 
  Response.Write("KID: " + strLastPost + ", og value: " + strValue + "<br />")
               
    Try   
         
      com.ExecuteNonQuery() 
      Catch ex As MySql.Data.MySqlClient.MySqlException   
     
    End Try
  end if
next

conn.close()

Det indsætter så alle fem valgte,, hvilket er bedre end før, hvor det kun vra hver anden. Men den indsætter ikke strValue i min tabel...???
Avatar billede erikjacobsen Ekspert
04. marts 2012 - 12:51 #4
Din INSERT er forskellig for hver checkbox, og skal derfor laves inden i FOR-løkken. Det er forbindelsen, connection, du kun behøver have een gang.
Avatar billede page Nybegynder
04. marts 2012 - 13:07 #5
OK, tak det for det. Var ikke opmærksom på at den med fordel kunne ligges uden for FOR-løkken.

Men som du selv nævner, har det ingen indflydelse på hvorfor den kun medtager hver anden :(
Avatar billede erikjacobsen Ekspert
04. marts 2012 - 13:29 #6
Imellem
      Catch ex As MySql.Data.MySqlClient.MySqlException 
og   
      End Try
kunne du med fordel udskrive ex, i stedet for blot at ignorere en eventuel fejl. Så kan det være vi kan se hvad der er galt.
Avatar billede erikjacobsen Ekspert
04. marts 2012 - 13:31 #7
Men når den springer hver anden over, er det vel bare fordi du kun har sat kryds i hver anden checkbox.
Avatar billede page Nybegynder
04. marts 2012 - 20:08 #8
Jeg har sat kryds i fem ud af fem mulige checkboxe.. Så det er ikke det der er fejlen. Har prøvet alle kombinationer.
Hvis jeg kun kydser af i to boxe, så får jeg kun indsat en, hvis jeg krydser af i tre, får jeg to osv. :(


Jeg indsatte Response.Write(ex.message) som du foreslog og får følgende besked:

Not allowed to change the 'ConnectionString' property while the connection (state=Open).Not allowed to change the 'ConnectionString' property while the connection (state=Open).
Avatar billede erikjacobsen Ekspert
04. marts 2012 - 20:10 #9
Okay - men hvordan ser din kode så ud nu?
Avatar billede page Nybegynder
04. marts 2012 - 20:18 #10
Min kode ser nu sådan her ud:

com.Connection = conn

for i=0 to chkTest.Items.Count-1
  if chkTest.Items(i).Selected then
  Dim strValue As String = chkTest.Items(i).Value
 
  'Response.Write("KID: " + strLastPost + ", og value: " + strValue + "<br />")
               
    Try   
      conn.ConnectionString = myConnectionString
     
      com.CommandText = "Insert Into _tblMix (" _
        & "SID, KID) values (" _
        & "'" & Replace(strValue, "'", "''") _
        & "', " _
        & "'" & Replace(strLastPost, "'", "''") _
        & "')"
                       
      conn.Open()   
      com.ExecuteNonQuery() 
      Catch ex As MySql.Data.MySqlClient.MySqlException 
      response.write (ex.Message)

      conn.close()
    End Try
  end if
next
Avatar billede erikjacobsen Ekspert
04. marts 2012 - 20:36 #11
Flyt
  conn.ConnectionString = myConnectionString
og
  conn.Open()   
udenfor din for-løkke
Avatar billede page Nybegynder
04. marts 2012 - 20:45 #12
Fantastisk, det virker.

Jeg kan ikke helt forstå forskellen.. Troede egentligt at conn.open og conn.close begge skulle ligge inden for try statement??
Avatar billede erikjacobsen Ekspert
04. marts 2012 - 20:52 #13
Du kan se, at du ikke lavede en conn.close() for hver conn.open() - og det er en fejl. Dvs. du skal også se at få lavet den conn.close() efter din for-løkke.
Avatar billede page Nybegynder
03. maj 2012 - 09:17 #14
lukker
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
Kurser inden for grundlæggende programmering

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



IT-JOB