Problemi con l'inserimento di una data in una query

di Anonimizzato6499 il
11 risposte
Come da oggetto non riesco ad inserire una data in una query parametrizata..

sSQL = "Insert into Periodi (Periodo, IdPeriodo, Scadenza, Inizio)values ('" + att.ElementAt(0) + "','" + att.ElementAt(1) + "'," + CDate(att.ElementAt(2)) + "," + CDate(att.ElementAt(3)) + ");"
è corretta, ma la data che mi inserisce nel database è 1900-01-01 e non quella che io gli passo.. come mai???

11 Risposte

  • Ciao Alessio

    Per inserire una data nel database devi fare la conversione della data stessa, che si esegue in questo modo
    sSQL = "Insert into Periodi (Periodo, IdPeriodo, Scadenza, Inizio)values ('"att.ElementAt(0) + "','" + att.ElementAt(1) + "'," + CDate(att.ElementAt(2)) + ",convert(datetime,'" + CDate(att.ElementAt(3)).year + "-" + CDate(att.ElementAt(3)).Month + "-" + CDate(att.ElementAt(3)).Day + "',102));"
  • Avevo già provato una cosa simile, ma nulla.. L'ho provato come dici tu, ma niente.. Non capisco come mai una cosa così banale deve dare problemi..
  • alessio340 ha scritto:


    avevo già provato una cosa simile, ma nulla.. L'ho provato come dici tu, ma niente.. Non capisco come mai una cosa così banale deve dare problemi..
    Hai provato ad andare in debug e controllare la stringa se contiene la data esatta?
  • Si, nella stringa ce la data corretta..
  • Prova in questo modo
    
    SqlParameter
       data;
    
    sSQL = "Insert into Periodi (Periodo, IdPeriodo, Scadenza, Inizio)values ('"att.ElementAt(0) + "','" + att.ElementAt(1) + "'," + CDate(att.ElementAt(2)) + "@data);"
    data = new SqlParameter("@data", sqldbtype.datetime);
    data.value=att.ElementAt(3)) ;
    comando.parameter=data;
    
    la data in sql è sempre stata carognetta da gestire pultroppo

  • Mi da un eccezione per il casting..
  • alessio340 ha scritto:


    mi da un eccezione per il casting..
    Postami il codice così vedo quale potrebbe essere il problema
  • Mi visualizza questa eccezione:
    eccezione di tipo System.AritmentException in System.data.sqlserverce.dll
  • Il campo nel db di che tipo è? postami il codice che utilizzi per creare la stringa sql, con relativi parametri
  • Ecco una parte di codice:
    'in questo frammento di codice creo per es. una sola tabella periodi
    
    Dim SQL as String
    Dim strDb as String
    Dim strConnection As String
    Dim engine As System.Data.SqlServerCe.SqlCeEngine
    Dim conn As System.Data.SqlServerCe.SqlCeConnection
    Dim comando As System.Data.SqlServerCe.SqlCeCommand
    
    strDb = PathRoot + "\DB" + TextBox1.Text + "\db.sdf"
    strConnection = "Data Source=" + strDb
    ...
    SQL = "CREATE TABLE Periodi (Periodo nvarchar(20), IdPeriodo nvarchar(5), Scadenza datetime, Inizio datetime, primary key(IdPeriodo));"
    ...
    'Creo il database se non esiste il file in cui ce il percorso del database da aprire
    If (System.IO.File.Exists(strDb) = False) Then
                engine = New System.Data.SqlServerCe.SqlCeEngine(strConnection)
                engine.CreateDatabase()
                conn = New System.Data.SqlServerCe.SqlCeConnection("Data source=" + strDb)
                conn.Open()
                comando = New System.Data.SqlServerCe.SqlCeCommand(SQL, conn)
                comando.ExecuteNonQuery()
                conn.Close()
    Else
        'errore db già presente da segnalare
        MsgBox("ERRORE: database già esistente")
    End If
    
    sSQL as String
    data11 = New System.Data.SqlServerCe.SqlCeParameter("@data11", Data.SqlDbType.DateTime)
    data22 = New System.Data.SqlServerCe.SqlCeParameter("@data22", Data.SqlDbType.DateTime)
    data11.Value = att.ElementAt(2)
    data22.Value = att.ElementAt(3)
    ...
    sSQL = "Insert into Periodi (Periodo, IdPeriodo, Scadenza, Inizio)values ('" + att.ElementAt(0) + "','" + att.ElementAt(1) + "',@data1,@data2);"
    comando = New System.Data.SqlServerCe.SqlCeCommand(sSQL, conn)
    comando.Parameters.Add(data11)
    comando.Parameters.Add(data22)
    comando.ExecuteNonQuery()
    ...
    Ti ringrazio per la tua disponibilità..
  • 
    'in questo frammento di codice creo per es. una sola tabella periodi
    
    Dim SQL as String
    Dim strDb as String
    Dim strConnection As String
    Dim engine As System.Data.SqlServerCe.SqlCeEngine
    Dim conn As System.Data.SqlServerCe.SqlCeConnection
    Dim comando As System.Data.SqlServerCe.SqlCeCommand
    
    strDb = PathRoot + "\DB" + TextBox1.Text + "\db.sdf"
    strConnection = "Data Source=" + strDb
    ...
    SQL = "CREATE TABLE Periodi (Periodo nvarchar(20), IdPeriodo nvarchar(5), Scadenza datetime, Inizio datetime, primary key(IdPeriodo));"
    ...
    'Creo il database se non esiste il file in cui ce il percorso del database da aprire
    If (System.IO.File.Exists(strDb) = False) Then
                engine = New System.Data.SqlServerCe.SqlCeEngine(strConnection)
                engine.CreateDatabase()
                conn = New System.Data.SqlServerCe.SqlCeConnection("Data source=" + strDb)
                conn.Open()
                comando = New System.Data.SqlServerCe.SqlCeCommand(SQL, conn)
                comando.ExecuteNonQuery()
                conn.Close()
    Else
        'errore db già presente da segnalare
        MsgBox("ERRORE: database già esistente")
    End If
    
    sSQL as String
    data11 = New System.Data.SqlServerCe.SqlCeParameter("@data11", Data.SqlDbType.DateTime) --> Occhio al nome della variabile
    data22 = New System.Data.SqlServerCe.SqlCeParameter("@data22", Data.SqlDbType.DateTime) --> Occhio al nome della variabile
    data11.Value = att.ElementAt(2)
    data22.Value = att.ElementAt(3)
    ...
    sSQL = "Insert into Periodi (Periodo, IdPeriodo, Scadenza, Inizio)values ('" + att.ElementAt(0) + "','" + att.ElementAt(1) + "',@data1,@data2);"
    comando = New System.Data.SqlServerCe.SqlCeCommand(sSQL, conn)
    comando.Parameters.Add(data11)
    comando.Parameters.Add(data22)
    comando.ExecuteNonQuery()
    ...
    
    occhio ai nomi delle variabili
Devi accedere o registrarti per scrivere nel forum
11 risposte