Newsgroup: it.comp.lang.visual-basic
Titolo: Problema con ADO.NET

Posto anche qui sperando di aver migliori risultati
Ciao a tutti è un paio di mesi che mi cimento (o cemento che dir si voglia)
e ho trovato un proble sull'inserimento di un elemento in un database.
L'inserimento avviene correttamente ma vorrei, subito dopo l'update, avere
l'id dell'elemento appena inserito.
In Ado 2.X si poteva fare leggendo il valore dopo l'upd, ma in 
ado.net
 non
sembra.
Posto il codice:
Dim sqlDA As OleDb.OleDbDataAdapter
Dim resultDS As DataSet
Dim workRow As DataRow
Dim sqlCmdBldr As OleDb.OleDbCommandBuilder
Dim MyConnection As OleDb.OleDbConnection
Dim Sql As String
Try
    MyConnection = New OleDb.OleDbConnection(WebMC.Global.ServerConnString)
    MyConnection.Open()
    resultDS = New DataSet()
    sqlDA = New OleDb.OleDbDataAdapter()
    sqlCmdBldr = New OleDb.OleDbCommandBuilder(sqlDA)
    With sqlDA
        .SelectCommand = New OleDb.OleDbCommand()
        With .SelectCommand
            .CommandType = CommandType.Text
            .CommandText = "SELECT * FROM StatoOrdini WHERE 1=0"
            .Connection = MyConnection
        End With
        .Fill(resultDS, "StatoOrdini")
    End With
    If resultDS.Tables("StatoOrdini").Rows.Count = 0 Then
        workRow = resultDS.Tables("StatoOrdini").NewRow
    Else
        workRow = resultDS.Tables("StatoOrdini").Rows(0)
    End If
    With workRow
        .Item("SOR_AGE_ID") = Global.Agente.UsrID
        .Item("SOR_ORD_ID") = IDOrdine
        .Item("SOR_Data") = Now
        .Item("SOR_Stato") = Stato
        .Item("SOR_Note") = Note
    End With
    resultDS.Tables("StatoOrdini").Rows.Add(workRow)
    sqlDA.Update(resultDS, "StatoOrdini")
    Return workRow.Item("SOR_ID")
Catch e As Exception
    Return 0
Finally
    sqlDA = Nothing
    resultDS.Clear()
    resultDS = Nothing
    workRow = Nothing
    sqlCmdBldr = Nothing
    MyConnection.Close()
    MyConnection = Nothing
End Try
Illuminatemi grazie.
Mello

 sembra.
 Vabbč risolto da solo ... con un bel WorkAround
ecco il codice
Public Function LastInserted(ByVal tablename As String) As Integer
    Dim Sql As String
    Dim Conn As OleDb.OleDbConnection
    Dim Cmd As OleDb.OleDbCommand
    Dim Dr As System.Data.OleDb.OleDbDataReader
    Try
        Conn = New OleDb.OleDbConnection(Global.ServerConnString)
        Sql = "SELECT IDENT_CURRENT('" & tablename & "')"
        Cmd = New OleDb.OleDbCommand(Sql, Conn)
        Cmd.Connection.Open()
        Dr = Cmd.ExecuteReader()
        If Dr.Read Then
            Return Dr(0)
        Else
            Return 0
        End If
    Catch
        Return 0
    Finally
        Conn.Close()
        Dr = Nothing
        Cmd = Nothing
        Conn = Nothing
    End Try
End Function
Praticamente dopo gli insert chiami la funzione passandogli il nome della
tabella e ti ritorna l'ultimo id inserito.

Per inserire e rilevare l' ID si può utilizzare una query multipla.
Es.
 Dim sql As String
sql = "INSERT INTO nomeTabella (campo1,campo2)  .....;SELECT
IDENT_CURRENT('" & tablename & "')"
 Dim cmd As New SqlClient.SqlCommand(sql, con)
  Dim dr As SqlClient.SqlDataReader = cmd.ExecuteReader
        Do While dr.Read
            Dim i As System.Int32 = (dr(0)) 'ID restituito
        Loop
giuseppeD