Home All Groups Group Topic Archive Search About

Multiple table in dataset query

Author
31 Jan 2007 5:48 PM
Microsoft
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
daStaff.Fill(dsStaff, "tblStaff")

' set the bding context
currManager = CType(Me.BindingContext(dsStaff.Tables("Staff")),
CurrencyManager)

' Set the databindings
DataGrid1.DataSource = dsStaff.Tables("Staff")

....
Here I create all the DataGridTextBoxColumn and set the mapping to the
relevant field, etc.
....

End Sub

' The procedure for saving the changes is:-
Private Sub SaveChanges()
    Dim cmdBuilder As New OleDb.OleDbCommandBuilder(daStaff)
    Dim lngRetVal As Long

    lngRetVal = daStaff.Update(dsStaff, "Staff")
    If lngRetVal > 0 Then
        dsStaff.AcceptChanges()
    End If
End Sub

The form loads ok and the grid is populated, however when I call the update
command on the DataAdapter I get an error saying that I cannot use the
commandbuilder to update multiple tables. So my question is how the hell do
I do this? I prefer to manually code it rather than using the wizards to
really understand it. Plus the wizards don't actually work SQLExpress 2005.
I have read several tutorials but none seem to cover what I want, my MCSD
book I bought doesn't really explain how to do this in real terms.

Any help, pointers, guidance or links to useful articles would be very much
appreciated. I'm completely lost and don'tknow where to go from here.

Thank you in advance for taking the time to read my query!
Cheers
Lee

Author
31 Jan 2007 10:40 PM
RobinS
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.
-------------------------------------
Show quote
"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
> daStaff.Fill(dsStaff, "tblStaff")
>
> ' set the bding context
> currManager = CType(Me.BindingContext(dsStaff.Tables("Staff")),
> CurrencyManager)
>
> ' Set the databindings
> DataGrid1.DataSource = dsStaff.Tables("Staff")
>
> ....
> Here I create all the DataGridTextBoxColumn and set the mapping to the
> relevant field, etc.
> ....
>
> End Sub
>
> ' The procedure for saving the changes is:-
> Private Sub SaveChanges()
>    Dim cmdBuilder As New OleDb.OleDbCommandBuilder(daStaff)
>    Dim lngRetVal As Long
>
>    lngRetVal = daStaff.Update(dsStaff, "Staff")
>    If lngRetVal > 0 Then
>        dsStaff.AcceptChanges()
>    End If
> End Sub
>
> The form loads ok and the grid is populated, however when I call the
> update command on the DataAdapter I get an error saying that I cannot use
> the commandbuilder to update multiple tables. So my question is how the
> hell do I do this? I prefer to manually code it rather than using the
> wizards to really understand it. Plus the wizards don't actually work
> SQLExpress 2005. I have read several tutorials but none seem to cover
> what I want, my MCSD book I bought doesn't really explain how to do this
> in real terms.
>
> Any help, pointers, guidance or links to useful articles would be very
> much appreciated. I'm completely lost and don'tknow where to go from
> here.
>
> Thank you in advance for taking the time to read my query!
> Cheers
> Lee
>
Author
1 Feb 2007 12:55 PM
Microsoft
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


Show quote
"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
>> daStaff.Fill(dsStaff, "tblStaff")
>>
>> ' set the bding context
>> currManager = CType(Me.BindingContext(dsStaff.Tables("Staff")),
>> CurrencyManager)
>>
>> ' Set the databindings
>> DataGrid1.DataSource = dsStaff.Tables("Staff")
>>
>> ....
>> Here I create all the DataGridTextBoxColumn and set the mapping to the
>> relevant field, etc.
>> ....
>>
>> End Sub
>>
>> ' The procedure for saving the changes is:-
>> Private Sub SaveChanges()
>>    Dim cmdBuilder As New OleDb.OleDbCommandBuilder(daStaff)
>>    Dim lngRetVal As Long
>>
>>    lngRetVal = daStaff.Update(dsStaff, "Staff")
>>    If lngRetVal > 0 Then
>>        dsStaff.AcceptChanges()
>>    End If
>> End Sub
>>
>> The form loads ok and the grid is populated, however when I call the
>> update command on the DataAdapter I get an error saying that I cannot use
>> the commandbuilder to update multiple tables. So my question is how the
>> hell do I do this? I prefer to manually code it rather than using the
>> wizards to really understand it. Plus the wizards don't actually work
>> SQLExpress 2005. I have read several tutorials but none seem to cover
>> what I want, my MCSD book I bought doesn't really explain how to do this
>> in real terms.
>>
>> Any help, pointers, guidance or links to useful articles would be very
>> much appreciated. I'm completely lost and don'tknow where to go from
>> here.
>>
>> Thank you in advance for taking the time to read my query!
>> Cheers
>> Lee
>>
>
>
Author
1 Feb 2007 4:00 PM
Kerry Moorman
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


Show quote
"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
> >> daStaff.Fill(dsStaff, "tblStaff")
> >>
> >> ' set the bding context
> >> currManager = CType(Me.BindingContext(dsStaff.Tables("Staff")),
> >> CurrencyManager)
> >>
> >> ' Set the databindings
> >> DataGrid1.DataSource = dsStaff.Tables("Staff")
> >>
> >> ....
> >> Here I create all the DataGridTextBoxColumn and set the mapping to the
> >> relevant field, etc.
> >> ....
> >>
> >> End Sub
> >>
> >> ' The procedure for saving the changes is:-
> >> Private Sub SaveChanges()
> >>    Dim cmdBuilder As New OleDb.OleDbCommandBuilder(daStaff)
> >>    Dim lngRetVal As Long
> >>
> >>    lngRetVal = daStaff.Update(dsStaff, "Staff")
> >>    If lngRetVal > 0 Then
> >>        dsStaff.AcceptChanges()
> >>    End If
> >> End Sub
> >>
> >> The form loads ok and the grid is populated, however when I call the
> >> update command on the DataAdapter I get an error saying that I cannot use
> >> the commandbuilder to update multiple tables. So my question is how the
> >> hell do I do this? I prefer to manually code it rather than using the
> >> wizards to really understand it. Plus the wizards don't actually work
> >> SQLExpress 2005. I have read several tutorials but none seem to cover
> >> what I want, my MCSD book I bought doesn't really explain how to do this
> >> in real terms.
> >>
> >> Any help, pointers, guidance or links to useful articles would be very
> >> much appreciated. I'm completely lost and don'tknow where to go from
> >> here.
> >>
> >> Thank you in advance for taking the time to read my query!
> >> Cheers
> >> Lee
> >>
> >
> >
>
>
>
Author
1 Feb 2007 6:02 PM
Microsoft
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



Show quote
"Kerry Moorman" <KerryMoor***@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
>> >> daStaff.Fill(dsStaff, "tblStaff")
>> >>
>> >> ' set the bding context
>> >> currManager = CType(Me.BindingContext(dsStaff.Tables("Staff")),
>> >> CurrencyManager)
>> >>
>> >> ' Set the databindings
>> >> DataGrid1.DataSource = dsStaff.Tables("Staff")
>> >>
>> >> ....
>> >> Here I create all the DataGridTextBoxColumn and set the mapping to the
>> >> relevant field, etc.
>> >> ....
>> >>
>> >> End Sub
>> >>
>> >> ' The procedure for saving the changes is:-
>> >> Private Sub SaveChanges()
>> >>    Dim cmdBuilder As New OleDb.OleDbCommandBuilder(daStaff)
>> >>    Dim lngRetVal As Long
>> >>
>> >>    lngRetVal = daStaff.Update(dsStaff, "Staff")
>> >>    If lngRetVal > 0 Then
>> >>        dsStaff.AcceptChanges()
>> >>    End If
>> >> End Sub
>> >>
>> >> The form loads ok and the grid is populated, however when I call the
>> >> update command on the DataAdapter I get an error saying that I cannot
>> >> use
>> >> the commandbuilder to update multiple tables. So my question is how
>> >> the
>> >> hell do I do this? I prefer to manually code it rather than using the
>> >> wizards to really understand it. Plus the wizards don't actually work
>> >> SQLExpress 2005. I have read several tutorials but none seem to cover
>> >> what I want, my MCSD book I bought doesn't really explain how to do
>> >> this
>> >> in real terms.
>> >>
>> >> Any help, pointers, guidance or links to useful articles would be very
>> >> much appreciated. I'm completely lost and don'tknow where to go from
>> >> here.
>> >>
>> >> Thank you in advance for taking the time to read my query!
>> >> Cheers
>> >> Lee
>> >>
>> >
>> >
>>
>>
>>
Author
1 Feb 2007 10:13 PM
RobinS
When you call Update on the data adapter, it will iterate through the rows.
If a row is marked as Modified, it will run your query defined in the
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
the query defined in the Insert Command object.

Hope this helps.

Robin S.
---------------------------
Show quote
"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" <KerryMoor***@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
>>> >> daStaff.Fill(dsStaff, "tblStaff")
>>> >>
>>> >> ' set the bding context
>>> >> currManager = CType(Me.BindingContext(dsStaff.Tables("Staff")),
>>> >> CurrencyManager)
>>> >>
>>> >> ' Set the databindings
>>> >> DataGrid1.DataSource = dsStaff.Tables("Staff")
>>> >>
>>> >> ....
>>> >> Here I create all the DataGridTextBoxColumn and set the mapping to
>>> >> the
>>> >> relevant field, etc.
>>> >> ....
>>> >>
>>> >> End Sub
>>> >>
>>> >> ' The procedure for saving the changes is:-
>>> >> Private Sub SaveChanges()
>>> >>    Dim cmdBuilder As New OleDb.OleDbCommandBuilder(daStaff)
>>> >>    Dim lngRetVal As Long
>>> >>
>>> >>    lngRetVal = daStaff.Update(dsStaff, "Staff")
>>> >>    If lngRetVal > 0 Then
>>> >>        dsStaff.AcceptChanges()
>>> >>    End If
>>> >> End Sub
>>> >>
>>> >> The form loads ok and the grid is populated, however when I call the
>>> >> update command on the DataAdapter I get an error saying that I
>>> >> cannot use
>>> >> the commandbuilder to update multiple tables. So my question is how
>>> >> the
>>> >> hell do I do this? I prefer to manually code it rather than using
>>> >> the
>>> >> wizards to really understand it. Plus the wizards don't actually
>>> >> work
>>> >> SQLExpress 2005. I have read several tutorials but none seem to
>>> >> cover
>>> >> what I want, my MCSD book I bought doesn't really explain how to do
>>> >> this
>>> >> in real terms.
>>> >>
>>> >> Any help, pointers, guidance or links to useful articles would be
>>> >> very
>>> >> much appreciated. I'm completely lost and don'tknow where to go from
>>> >> here.
>>> >>
>>> >> Thank you in advance for taking the time to read my query!
>>> >> Cheers
>>> >> Lee
>>> >>
>>> >
>>> >
>>>
>>>
>>>
>
>

AddThis Social Bookmark Button