[vb.net] rij toevoegen

Pagina: 1
Acties:

  • Tinuske
  • Registratie: September 2002
  • Laatst online: 08-02 20:43
Het lukt me niet om een rij toe te voegen in een tabel, wat doe ik fout ?

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim invoerveld As String
Dim invoerveld2 As String
Dim r As DataSet1.RTVtestRow
invoerveld = TextBox1.Text
invoerveld2 = DropDownList1.SelectedItem.Text
Label1.Text = invoerveld
Label2.Text = invoerveld2
r = DataSet11.RTVtest.NewRTVtestRow()
r.id = 1
r.opmerking = invoerveld
r.kanttekening = invoerveld2
SqlDataAdapter3.Update(DataSet11)

het sql statement:

'SqlInsertCommand3
'
Me.SqlInsertCommand3.CommandText = "INSERT INTO RTVtest(opmerking, kanttekening, id) VALUES (@opmerking, @kanttekenin" & _
"g, @id); SELECT opmerking, kanttekening, id FROM RTVtest WHERE (id = @id)"
Me.SqlInsertCommand3.Connection = Me.SqlConnection1
Me.SqlInsertCommand3.Parameters.Add(New System.Data.SqlClient.SqlParameter("@opmerking", System.Data.SqlDbType.VarChar, 1000, "opmerking"))
Me.SqlInsertCommand3.Parameters.Add(New System.Data.SqlClient.SqlParameter("@kanttekening", System.Data.SqlDbType.VarChar, 100, "kanttekening"))
Me.SqlInsertCommand3.Parameters.Add(New System.Data.SqlClient.SqlParameter("@id", System.Data.SqlDbType.Int, 4, "id"))

Ik krijg geen foutmelding als ik op de add knop druk, maar er wordt geen rij toegevoegd.
Wie weet de oplossing ?
Alvast bedankt!

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Heb je de InsertCommand property van je data-adapter goed gezet?
Daarnaast kan je ook [code] [/code] tags gebruiken om je code uit te lijnen.
Je moet je nieuwe row ook wel aan je datatable toevoegen.

Heb je trouwens zelf al wat gedebugged?

[ Voor 27% gewijzigd door whoami op 23-01-2004 16:26 ]

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Het is trouwens beter dat je enkel de gewijzigde rijen aan de Update() method van de DataAdapter meegeeft:

code:
1
2
myDataAdapter.Update (aDataSet.GetChanges());
aDataSet.AcceptChanges();

[ Voor 8% gewijzigd door whoami op 23-01-2004 16:32 ]

https://fgheysels.github.io/


  • Tinuske
  • Registratie: September 2002
  • Laatst online: 08-02 20:43
Bedankt voor je reactie.
Insertcommand property staat goed naar mijn weten.
je opmerking dat ik de nieuwe row aan de datatable moet toevoegen snap ik niet helemaal , ik denk dat daar de fout inzit.
Even mijn manier van denken :
r is hier een nieuwe rij van de dataset, die r vul ik met waardes
dan hoef ik toch alleen de nieuwe dataset (met nieuwe gevulde rij) toch maar te updaten ?
Wat zie ik over het hoofd?

Martijn

p.s. goede tip over het updaten van de dataset

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Je hebt een nieuwe rij gemaakt, maar die rij is -voor zover ik me herinner- niet toegevoegd aan je datatable.

Je zult dus nog dit moeten doen:
code:
1
myTable.Add(myRow);


bv:
code:
1
2
3
DataRow dr = myTable.NewRow();
....
myTable.Rows.Add(dr);

https://fgheysels.github.io/


  • Tinuske
  • Registratie: September 2002
  • Laatst online: 08-02 20:43
Snelle reactie -> dankjewel

Om wat duidelijkheid te geven laat ik hier even de update code zien om wat duidelijkheid te scheppen. Op een soortgelijke manier wil ik ook een rij toevoegen

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    Private Sub DataGrid1_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.UpdateCommand
        Dim loginname As String

        'Geeft de waarde van het veld dat geupdated wordt 
        Dim key As String = DataGrid1.DataKeys(e.Item.ItemIndex).ToString()
        Dim tb As TextBox

        'Retouneert de waarde in de 3e kolom
        tb = CType(e.Item.Cells(2).Controls(0), TextBox)
        loginname = tb.Text

        'Zoek de rij in de dataset die overeenkomt met de rij die de user heeft geupdate
        'de findbyuserid, geeft een referentie terug naar de rij.
        Dim r As DataSet1.IPUserRow
        r = DataSet11.IPUser.FindByUserId(key)
        ''Wijzig de dataset tabel
        r.LoginName = loginname
        ''Roep het sql statement aan om de database te updaten
        SqlDataAdapter1.Update(DataSet11)
        'Datagrid terug uit edit-mode
        DataGrid1.EditItemIndex = -1
        'Refesh(DataGrid)
        DataGrid1.DataBind()

    End Sub


Ik wil dus gewoon in de dataset een rij toevoegen en vervolgens de gewijzigde gegevens (dus edits, delete's en add's ) terugsturen naar de server.
Updaten gaat goed, alleen de overige 2 ben ik nu mee bezig en ik loop een beetje vast

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Wel, je hebt wel een nieuwe rij gemaakt, en daar de waarden enzo in gezet, maar, je moet die rij nog toevoegen aan je datatable vooraleer je die rij in je databank kunt gaan toevoegen.

Je moet die DataRow dus nog aan je DataTable toevoegen, vooraleer je de Update method van je DataAdapter aanspreekt:

code:
1
2
3
.....
myDataSet.Tables[0].Rows.Add (myNewDataRow);
myDataAdapter(myDataSet.GetChanges());

https://fgheysels.github.io/


  • Tinuske
  • Registratie: September 2002
  • Laatst online: 08-02 20:43
Ow okee, ik dacht dat ik de rij al toegevoegd had aan de dataset en dat voldoende was met :

code:
1
r = DataSet11.RTVtest.NewRTVtestRow()


Nu met jou regel code (die add regel) krijg ik de foutmelding :

This row already belongs to another table

Ik kijk even verder...
Pagina: 1