从MS Access数据库中获取数据并显示在列表框中

本文关键字:显示 列表 获取 MS Access 数据库 数据 | 更新日期: 2023-09-27 18:01:25

如何读取ms access数据库中的数据并将其显示在列表框中?我有代码在这里,但我有错误。

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

错误如下:1. 最佳重载方法匹配' system . data . common . dbdatareader . getstring (int)'有一些无效参数。2. 错误2参数'1':无法从'string'转换为'int'

从MS Access数据库中获取数据并显示在列表框中

试试这个,

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

然后在你的搜索按钮中插入这个,

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

当您想要在listBox1_SelectedIndexChanged中显示"FirstName"的信息时,如果您想要,可以使用它。这里有一个例子,

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

希望有帮助,

change

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

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

GetString()的形参是int类型,而不是字符串类型。这意味着您必须使用列的索引。

如果"FirstName"是第二列,则索引为1:

listBox1.Text = Reader.GetString(1);
http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbdatareader.getstring.aspx

使用While循环

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

将遍历所选的所有行。如果没有更多的行,reader.Read()返回false

也:如果你想从列中检索值,我建议你用索引ón reader实例来做。就像我的例子。

var value = reader["ColumnName"];

相比,这增加了可读性
var value = reader.GetString(0);

如果你想只显示第一个值-我建议你使用cmd.ExecuteScalar()和适应你的sql只返回你需要的值:

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

请注意,this将给你表中的第一个 "FirstName"。由于没有"order by firstname""where someKey = 1" -这可能不会返回您期望的结果。

如果你想创建MS Access数据库并访问它,并在某些组件中显示数据,就像这里我将向你展示。如何连接MS Access数据库并在标签中显示数据库中的数据。首先创建任何Access数据库,比如这里的"PirFahimDataBase"。现在在Visual Studio的菜单中输入

  1. 点击数据
  2. 添加新数据库
  3. 单击Next
  4. 点击新建连接
  5. 现在通过点击更改来更改数据源,并选择Microsoft Access数据库文件
  6. 单击Browse选择您创建的数据库

现在在Button ClickEvent中粘贴这些代码,它将从数据库中获取数据并将其显示在标签

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

您的错误在这一行:

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

必须在GetString()函数中传递一个数字

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