Update su DB fallisce

giovedì 30 giugno 2005 - 16.40

temerario Profilo | Junior Member

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,

totti240282 Profilo | Guru

che errore ti da ???

C'è solo un capitano !!!!!!

temerario Profilo | Junior Member

non ho un errore di codice ma essendoci sulla tabella delle FK mi fallisce
da.Update(dt)

Se vado però a controllare i parametri dal DA sono vuoti... come se non li legge dal datatable che però dopo averli presi dalla session sono valorizzati bene.

Babi Profilo | Junior Member

Ciao, non ho capito bene.. comunque ti mando un esempio "accorciato" funzionante di scrittura sul DB simile alla tua. Prova a vedere se ci sono differenze.

Public InsertContratto As New String("INSERT INTO mail_sous_contratto (cod_applicativo, " & _
"cod_societa, " & _
"tipo_lettera, " & _
"key_link ) " & _
"VALUES (?,?,?,?)")

Dim cmdInsertContratto As New OleDb.OleDbCommand

With cmdInsertContratto
.CommandText = cls_c.InsertContratto ' istruzione di insert into...
.Parameters.Add("@cod_applicativo", strFormat.Char, 2, "cod_applicativo").Value = cls_c.cod_applicativo
.Parameters.Add("@cod_societa", strFormat.Char, 3, "cod_societa").Value = cls_c.cod_societa
.Parameters.Add("@tipo_lettera", strFormat.Char, 2, "tipo_lettera").Value = cls_c.tipo_lettera
.Parameters.Add("@key_link", strFormat.Integer).Value = numKey
'
.Connection = conn
End With

If (conn.State = ConnectionState.Closed) Then conn.Open()
cmdinscnt.ExecuteNonQuery()
conn.Close()


temerario Profilo | Junior Member

ma io ne ho fatti tanti altri inserimenti e non ho mai avuto pbl.

Su questo non so perchè....
Nell'esempio che hai postato tu valorizzi con il .Value... mentre io no

Babi Profilo | Junior Member

allora se hai sempre fatto così ed ha sempre funzionato non saprei.
avrai qualche situazione strana sulla macchina o qualche condizione
alrettanto strana a programma.
ciao :(




temerario Profilo | Junior Member

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

Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5