44 messaggi dal 14 gennaio 2014
Ciao a tutti, da circa tre giorni, non riesco a venire a capo ad un problema che riscontro quando vado ad eseguire il seguente comando per inserire alcuni record in una tabella di un database access.
L'errore è il seguente:
"Tipi di dati non corrispondenti nell'espressione criterio."
Posto il codice:
Dim inserisci As String = "INSERT INTO tblIscrizione ([Codice_Controllo],[Cognome],[Nome],[Sesso],[Data_Di_Nascita],[Note_Aggiuntive]) VALUES (@Codice_Controllo,@Cognome,@Nome,@Sesso,@Data_Di_Nascita,@Note_Aggiuntive)"

                Dim cmd As New OleDbCommand(inserisci, conn)
                cmd.Parameters.AddWithValue("@Codice_Controllo", codice_controllo)
                cmd.Parameters.AddWithValue("@Cognome", Replace(cognome, "'", "''"))
                cmd.Parameters.AddWithValue("@Nome", Replace(nome, "'", "''"))
                cmd.Parameters.AddWithValue("@Sesso", sesso)
                cmd.Parameters.AddWithValue("@Data_Di_Nascita", data_di_nascita)
                cmd.Parameters.AddWithValue("@Note_Aggiuntive", Replace(note_aggiuntive, "'", "''"))
                conn.Open()
                cmd.ExecuteNonQuery()
                conn.Close()

Partendo dal presupposto che:
La connssione è dichiarata globalmente e funziona;
Tutte le variabili sono correttamente valorizzate;
Tutti i campi sono di tipo TESTO, ad eccezzione del campo "Sesso" e del campo "Codice_Controllo" che sono NUMERICI e del campo "Data_Di_Nascita" che è di tipo DATA/ORA

Sapete dirmi dove si trova l'errore???
Grazie in anticipo
Modificato da lucachat il 08 agosto 2014 16.53 -
156 messaggi dal 01 dicembre 2010
senza entrare troppo nel dettaglio,
la cosa che "statisticamente" fa sbagliare di piu sono le date.

tanto per escludere inversioni di mesi con giorni fai un test con 05/06/2011

poi Access le date spesso le vuole con i cancelletti #05/06/2011#


Per ilmoento non mi viene in mente altro .....
44 messaggi dal 14 gennaio 2014
Ho provato... ma niente...
Comunque Grazie
Modificato da lucachat il 08 agosto 2014 19.12 -
3.939 messaggi dal 28 gennaio 2003
guarda se funziona.
Protected Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
  Dim Connessione As OleDbConnection = Nothing
  Dim Comando As OleDbCommand = Nothing
  Dim Sql As String = ""

  Try
    Connessione = New OleDbConnection(StringaConnessioneTest)
    Connessione.Open()
    Comando = Connessione.CreateCommand()

    Sql = "INSERT INTO tblIscrizione ([Codice_Controllo],[Cognome],[Nome],[Sesso],[Data_Di_Nascita],[Note_Aggiuntive]) VALUES (?,?,?,?,?,?)"
    Comando.CommandText = Sql
    Comando.Parameters.Clear()

    Comando.Parameters.Add("Codice_Controllo", OleDbType.Integer).Value = 1
    Comando.Parameters.Add("Cognome", OleDbType.VarChar, 255).Value = StringNullToDBNull("Pinco")
    Comando.Parameters.Add("Nome", OleDbType.VarChar, 255).Value = StringNullToDBNull("Pallino")
    Comando.Parameters.Add("Sesso", OleDbType.VarChar, 255).Value = StringNullToDBNull("M")
    Comando.Parameters.Add("Data_Di_Nascita", OleDbType.Date).Value = StringNullToDBNull("15/3/2014")
    Comando.Parameters.Add("Note_Aggiuntive", OleDbType.VarChar, 255).Value = StringNullToDBNull("àèìòù'<""><b>prova</b>")

    Comando.ExecuteNonQuery()


    Me.Label1.Text = "Operazioni su database eseguite regolarmente"

  Catch ex As Exception
    Me.Label1.Text = ex.Message

  Finally
    If (Not (Connessione Is Nothing)) Then Connessione.Close()
  End Try

End Sub

'--------------------------------------------------------
'Converte una stringa nulla in DBNull
'--------------------------------------------------------
Public Function StringNullToDBNull(ByVal s As String) As Object
  If s IsNot Nothing Then s = s.Trim
  If (s = "") Then
    Return DBNull.Value
  Else
    Return s
  End If
End Function

Modificato da pietro09 il 08 agosto 2014 19.54 -
3.939 messaggi dal 28 gennaio 2003
nman ha scritto:
senza entrare troppo nel dettaglio,
la cosa che "statisticamente" fa sbagliare di piu sono le date.

tanto per escludere inversioni di mesi con giorni fai un test con 05/06/2011

poi Access le date spesso le vuole con i cancelletti #05/06/2011#


Per ilmoento non mi viene in mente altro .....


mi permetto di correggere.
Usando i parametri ci si libera in modo definitivo (mai incappato in errore, con Access) di questo problema. La data deve essere messa secondo la nazionalità della pagina e i numeri idem.
Quello che tu dici è esatto invece se non uso i parametri ma se compongo la stringa sql

Poi, in Access, i parametri sono anonimi e si chiamano ?

Debbono essere messe esattamente nell'ordine in cui sono dichiarati nella stringa sql.

Un'ultima cosa: le stringhe nulle debbono essere convertite in dbnull.value (sempre usando i parametri)

ciao
44 messaggi dal 14 gennaio 2014
Grazie pietro09...ho provato e funziona tutto correttamente!!
156 messaggi dal 01 dicembre 2010
pietro09 ha scritto:

mi permetto di correggere.
Usando i parametri ci si libera in modo definitivo ......

Hai fatto bene a correggermi,  ho imparato qualcos' altro
sò di essere una schiappetta con ASP
sò anche che dovrò fare ancora tanta di strada ....

e poi io eroneamente tendo ad usare i linguaggi ( per me ) piu semplici e familiari delle applicazioni DeskTop


Buona domenica

.
Modificato da nman il 09 agosto 2014 12.56 -
3.939 messaggi dal 28 gennaio 2003
 Io sono invece molto scarso in applicazioni Desktop.
Perciò, se pongo un quesito, spero in una tua risposta.

Ciao.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.