When you call Update on the data adapter, it will iterate through the rows.
Update Command object. If it is marked as deleted, it will run the query
defined in the Delete Command object. If it is marked as Added, it will run
Robin S.
"Microsoft" <lee.clements.nospam@btopenworld.com> wrote in message
news:eG0LfsiRHHA.1860@TK2MSFTNGP06.phx.gbl...
> Thanks Kerry for the pointers on the combobox, I will look into this in
> the future once I have the basic data stuff sorted. I have come a little
> bit unstuck actually, I have modified my SaveChanges proc to reflect the
> new Update command and its parameters, but I am a bit lost in actually
> performing the update. I have multiple rows that have been modified so do
> I have to execute the DataAdapter.Update(x,x) multiple times for each
> row?
>
> The code I have so far is :-
>
> Private Sub SaveChanges()
> Dim UpdateStaffCmd As New OleDb.OleDbCommand
> Dim lngRetVal As Long
> Dim dsChanges As DataSet
> Dim dtTable As DataTable
> Dim myDataRow As DataRow
>
> ' create a parameterized query to perform the update
> UpdateStaffCmd.CommandType = CommandType.Text
>
> ' the '?' represent the parameters
> UpdateStaffCmd.CommandText = "Update tblStaff Set staff_id = ?,
> staff_initials = ?, staff_name = ?, staff_title = ?, staff_active = ?,
> staff_office_id = ? WHERE staff_id = ?"
>
> ' add the parameters in the same order as indicated the commandtext
> UpdateStaffCmd.Parameters.Add("staff_id", OleDb.OleDbType.Integer, 4)
> UpdateStaffCmd.Parameters.Add("staff_initials", OleDb.OleDbType.VarChar,
> 4)
> UpdateStaffCmd.Parameters.Add("staff_nane", OleDb.OleDbType.VarChar, 50)
> UpdateStaffCmd.Parameters.Add("staff_title", OleDb.OleDbType.VarChar, 50)
> UpdateStaffCmd.Parameters.Add("staff_active", OleDb.OleDbType.Binary)
>
> ' The datagrid would display LONDON but the ID value is actually 1, so do
> I need another datatable to hold this information and use a datarelation
> object? this is much harder than the old ADO!!!
> UpdateStaffCmd.Parameters.Add("staff_office_id", OleDb.OleDbType.Integer)
>
> ' assign the update command to the data adapter
> daStaff.UpdateCommand = UpdateStaffCmd
>
> ' get the changed datarows and store in new dataset
> dsChanges = dsStaff.GetChanges(DataRowState.Modified)
>
> ' get the datatable so that I can access the datarow
> dtTable = dsChanges.Tables("Staff")
>
> For Each myDataRow In dtTable.Rows
> Console.WriteLine(myDataRow.Item)
> Next
>
> lngRetVal = daStaff.Update(dsChanges, "Staff")
>
> If lngRetVal > 0 Then
> dsStaff.AcceptChanges()
> End If
>
> End Sub
>
>
> Sorry - this probably seems very trivial, but I cannot seem to find a
> comprehensive example in any documentation, just bits and pieces which I
> am trying to tie together. At least I am learning how to do it properly.
> I am reading an article on Data concurrency at the minute, very
> interesting - not something I had even considered yet. Oh boy - its going
> to be a long night.
>
> Thank you all for any assistance.
> Lee
>
>
>
> "Kerry Moorman" <KerryMoorman@discussions.microsoft.com> wrote in message
> news:9DC8D049-F072-44C4-8271-A92CFADBA983@microsoft.com...
>> Lee,
>>
>> Here is some information on placing a combobox into a datagrid in .Net
>> 1.1:
>>
>>
http://www.syncfusion.com/FAQ/WindowsForms/FAQ_c44c.aspx#q480q >>
>> Also, keep in mind that the code that Robin showed you does not handle
>> concurrency issues. If your program will be used by multiple users all
>> hitting a central database then you must deal with concurrency in your
>> SQL
>> update and delete statements.
>>
>> Kerry Moorman
>>
>>
>> "Microsoft" wrote:
>>
>>> Yes I think I undestand where your coming from, effectively I need to
>>> create
>>> a new parameterized query for the update and insert command which is
>>> then
>>> assigned to the dataadapter.
>>>
>>> I have found some articles on doing this so I will have a play around
>>> with
>>> it. The other problem I've recognised in doing this is that ideally I
>>> need a
>>> combobox in the dataqgrid for the user to select from the fields in the
>>> other table - which isn't supported with the datagrid in 1.1, not sure
>>> about
>>> 2.0. I will get to this later, for now I will concentrate on getting
>>> the
>>> updates working.
>>>
>>> Thanks for your help.
>>> Lee
>>>
>>>
>>> "RobinS" <RobinS@NoSpam.yah.none> wrote in message
>>> news:DIednU8aQKZ3h1zYnZ2dnUVZ_r-onZ2d@comcast.com...
>>> > First of all, be aware that the CommandBuilder is only effective for
>>> > really simple updates, like if you have a list of fields with a
>>> > primary
>>> > key.
>>> >
>>> > You can *not* do updates using the CommandBuilder if you have a join
>>> > in
>>> > your SQL statement.
>>> >
>>> > You will have to write your own SQL for the update, insert, and
>>> > delete
>>> > commands, so they update only the one table.
>>> >
>>> > Example:
>>> >
>>> > Update tblStaff Set staff_id = ?, staff_initials = ?, staff_name = ?,
>>> > staff_title = ?, staff_active = ? WHERE staff_id = ?
>>> >
>>> > and then add parameters for those (in that order) from the data row
>>> > in
>>> > your dataset.
>>> >
>>> > Does that make sense?
>>> >
>>> > Robin S.
>>> > -------------------------------------
>>> > "Microsoft" <lee.clements.nospam@btopenworld.com> wrote in message
>>> > news:%2380X%23$VRHHA.4448@TK2MSFTNGP04.phx.gbl...
>>> >> Hi everyone,
>>> >>
>>> >> Before I begin I should point out that I am quite new to programming
>>> >> and
>>> >> VB.net and am using VS2003 with SQLExpress 2005.
>>> >>
>>> >> I have two data tables a staff table and an office table, the
>>> >> linking
>>> >> field is office_id. I have created a form and added a datagrid, when
>>> >> the
>>> >> form loads I create a new DataAdapter, Connection and DataSet and
>>> >> select
>>> >> the records from the staff table linking with the office table to
>>> >> display
>>> >> the office name rather than the ID.
>>> >>
>>> >> Private Sub frmStaff_Load(ByVal sender As System.Object, ByVal e As
>>> >> System.EventArgs) Handles MyBase.Load
>>> >>
>>> >> Dim dcConn as New OleDB.OleDbConnection("Integrated
>>> >> Security=SSPI;Packet
>>> >> Size=4096;Data Source='SERVER\INSTANCE';Initial
>>> >> Catalog=Planner;Persist
>>> >> Security Info=False;Provider="SQLOLEDB.1")
>>> >>
>>> >> Dim daStaff = New OleDb.OleDbDataAdapter("SELECT a.staff_id,
>>> >> a.staff_initials, a.staff_name, a.staff_title, a.staff_active,
>>> >> b.office_name FROM tblStaff a, tblOffice b WHERE a.staff_office_id =
>>> >> b.office_id", dcConn)
>>> >>
>>> >> Dim dsStaff as New System.Data.DataSet