id_ass è un campo identity autoincrementante ?
Se la risposta è si puoi fare:
"SELECT @@identity as 'Identity'"
leggendo il valore nel rowset del campo identity puoi procedere a fare gli update sull'altra tabella tutto nella stessa transazione.
Ti posto un pezzo di codice dove devo fare una cosa simile, tieni conto che ADDINSERTPARAMETERS è solo una mia funzione che inserisce i valori
codice:
Dim da As New OleDbDataAdapter
Dim tr As OleDbTransaction
Dim cn As New OleDbConnection
Dim tbl As New DataTable
Dim res As Integer = -1
Try
cn.ConnectionString = GetFullDSN()
cn.Open()
tr = cn.BeginTransaction
da.InsertCommand = New OleDbCommand
da.InsertCommand.Connection = cn
da.InsertCommand.Transaction = tr
da.InsertCommand.CommandType = CommandType.Text
da.InsertCommand.CommandText = "INSERT INTO Prodotti (Codice,Prova) VALUES ('nuovoprodotto',1)"
da.InsertCommand.ExecuteNonQuery()
''recupero l'ID
da.SelectCommand = New OleDbCommand
da.SelectCommand.CommandText = "SELECT @@identity as 'Identity'"
da.SelectCommand.CommandType = CommandType.Text
da.SelectCommand.Connection = cn
da.SelectCommand.Transaction = tr
da.Fill(tbl)
res = tbl.Rows(0).Item("identity")
m_ID = res
' Inserisco i prezzi
Dim item As Integer
For item = 0 To m_Prezzo.Length - 1
If m_Prezzo(item) <> 0 Then
strCols = "(id_prodotto "
strValues = "(? "
da.InsertCommand.Parameters.Clear()
da.InsertCommand.Parameters.Add(New OleDbParameter)
da.InsertCommand.Parameters.Item(0).Direction = ParameterDirection.Input
da.InsertCommand.Parameters.Item(0).DbType = DbType.Int32
da.InsertCommand.Parameters.Item(0).Size = 4
da.InsertCommand.Parameters.Item(0).Value = m_ID
AddInsertParameters(-1, "Prezzo", 8, strCols, strValues, da, m_Prezzo(item), True)
AddInsertParameters(-1, "id_listino", 4, strCols, strValues, da, item)
da.InsertCommand.CommandText = "INSERT INTO ListinoPrezzi " & strCols & ") VALUES " & strValues & ")"
da.InsertCommand.ExecuteNonQuery()
End If
Next
tr.Commit()
Catch err As Exception
tr.Rollback()
Throw err
Finally
da = Nothing
End Try