none
errore nell'utilizzo di una query su db "mdb" RRS feed

  • Domanda

  • Ciao a tutti,

    devo eseguire una semplice select su una tabella di un db access di tipo mdb per poi recuperare i dati. La WHERE della select dipende dal codice che mi passo tramite la querystring, l'errore che ottengo è questo:

    Errore server nell'applicazione '/'.

    Tipi di dati non corrispondenti nell'espressione criterio.

    Descrizione: Eccezione non gestita durante l'esecuzione della richiesta Web corrente. Per ulteriori informazioni sull'errore e sul suo punto di origine nel codice, vedere l'analisi dello stack.

    Dettagli eccezione: System.Data.OleDb.OleDbException: Tipi di dati non corrispondenti nell'espressione criterio.

    Errore nel codice sorgente:
    Riga 43:         DataSet ds = new DataSet();
    Riga 44:         OleDbDataAdapter da = new OleDbDataAdapter(cmd);        
    Riga 45:         da.Fill(ds);
    Riga 46:         DataList1.DataSource = ds.Tables[0];
    Riga 47:         DataList1.DataBind();

    Questo è il codice che ho scrito nel PageLoad della pagina aspx.cs

    protected void Page_Load(object sender, EventArgs e)
        {
            string cod1 = Request.QueryString[0];
            int cod = Convert.ToInt32(cod1);
            string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
            OleDbConnection conn = new OleDbConnection(connectionString);
            //query
            String sql;
            OleDbCommand cmd = conn.CreateCommand();
            sql = String.Format("SELECT * FROM iscrizione WHERE id = '{0}'", cod);
            
            cmd.CommandText = sql;
            OleDbParameter par = cmd.CreateParameter();        
            par.DbType = System.Data.DbType.Int32;
            par.ParameterName = cod;
            par.Value = cod;
            
            cmd.Parameters.Add(par);
            conn.Open();
    
            DataSet ds = new DataSet();
            OleDbDataAdapter da = new OleDbDataAdapter(cmd);        
            da.Fill(ds);
            DataList1.DataSource = ds.Tables[0];
            DataList1.DataBind();
            conn.Close();
            conn.Dispose();
        }

    e poi cerco di recuperare le informazioni dalla pagina aspx così:

    <asp:Label ID="nome" runat="server" Text=<%# Eval("NOME") %></asp:Label>
    
    <asp:Label ID="cognome" runat="server" Text=<%# Eval("COGNOME") %></asp:Label>
    
    <asp:Label ID="sq" runat="server" Text=<%# Eval("SQ") %></asp:Label>

    alcune precisazioni, la tabella è formata da quattro colonne ID (int), NOME (char), COGNOME (char), SQ (char), visto che nell'errore scrive che c'è un problema con il tipo di dati non corrispondenti ho provato ad inserire un cast per portare la stringa che recupero dalla querystring a int che è il tipo del dato ID che vado a confrontare nella query solo che in questa riga di codice par.ParameterName = cod; visualstudio mi dice che è impossibile convertire implicitamente il tipo int in string, qualcuno può darmi una mano? spero proprio di si ciao.

    giovedì 5 settembre 2013 16:18

Risposte

  • Prova a mettere semplicemente:

     String sql;
            OleDbCommand cmd = conn.CreateCommand();
            sql = String.Format("SELECT * FROM iscrizione WHERE id = {0}", cod);
            
            cmd.CommandText = sql;
            conn.Open();
    
            DataSet ds = new DataSet();
            OleDbDataAdapter da = new OleDbDataAdapter(cmd);        
            da.Fill(ds);
    Ciao


    Luca Congiu (congiuluc)
    Personal Blog: blogs.dotnetcode.it

    • Contrassegnato come risposta stellare21 venerdì 6 settembre 2013 11:34
    venerdì 6 settembre 2013 05:31
    Moderatore