2013-02-28 20 views
5

Jak odczytać dane z bazy danych dostępu MS i wyświetlić ją w polu listy. Mam kody tutaj, ale mam błędy.Pobieranie danych z bazy danych MS Access i wyświetlanie ich w polu listy

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"); 
      } 
     } 

błędy są tutaj: 1. Błąd 1 Najlepszym przeciążony for'System.Data.Common.DbDataReader.GetString metoda match (int)”ma pewne nieprawidłowe argumenty. 2. Błąd 2 Argument "1": nie można przekonwertować z "ciągu" na "int"

+0

Get String Pobiera wartość określonej kolumny jako ciąg znaków. a specyfikacja jest zerowa, jeśli wynik zapytania zwróci tabelę z 5 kolumnami i chcesz uzyskać wartość trzeciej kolumny wywołaj tę funkcję z 2 jako parametrem – saeed

Odpowiedz

5

próbować ten jeden,

 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(); 
     } 

następnie w przycisk wyszukiwania, włóż to

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++; 
        } 

Dobrze jest skorzystać, gdy chcemy, aby pokazać informacje o "FirstName" w listBox1_SelectedIndexChanged jeśli ciebie chcieć. Oto przykład,

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++; 
        } 
       } 

nadzieję, że to pomaga,

+0

Skończyłem wyświetlanie konkretnych danych, które chcę wyświetlić w liście. dzięki za pomoc. Teraz, gdy chcę kliknąć na ekranie danych w polu listy, wszystkie inne informacje z nim związane powinny być wyświetlane w osobnym polu tekstowym używanym do wprowadzania danych do bazy danych. :) – lexter

1

GetString() przyjmuje int jako parametr, a nie ciąg. Oznacza to, że musisz użyć indeksu kolumny.

W konkretnej sytuacji jako "FirstName" to druga kolumna indeks byłoby 1:

listBox1.Text = Reader.GetString(1); 

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

+0

@ markoo- Przykro mi, ale jestem po prostu nowy w C# . Jak to zrobię, jak będę używał indeksu kolumny. :) bardzo dziękuję – lexter

+1

@lexter Jeśli Firstname jest pierwszą kolumną zwróconą przez zapytanie, to indeks będzie 0. –

+1

@lexter jak wybierasz * z tabeli, liczyć od lewej zaczynając od 0, a po osiągnięciu "Firstname" masz indeks. Lub możesz wybrać tylko "FirstName", a następnie indeks będzie 0. – markoo

0

Twój błąd jest w tym wierszu:

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

Musisz przekazać numer w funkcji GetString().

1

zmiana

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

do

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

Thy za pomocą pętli while

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

ten przechodzi przez wszystkich wierszy wybranych. reader.Read() zwraca false, jeśli nie ma więcej wierszy.

Także: jeśli chcesz pobrać valmue z kolumny, sugeruję zrobić to z indeksem ón instancji reader. Jak mój przykład.

var value = reader["ColumnName"]; 

To zwiększa czytelność w porównaniu do

var value = reader.GetString(0); 

UPDATE

Jeśli chcesz wyświetlać tylko wartość Fist - Proponuję użyć cmd.ExecuteScalar() i dostosować ty SQL tylko zwracają potrzebna wartość:

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

Należy pamiętać, że da to najpierw "FirstName" w tabeli. A ponieważ nie ma żadnego "order by firstname" lub "where someKey = 1" - może to nie dorównać, czego się spodziewałeś.

+0

dzięki :) ale to, co zrobiły twoje kody, powoduje wyświetlenie wszystkich danych w kolumnie "firstname". co jeśli chciałbym wyświetlić tylko określone dane, na przykład. Mam dane o nazwie "Jens" w pierwszej kolumnie i kiedy wpisałem je w polu tekstowym i kliknę przycisk wyszukiwania, wyświetli tylko "Jens" w polu listy – lexter

+1

jak załadować je najpierw na listę , a następnie, jeśli ur. searchTextBox.text' jest równy jednej z wartości na liście 'List ' dane będą wyświetlane w 'listBox' – Pyromancer

+0

@AlfredSanz - jak to zrobię.czy możesz zamieścić swoje odpowiedzi :) dziękuję: P – lexter

1

Jeśli chcesz utworzyć bazę danych MS Access i do niego dostęp, a do wyświetlania danych w jakiś składnik, jak tu pokaże you.how do połączyć się z bazą danych MS Access i wyświetlać dane z bazy danych w Label. Najpierw utwórz dowolną bazę danych Access, taką jak tutaj "PirFahimDataBase". Teraz w Visual Studio przejdź do menu i zrobić to

  1. Kliknij dane
  2. Dodaj nowy Bazy Danych
  3. Kliknij Dalej
  4. Kliknij Nowe połączenie
  5. Teraz zmień źródło danych przez kliknięcie Zmień i wybierz Pliki baz danych Microsoft Access
  6. Kliknij Przeglądaj, aby wybrać utworzoną bazę danych

Teraz w Button ClickEvent wklej te kod, który będzie pobrać dane z bazy danych i pokaże go w etykiecie

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 
Powiązane problemy