2013-02-28 9 views
5

Come leggere i dati nel database di accesso ms e visualizzarli in una casella di riepilogo. Ho i codici qui ma ho degli errori.Recupero dei dati dal database MS Access e visualizzazione in una listbox

private void button3_Click(object sender, EventArgs e) 
    { 
     using (OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\Sisc-stronghold\mis!\wilbert.beltran\DataBase\DataStructure.accdb")) 
     using(OleDbCommand cmd = new OleDbCommand(" SELECT * from TableAcct", conn)) 
     { 
      conn.Open(); 
      OleDbDataReader Reader = cmd.ExecuteReader(); 
      //if (Reader.HasRows) 
      if (Reader.HasRows) 
      { 
       Reader.Read(); 
       listBox1.Text = Reader.GetString("FirstName"); 
      } 
     } 

gli errori sono qui: 1. Errore 1 Il metodo migliore partita di overload for'System.Data.Common.DbDataReader.GetString (int)' ha alcuni argomenti non validi. 2. Errore 2 Argomento '1': impossibile convertire da 'stringa' a 'int'

+0

stringa Get Ottiene il valore della colonna specificata sotto forma di stringa. e la specifica è da zero numeri di base, se il risultato della tua query restituisce una tabella con 5 colonne e vuoi ottenere il valore della 3a colonna chiama questa funzione con 2 come parametro – saeed

risposta

5

provare questo,

 List<String> firstName = new List<String>(); 
     List<String> lastName = new List<String>(); 

     private void loadButton_Click(object sender, EventArgs e) 
     { 
       cn.Open(); 
       OleDbDataReader reader = null; 
       cmd = new OleDbCommand("select* from Records", cn); 
       reader = cmd.ExecuteReader(); 
       while (reader.Read()) 
       { 
        firstName.Add(reader["FirstName"].ToString()); 
        lastName.Add(reader["LastName"].ToString()); 
       } 
       cn.Close(); 
     } 

poi nel vostro pulsante di ricerca, inserire questo,

private void searchButton_Click(object sender, EventArgs e) 
     { 
      clearSearchResult(); 
      try 
      { 
       int totalItems = FirstName.Count; 
       int count = 0; 
       while (count < totalItems) 
       { 
        if (textBox6.Text == FirstName[count].ToString()) 
        { 
         listBox1.Items.Add(FirstName[count].ToString()); 
         count = 100; 
        } 
        else 
        { 
         count++; 
        } 

E 'bene utilizzare quando si desidera visualizzare le informazioni del "FirstName" nel listBox1_SelectedIndexChanged se volere. ecco un esempio,

private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
     { 
       int totalItems = lastName.Count; 
       int count = 0; 
       while (count < totalItems) 
       { 
        if ((listBox1.SelectedItem.ToString()) == firstName[count].ToString())) 
        { 
         textBox1.Text = firstName[count].ToString(); 
         textBox2.Text = lastName[count].ToString(); 
         count = 100; 
        } 
        else 
        { 
         count++; 
        } 
       } 

speranza che questo aiuti,

+0

Ho finito di mostrare i dati specifici che voglio visualizzare nella lista. Grazie per l'aiuto. Ora, quello che voglio è che quando clicco sulla visualizzazione dei dati nella lista, tutte le altre informazioni ad essa correlate dovrebbero essere visualizzate nella singola casella di testo utilizzata per inserire i dati nel database. :) – lexter

1

GetString() accetta un int come parametro e non una stringa. Significa che devi usare l'indice della colonna.

Nella vostra specifica circostanza come "FirstName" è la seconda colonna l'indice sarebbe 1:

listBox1.Text = Reader.GetString(1); 

http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbdatareader.getstring.aspx

+0

@ markoo- Mi dispiace ma sono solo nuovo di C# . Come lo farò, come userò l'indice della colonna. :) grazie mille – lexter

+1

@lexter Se Firstname è la prima colonna restituita dalla query, l'indice sarà 0. –

+1

@lexter mentre si seleziona * dalla tabella, contare da sinistra a partire da 0, quindi quando si raggiunge "Firstname" hai l'indice. Oppure puoi solo selezionare "FirstName", quindi l'indice sarebbe 0. – markoo

0

Il tuo errore è in questa linea:

listBox1.Text = Reader.GetString("FirstName"); 

È necessario passare un numero nella funzione GetString().

1

cambiamento

listBox1.Text = Reader.GetString("FirstName"); 

a

listBox1.Text = Reader.GetString(0); // zero base ordinal of column 
1

Thy utilizzando un ciclo While

while(reader.Read()) 
{ 
    listbox1.Items.Add(reader["FirstName"]); 
} 

Questo si muove attraverso tutte le righe selezionate. reader.Read() restituisce false se non ci sono più righe.

Inoltre: se si desidera riattivare valmue da una colonna, suggerisco di farlo con l'indice ón l'istanza reader. Come il mio esempio

var value = reader["ColumnName"]; 

Questo aumenta la leggibilità confronto ad

var value = reader.GetString(0); 

UPDATE

Se si desidera visualizzare solo il valore pugno - vi consiglio di utilizzare cmd.ExecuteScalar() e ADAPT si SQL solo restituire il valore che ti serve:

using(OleDbCommand cmd = new OleDbCommand("SELECT firstname from TableAcct", conn)) 
{ 
    conn.Open(); 
    var firstName = cmd.ExecuteScalar(); 
} 

Ricorda che questo ti darà il primo "FirstName" nella tabella. E dal momento che non è disponibile il numero "order by firstname" o "where someKey = 1", è possibile che questo non venga ripristinato.

+0

grazie :) ma ciò che i tuoi codici hanno fatto è che visualizza tutti i dati nella colonna "nome". cosa succede se volevo visualizzare solo dati specifici per esempio. Ho un dato di nome "Jens" nella prima colonna e quando l'ho digitato nella casella di testo e faccio clic sul pulsante di ricerca, verrà visualizzato solo "Jens" nella casella di riepilogo – lexter

+1

come caricarli prima in un elenco quindi se ur? searchTextBox.text' è uguale a uno dei valori nella 'Lista ' i dati verranno visualizzati in 'listBox' – Pyromancer

+0

@AlfredSanz - come farò.puoi postare le tue risposte :) grazie: P – lexter

1

Se si desidera creare database MS Access e per accedervi, e per visualizzare i dati in qualche componente, come qui mostrerò you.how a connettersi con MS Access Data Base e visualizzare i dati dal database in Label. Prima di tutto creare qualsiasi database di Access come qui "PirFahimDataBase". Ora nel tuo Visual Studio accedere al menu e fare questo

  1. Fare clic su Dati
  2. Aggiungi nuova banca dati
  3. Fare clic su Avanti
  4. Fare clic su Nuova connessione
  5. Ora cambiare l'origine dati fare clic su Cambia e selezionare i file di database Microsoft Access
  6. Fare clic su Sfoglia per selezionare il database creato

Ora, nel pulsante ClickEvent incollare questi codice che otterrà i dati dalla base di dati e mostrerà nell'etichetta

using System.Windows.Forms; //these two lines should be written before namespace at top of the program 
using System.Data.OleDb; 

private void button1_Click(object sender, EventArgs e) 
    {   
     System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(); 
    conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;" + 
    @"Data source= C:\Users\pir fahim shah\Documents\PirFahimDataBase.accdb"; 

    try 
    { 
    conn.Open(); 
    MessageBox.Show("connected successfuly"); 
    OleDbDataReader reader = null; // This is OleDb Reader 
    OleDbCommand cmd = new OleDbCommand("select TicketNo from Table1 where Sellprice='6000' ", conn); 
    reader = cmd.ExecuteReader(); 
    while (reader.Read()) 
    { 
    label1.Text= reader["TicketNo"].ToString();   

    } 

} 
    catch (Exception ex) 
{ 
    MessageBox.Show("Failed to connect to data source"); 
} 
finally 
{ 
    conn.Close(); 
}  
}//end of button click event 
0
DataColumn[] PrimaryKeyColumn = new DataColumn[1]; //Define Primary coloumn 
DataSet dataSet = new DataSet(); 
DataTable dataTable = new DataTable(); 
ReadAndUpdateExcel.ReadExcel(strPath, sheetName, out dataSet); 
dataSet.Tables.Add(dataTable); 
PrimaryKeyColumn[0] = dataSet.Tables[0].Columns[0]; 
dataSet.Tables[0].PrimaryKey = PrimaryKeyColumn; 
string num = dataSet.Tables[0].Rows[dataSet.Tables[0].Rows.IndexOf(dataSet.Tables[0].Rows.Find(strTCName))]["ACNO"].ToString(); 
//string country 
Problemi correlati