2013-02-28 16 views
5

Làm cách nào để đọc dữ liệu trong cơ sở dữ liệu truy cập ms và hiển thị nó trong hộp danh sách. Tôi có các mã ở đây nhưng tôi có lỗi.Lấy dữ liệu từ cơ sở dữ liệu MS Access và hiển thị nó trong hộp danh sách

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

các lỗi đang ở đây: 1. Lỗi 1 quá tải tốt nhất phương pháp phù hợp for'System.Data.Common.DbDataReader.GetString (int) có một số đối số không hợp lệ. 2. Lỗi 2 Đối số '1': không thể chuyển đổi từ 'chuỗi' thành 'int'

+0

chuỗi Nhận Gets giá trị của cột được chỉ định như là một chuỗi. và đặc điểm kỹ thuật là số không cơ sở, nếu kết quả truy vấn của bạn trả về một bảng có 5 cột và bạn muốn nhận giá trị của cột thứ 3, hãy gọi hàm này với 2 làm tham số – saeed

Trả lời

5

thử thế này,

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

sau đó trong nút tìm kiếm của bạn, chèn này,

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

Đó là tốt để sử dụng khi bạn muốn hiển thị các thông tin của "FirstName" trong listBox1_SelectedIndexChanged nếu bạn muốn. đây là một ví dụ,

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

hy vọng điều này giúp,

+0

Tôi đã thực hiện hiển thị dữ liệu cụ thể mà tôi muốn hiển thị trong hộp danh sách. Cảm ơn bạn đã giúp đỡ. Bây giờ, những gì tôi muốn là khi tôi nhấp vào hiển thị dữ liệu trong hộp danh sách, tất cả các thông tin khác liên quan đến nó sẽ được hiển thị trong hộp văn bản cá nhân được sử dụng để nhập dữ liệu vào cơ sở dữ liệu. :) – lexter

1

GetString() lấy tham số làm tham số chứ không phải chuỗi. Có nghĩa là bạn phải sử dụng chỉ mục của cột.

Trong bối cảnh cụ thể của bạn là "FirstName" là cột thứ hai chỉ số sẽ là 1:

listBox1.Text = Reader.GetString(1); 

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

+0

@ markoo- Tôi xin lỗi nhưng tôi mới sử dụng C# . Làm thế nào tôi sẽ làm điều đó, làm thế nào tôi sẽ sử dụng chỉ số của cột. :) cảm ơn rất nhiều – lexter

+1

@lexter Nếu Firstname là cột đầu tiên được trả về bởi truy vấn của bạn, thì chỉ mục sẽ là 0, –

+1

@lexter khi bạn đang chọn * từ bảng, đếm từ bên trái bắt đầu từ 0, sau đó khi bạn tiếp cận "Firstname" bạn có chỉ mục. Hoặc bạn chỉ có thể chọn "FirstName", sau đó chỉ mục sẽ là 0. – markoo

0

lỗi của bạn là ở dòng này:

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

Bạn phải chuyển một số trong hàm GetString().

1

thay đổi

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

để

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

Thy sử dụng một vòng lặp khi

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

này di chuyển qua tất cả các hàng bạn đã chọn. reader.Read() trả lại false nếu không còn hàng nào.

Ngoài ra: nếu bạn muốn thử lại valmue từ cột, tôi đề nghị bạn làm điều đó với chỉ mục trong ví dụ reader. Giống như ví dụ của tôi.

var value = reader["ColumnName"]; 

Điều này làm tăng khả năng đọc so với

var value = reader.GetString(0); 

CẬP NHẬT

Nếu bạn chỉ muốn hiển thị giá trị nắm tay - Tôi đề nghị bạn sử dụng cmd.ExecuteScalar() và thích nghi với bạn sql để chỉ trả lại giá trị bạn cần:

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

Lưu ý rằng điều này sẽ cung cấp cho bạn đầu tiên "FirstName" trong bảng. Và vì không có "order by firstname" hoặc "where someKey = 1" - điều này có thể không làm hỏng bạn mong đợi.

+0

cảm ơn :) nhưng mã của bạn đã làm là hiển thị tất cả dữ liệu trong cột "firstname". nếu tôi muốn chỉ hiển thị dữ liệu cụ thể chẳng hạn. Tôi có một dữ liệu có tên "Jens" trong cột đầu tiên và khi tôi gõ nó vào hộp văn bản và bấm vào nút tìm kiếm, nó sẽ chỉ hiển thị "Jens" trong hộp danh sách – lexter

+1

làm thế nào về tải chúng đầu tiên trong danh sách sau đó nếu ur ' searchTextBox.text' bằng một trong các giá trị trong 'List ' dữ liệu sẽ được hiển thị trong 'listBox' – Pyromancer

+0

@AlfredSanz - làm thế nào tôi sẽ làm điều đó.bạn có thể gửi câu trả lời của bạn :) cảm ơn: P – lexter

1

Nếu bạn muốn tạo cơ sở dữ liệu MS Access và truy cập vào nó, và để hiển thị dữ liệu trong một số thành phần, như ở đây tôi sẽ chỉ cho you.how để kết nối với MS Access Data Base và hiển thị dữ liệu từ cơ sở dữ liệu trong Label. Trước hết, hãy tạo bất kỳ cơ sở dữ liệu Access nào như ở đây "PirFahimDataBase". Bây giờ trong Visual Studio của bạn hãy vào menu và thực hiện điều này

  1. Nhấn vào dữ liệu
  2. Thêm cơ sở dữ liệu mới
  3. Kích Next
  4. Bấm vào kết nối mới
  5. Bây giờ thay đổi nguồn dữ liệu bằng nhấp vào Thay đổi và chọn tệp cơ sở dữ liệu Microsoft Access
  6. Nhấp vào Duyệt để chọn cơ sở dữ liệu đã tạo của bạn

Bây giờ trong nút ClickEvent dán các mã mà sẽ lấy dữ liệu từ cơ sở dữ liệu và sẽ hiển thị nó trong nhãn

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