Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Update su DB fallisce

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2005
    Messaggi
    139

    Update su DB fallisce

    Ciao a tutti
    Mi trovo con questo grosso problema.
    Ho una Sub per l'aggiornamento di alcuni dati sul DB.

    Private Sub UpdateCorpo(ByVal trn As MySqlTransaction, ByVal id_testa As Int64)
    Dim conn As MySqlConnection = CType(getStrConnection("conn"), MySqlConnection)
    Dim dt As DataTable = CType(Session("dt"), DataTable)

    Dim insertCorpo As String = "INSERT INTO documento_corpo (codice" & _
    ",id_testa" & _
    ",fornitore" & _
    ",produttore" & _
    ",articolo" & _
    ",varieta" & _
    ",misura" & _
    ",grado" & _
    ",tipo_imballo" & _
    ",quantita_box" & _
    ",quantita_um_x_box" & _
    ",quantita_um" & _
    ",data_consegna" & _
    ",luogo_arrivo" & _
    ",cliente_fornitore" & _
    ",prezzo_unitario" & _
    ",sconto" & _
    ",totale" & _
    ",utente) VALUES (" & _
    "?codice" & _
    ",?id_testa" & _
    ",?cfornitore" & _
    ",?cproduttore" & _
    ",?carticolo" & _
    ",?cvarieta" & _
    ",?cmisura" & _
    ",?cgrado" & _
    ",?ctipo_imballo" & _
    ",?quantita_box" & _
    ",?quantita_um_x_box" & _
    ",?quantita_um" & _
    ",?data_consegna" & _
    ",?cluogo_arrivo" & _
    ",?ccliente_fornitore" & _
    ",?prezzo_unitario" & _
    ",?sconto" & _
    ",?totale" & _
    ",?utente)"
    Dim da As New MySqlDataAdapter
    Dim cmdInsertCorpo As MySqlCommand

    ' da.UpdateCommand = cmdUpdateCorpo

    '' InsertCommand
    cmdInsertCorpo = conn.CreateCommand
    cmdInsertCorpo.CommandText = insertCorpo
    cmdInsertCorpo.Transaction = trn

    cmdInsertCorpo.Parameters.Add(New MySqlParameter("codice", MySqlDbType.Int64, 10, "codice"))
    cmdInsertCorpo.Parameters.Add(New MySqlParameter("id_testa", MySqlDbType.Int64, 10)).Value = id_testa
    cmdInsertCorpo.Parameters.Add(New MySqlParameter("cfornitore", MySqlDbType.VarChar, 6, "cfornitore"))
    cmdInsertCorpo.Parameters.Add(New MySqlParameter("cproduttore", MySqlDbType.VarChar, 6, "cproduttore"))
    cmdInsertCorpo.Parameters.Add(New MySqlParameter("carticolo", MySqlDbType.VarChar, 14, "carticolo"))
    cmdInsertCorpo.Parameters.Add(New MySqlParameter("cvarieta", MySqlDbType.VarChar, 5, "cvarieta"))
    cmdInsertCorpo.Parameters.Add(New MySqlParameter("cmisura", MySqlDbType.VarChar, 5, "cmisura"))
    cmdInsertCorpo.Parameters.Add(New MySqlParameter("cgrado", MySqlDbType.VarChar, 5, "cgrado"))
    cmdInsertCorpo.Parameters.Add(New MySqlParameter("ctipo_imballo", MySqlDbType.VarChar, 5, "cimballo"))
    cmdInsertCorpo.Parameters.Add(New MySqlParameter("quantita_box", MySqlDbType.Int64, 10, "quantitabox"))
    cmdInsertCorpo.Parameters.Add(New MySqlParameter("quantita_um_x_box", MySqlDbType.Int64, 10, "quantitaumxbox"))
    cmdInsertCorpo.Parameters.Add(New MySqlParameter("quantita_um", MySqlDbType.Int64, 10, "quantitaum"))
    cmdInsertCorpo.Parameters.Add(New MySqlParameter("data_consegna", MySqlDbType.Date, 10, "dataconsegna"))
    cmdInsertCorpo.Parameters.Add(New MySqlParameter("cluogo_arrivo", MySqlDbType.VarChar, 5, "cluogoarrivo"))
    cmdInsertCorpo.Parameters.Add(New MySqlParameter("ccliente_fornitore", MySqlDbType.VarChar, 6, "ccliente_fornitore"))
    cmdInsertCorpo.Parameters.Add(New MySqlParameter("prezzo_unitario", MySqlDbType.Double, 10, "prezzounitario"))
    cmdInsertCorpo.Parameters.Add(New MySqlParameter("sconto", MySqlDbType.Double, 5, "sconto"))
    cmdInsertCorpo.Parameters.Add(New MySqlParameter("totale", MySqlDbType.Double, 10, "prezzo"))
    cmdInsertCorpo.Parameters.Add(New MySqlParameter("utente", MySqlDbType.VarChar, 10)).Value = (User.Identity.Name).Substring(0, (User.Identity.Name).IndexOf(":"))

    da.InsertCommand = cmdInsertCorpo

    da.Update(dt)
    End Sub

    Purtroppo lo so... è un pò lunga... e oltretutto ho eliminato la parte degli Update.
    La cosa strana che dopo l'assegnazione del dt se vado a vedere i singoli valori ci sono...e sono corretti.
    Dopo averli assegnati al cmdInsertCorpo se vado a controllare il dataadapter i vari parametri risultano vuoi.
    Come mai?

  2. #2
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    che errore ti da ?????

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2005
    Messaggi
    139
    essendoci sulla tabella delle FK mi fallisce
    da.Update(dt)

    Se vado a controllare i parametri dal DA sono vuoti

  4. #4
    Originariamente inviato da temerario
    essendoci ... mi fallisce ...
    ma l'errore preciso qual'e'?
    Cmq, mi accerterei sulla documentazione del connector di mysql quale identificatore di parametro si debba utilizzare e come vadano identificati i parametri. Ad es. stai usando il segno "?" sei sicuro che vada bene e non ci voglia invece "@" ?
    Saluti a tutti
    Riccardo

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2005
    Messaggi
    139
    si, va ?
    Ho già fatto molte altre pagine nelle quali effettuo l'update. Solo in questa mi da errore.

    Ma non è un errore a livello di istruzioni... di sintassi... bensì mi ritrovo i valori vuoti.

    Se vuoi ti posso mandare una email o tramite msn il codice per capire meglio.

    Ciao

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2005
    Messaggi
    139
    Ho analizzato meglio il codice e mi sono reso conto di che il pbl non è nei dati sporchi.

    ho questa SUB che poi chiama Update:

    Dim conn As MySqlConnection = Type(getStrConnection("conn"),MySqlConnection)
    Dim trn As MySqlTransaction
    Dim dt As DataTable = CType(Session("dt"), DataTable)
    Dim cmdInsertTesta As MySqlCommand
    Dim cmdAuto As MySqlCommand

    Dim insertTesta as String = "....."
    Try
    If dt.Rows.Count <> 0 Then
    conn.Open()
    trn = conn.BeginTransaction
    cmdInsertTesta = conn.CreateCommand
    cmdInsertTesta.CommandText = insertTesta
    cmdInsertTesta.Transaction = trn

    CREO I VARI PARAMETRI

    cmdInsertTesta.ExecuteNonQuery()

    UpdateCorpo(trn, id_testa)
    trn.Commit()
    Session.Remove("dt")
    Else
    ......
    End If
    Catch Exc As MySqlException
    trn.Rollback()
    Catch exc As DBConcurrencyException
    trn.Rollback()
    End Try

    In UpdateCorpo ho:
    Private Sub UpdateCorpo(ByRef trn As MySqlTransaction, ByVal id_testa As Int64)
    Dim conn As MySqlConnection = CType(getStrConnection("conn"), MySqlConnection)
    Dim dt As DataTable = CType(Session("dt"), DataTable)
    Dim updateCorpo As String = "...."

    Dim da As New MySqlDataAdapter
    Dim cmdUpdateCorpo As MySqlCommand

    cmdUpdateCorpo = conn.CreateCommand
    cmdUpdateCorpo.CommandText = updateCorpo
    cmdUpdateCorpo.Transaction = trn

    CREO I VARI PARAMETRI

    da.UpdateCommand = cmdUpdateCorpo

    IDEM PER INSERT

    da.Update(dt)
    End Sub

    Succede che fallisce perchè nel corpo c'è una FK di un campo testa. Se elimino la FK funziona ma effettivamente il pbl è che non mi scrive il record di testa.
    Come mai? come mi devo comportare con le connessioni e le transazione in questo caso che chiamo una Sub.

    SPero di essere stato chiaro.

    Ciao

  7. #7
    Originariamente inviato da temerario
    ...come mi devo comportare con le connessioni e le transazione in questo caso che chiamo una Sub.
    La transaction nasce da una connection specifica. Dovresti usare la stessa connection per le operazioni all'interno della transaction. Nel tuo codice chiami una sub passandogli solo la transaction e all'interno della sub crei una nuova connection. Forse un modo potrebbe essere quello di passare il command come parametro (avendo poi l'accortezza ovviamente di ripulire i parametri e cambiare commandtext prima di riusarlo).
    Saluti a tutti
    Riccardo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.