App vb.net su database mysql con errori di scrittura

di Anonimizzato29849 il
4 risposte
Salve!

proverò a descrivervi brevemente questo problema;
ipotizziamo l'esecuzione di queste stringe di codice vb.net

cn.Open()
query = "INSERT INTO tabella(colonna) VALUES ('" & variabile & "',')"
cmd = New MySqlCommand(query, cn)
cmd.ExecuteNonQuery()
cn.Close()

nell'ipotesi in cui il valore della variabile non si di tipo congruo con il campo della tabella del db, ovviamente si genera un errore e fin qui tutto ok.
Il problema sussiste nel fatto che anche in caso di questo errore, il contatore del campo ID AUTOINCREMENT comunque aumenta di 1 lasciando un indice vuoto. Ipotizzando che il valore dell'id fosse stato 5 inserendo un altro record avrei questa sequenza = 1 2 3 4 6.

C'è un modo per evitare ciò? Quindi non consentire l'aumento dell'indice in caso di questo errore? grazie a tutti in anticipo

4 Risposte

  • A parte il fatto che il controllo dovresti farlo tu prima di fare la INSEERT, anche se dovesse crearsi il "buco" non ha alcuna importanza e tu non dovresti tenerne conto perché del valore del campo autoincrementante non te ne dovresti curare.

    Parti da presupposti sbagliati.
  • zmenc ha scritto:


    C'è un modo per evitare ciò? Quindi non consentire l'aumento dell'indice in caso di questo errore?
    E' una domanda parecchio ricorrente: la risposta è "no" in quanto, per l'utilizzo che se ne fa, il valore di quel tipo di campo non deve essere significativo, ma è solo preposto ad attribuire un ID sicuramente univoco al record che viene salvato, tant'è vero che potrebbe anche essere impostato in modo casuale.

    Non devi quindi preoccuparti dei "buchi" dovuti a inserimenti non finalizzati oppure a eliminazione di record in seguito.

    Ciao!
  • Xzmenc : è meglio se gestisci le tue variabili usando i SqlParameters (nel tuo caso MySqlParameters) ,in questo modo eviti la sql injection ,
    vedi https://stackoverrun.com/it/q/318349
Devi accedere o registrarti per scrivere nel forum
4 risposte