Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [c#]aiuto - accesso DB

  1. #1

    [c#]aiuto - accesso DB

    scusate la mia ignoranza in materia ma non riesco ad accedere ai dati presenti in un database, precisamente nella tabella vocaboli.
    posto il codice per dettagliare:
    codice:
     private void Form1_Load(object sender, EventArgs e)
                {
                    int i = 0;
                    try
                    {
                        string q = "SELECT * FROM vocaboli";
    
                        OleDbConnection oc = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Alessandro\Desktop\esercizi borra 2013\vocaboli.accdb;Persist Security Info=False;");
                        OleDbCommand c = new OleDbCommand(q, oc);
                        oc.Open(); 
    
                        OleDbDataReader dr = c.ExecuteReader(); 
                        if (dr.Read())
                        {
                            while (dr.Read())
                            {
                                vocaboli[i].italiano = dr.GetString(0);
                                vocaboli[i].inglese = dr.GetString(1);
                                vocaboli[i].tipo = dr.GetInt16(2);
                            }
                        }
                        dr.Close();  
                    }
                    catch (Exception Ex)
                    {
                        MessageBox.Show("Errore: " + Ex.Message);
                    }
                }
    ho postato solo il form load per comodità, quando cerco di ottenere una stringa da inserire nella struttura mi compare il seguente errore:"Cast specificato non valido."
    qualcuno sa come risolverlo?
    grazie in anticipo.

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    E' una Windows Application giusto ? Se si ti sposto nel forum apposito.

    (comunque al Db a quanto pare ti connetti, controlla il tipo delle proprieta' della classe vocaboli)

  3. #3
    sì hai ragione, scusa ma sono nuovo del forum non sapevo bene dove postare.
    Comunque vocaboli è una struct, mi sono dimenticato di specificarlo, lo dichiaro così nel main:
    codice:
     public struct s_vocabolario
                {
                    public string italiano;
                    public string inglese;
                    public int tipo;
                }

  4. #4
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Ad ogni "dr.read()" il framework esegue una read, quindi dove c'e' la if ti consiglio di controllare se il DataReader contiene qualcosa, oppure di togliere la if, altrimenti al primo passaggio controllerai l'elemento 1 e non 0.

    L'errore con molta probabilita' dipende dal Get su ".tipo", prova con .GetInt32().

    codice:
    if (dr.HasRows)
    {
            while (dr.Read())
            {
                vocaboli[i].italiano = dr.GetString(0);
                vocaboli[i].inglese = dr.GetString(1);
                vocaboli[i].tipo = dr.GetInt32(2);
                i +=1;
            }
    }

  5. #5
    si, sul .hasrows ho sbagliato, ero partito con l'intenzione di far quello poi non so perché ho messo il .read .
    In ogni caso grazie per l'aiuto ma non era quello il problema, con il debugger mi va in eccezione alla prima istruzione del while...

    EDIT: tranquillo puoi chiudere ho risolto, nel database l'ordine era impostato come 1, nome italiano - 2, nome inglese - 3, ID ma il .read me lo leggeva invertito...

    grazie dell'aiuto comunque

  6. #6
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    ok comunque non incrementavi la variabile "i"...

    ciao

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