从MS Access数据库中获取数据,并在一个列表框显示它(Getting data from MS

2019-07-20 17:07发布

如何阅读在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.错误1的最佳重载的方法匹配for'System.Data.Common.DbDataReader.GetString(INT)”有一些无效的参数。 2.错误2参数“1”:不能从“字串”转换为“INT”

Answer 1:

试试这个,

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

这是很好的,当你想显示的信息,使用"FirstName"listBox1_SelectedIndexChanged如果你想。 这里有一个例子,

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

希望这可以帮助,



Answer 2:

更改

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

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


Answer 3:

GetString()采用int作为参数而不是字符串。 这意味着你必须使用列的索引。

在您的具体情况为“姓”是第二列的索引是1:

listBox1.Text = Reader.GetString(1);

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



Answer 4:

你的使用While循环

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

这种移动通过你选择的行。 reader.Read()返回false ,如果没有更多的行。

另外:如果你想从一列retrive valmue我建议你用食指在做reader的实例。 像我的例子。

var value = reader["ColumnName"];

这增加了可读性比较

var value = reader.GetString(0);

UPDATE

如果你想只显示拳头价值-我建议你使用cmd.ExecuteScalar()和适应你的SQL只返回所需的值:

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

要知道这会给你在表中的第一个 “名字”。 而且,由于不存在"order by firstname""where someKey = 1" -这可能不是rturn你的预期。



Answer 5:

如果你想创建MS Access数据库,并对其进行访问,并在某些组件来显示数据,就像在这里,我将展示you.how与MS Access数据库和显示数据从数据库中标签连接。 首先,创建任何Access数据库喜欢这里“PirFahimDataBase”。 现在,在您的Visual Studio转到菜单和做到这一点

  1. 单击数据
  2. 添加新数据基地
  3. 点击下一步
  4. 单击新建连接
  5. 现在,通过单击更改更改数据源,并选择Microsoft Access数据库文件
  6. 点击浏览选择您所创建的数据库

现在,在按钮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


Answer 6:

你的错误是在这一行:

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

您必须在通过一些GetString()函数。



Answer 7:

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


文章来源: Getting data from MS Access database and display it in a listbox