5

如何读取 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 ​​匹配'System.Data.Common.DbDataReader.GetString(int)' 的最佳重载方法有一些无效参数。2. 错误 2 参数 '1':无法从 'string' 转换为 'int'

4

7 回答 7

7

试试这个,

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

希望这可以帮助,

于 2013-02-28T06:39:19.413 回答
1

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

在您的特定情况下,“FirstName”是索引为 1 的第二列:

listBox1.Text = Reader.GetString(1);

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

于 2013-02-28T05:51:39.627 回答
1

改变

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

listBox1.Text = Reader.GetString(0); // zero base ordinal of column
于 2013-02-28T05:54:25.507 回答
1

你使用 While 循环

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

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

另外:如果您想从列中检索 valmue,我建议您使用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();
}

请注意,这将为您提供表中的第一个“名字”。而且由于没有"order by firstname""where someKey = 1"- 这可能不会像您预期的那样。

于 2013-02-28T06:03:09.253 回答
1

如果您想创建 MS Access 数据库并访问它,并在某些组件中显示数据,像这里我将向您展示。如何连接 MS Access 数据库并在标签中显示数据库中的数据。 首先创建任何 Access 数据库,例如此处的“PirFahimDataBase”。现在在您的 Visual Studio 中,转到菜单并执行此操作

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

现在在 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
于 2014-03-02T13:28:17.943 回答
0

您的错误在这一行:

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

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

于 2013-02-28T05:52:26.937 回答
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
于 2016-05-07T04:48:49.077 回答