Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Problema connessione DB Access

    Salve a tutti,

    ho sviluppato un piccolo programmino desktop in csharp ma ho un problema con la connessione al db access (è la prima volta che lo uso). Mi sto scervellando perchè non riesco a capire il problema. Quando faccio un inserimento su una tabella mi viene rilanciata un'eccezione di sintatti SQL ma la query è scritta bene.

    Ho provato sia con access, che access 2007. Sulla mia macchina è installata la versione 2007.

    codice:
    //access
    private static String connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Rubrica.mdb;Jet OLEDB:System Database=system.mdw;";
    
    //access 2007
    private static String connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Rubrica.accdb;Persist Security Info=False;";
    
    String sql = "INSERT INTO evento (id_contatto, testo, note, data) VALUES (3, 'luca', 'aaaa', 'ffff')";
    
    OleDbConnection aConnection = new OleDbConnection(connectionString);
    OleDbCommand aCommand = new OleDbCommand(sql, aConnection);
    
    aConnection.Open();
    
    int count = 0;
    try
    {
         count = aCommand.ExecuteNonQuery();
    }
    catch (OleDbException ex)
    {
         MessageBox.Show("Evento non inserito " + ex.Message);
    }
    finally
    {
         aConnection.Close();
    }
    Eccezione rilanciata: Evento non inserito Errore di sintassi nell'istruzione INSERT INTO.

    Consigli?

    Grazie
    Luca

  2. #2
    Penso che l'eccezione sia dovuta al fatto che stai tentando di inserire 'ffff' dentro un campo di tipo Data/Ora. La cosa migliore da fare, per svariati motivi, è quello di evitare la scrittura dei valori direttamente nel testo della query ma servirsi dei parametri. In pratica al posto dei valori metti un ? (funziona solo in Access, in sql server si scrive @nomeparametro) e aggiungi i parametri all'oggetto OleDbCommand:
    codice:
    String sql = "INSERT INTO evento (id_contatto, testo, note, data) VALUES (?, ?, ?, ?)";
    
    OleDbConnection aConnection = new OleDbConnection(connectionString);
    OleDbCommand aCommand = new OleDbCommand(sql, aConnection);
    
    aCommand.Parameters.Add("?", OleDbType.Integer).Value = 3;
    aCommand.Parameters.Add("?", OleDbType.BSTR, 50).Value = "luca";   //50 = lunghezza max consentita dal campo
    aCommand.Parameters.Add("?", OleDbType.BSTR, 255).Value = "aaaa";
    aCommand.Parameters.Add("?", OleDbType.Date).Value = DateTime.Now;
    Il resto del codice prosegue come di consueto.
    Chi non cerca trova.

  3. #3
    Originariamente inviato da tas
    Penso che l'eccezione sia dovuta al fatto che stai tentando di inserire 'ffff' dentro un campo di tipo Data/Ora. La cosa migliore da fare, per svariati motivi, è quello di evitare la scrittura dei valori direttamente nel testo della query ma servirsi dei parametri. In pratica al posto dei valori metti un ? (funziona solo in Access, in sql server si scrive @nomeparametro) e aggiungi i parametri all'oggetto OleDbCommand:
    codice:
    String sql = "INSERT INTO evento (id_contatto, testo, note, data) VALUES (?, ?, ?, ?)";
    
    OleDbConnection aConnection = new OleDbConnection(connectionString);
    OleDbCommand aCommand = new OleDbCommand(sql, aConnection);
    
    aCommand.Parameters.Add("?", OleDbType.Integer).Value = 3;
    aCommand.Parameters.Add("?", OleDbType.BSTR, 50).Value = "luca";   //50 = lunghezza max consentita dal campo
    aCommand.Parameters.Add("?", OleDbType.BSTR, 255).Value = "aaaa";
    aCommand.Parameters.Add("?", OleDbType.Date).Value = DateTime.Now;
    Il resto del codice prosegue come di consueto.
    Ti ringrazio per aver risposto ma il problema non è campo data perchè nel db è settato come stringa. Ho provato anche la tua soluzione ma mi viene rilanciata sempre la stessa eccezione

    Altri consigli?
    Luca

  4. #4

    assurdo

    Ho scoperto il problema! Se elimino dalle query il campo note, tutto funziona. Ma com'è possibile. Viva Microsfots
    Luca

  5. #5

    Re: assurdo

    Originariamente inviato da sportfantasy
    Ho scoperto il problema! Se elimino dalle query il campo note, tutto funziona. Ma com'è possibile. Viva Microsfots
    Ricordati che nel 99,9% delle volte il problema è situato tra la tastiera e lo schienale della sedia

    Il campo Note non viene accettato perché quella parola è riservata, come si può vedere qui.

    Per utilizzare comunque quel nome di campo nella query devi includerlo tra parentesi quadrate:
    codice:
    String sql = "INSERT INTO evento (id_contatto, testo, [note], data) VALUES (?, ?, ?, ?)";
    Chi non cerca trova.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.