如何使用OleDBReader和Datagrid提取特定的行信息?

已加入
2013年12月12日
留言内容
6
编程经验
Beginner
嗨,大家好,

我在提取特定的行信息时遇到麻烦。我的数据库包含60多个行,但是每次尝试时,它都会显示特定的行信息。

我究竟做错了什么?

Btn1.Text =阅读器["MenuDescription"] .ToString();我想要来自第99行的提取信息

谢谢

C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb;


namespace Menu
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();


        }


        private void Form1_Load(object sender, EventArgs e)
        {
            //dataGridView1.AllowUserToAddRows = false;


            dataGridView1.Columns.Add("MenuDescription", "Description");
            dataGridView1.Columns.Add("MenuPrice", "Price");


            OleDbConnection connect = new OleDbConnection(); //Creates the connection
            connect.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\chewj\Documents\Visual Studio 2012\Projects\Menu\Menu\POS.accdb;Persist Security Info=False;";
            connect.Open();


            OleDbCommand command = new OleDbCommand();
            command.Connection = connect;
            command.CommandText = "SELECT * FROM MenuInventory";


            OleDbDataReader reader = command.ExecuteReader();


            while (reader.Read())
            {               
                Btn1.Text = reader["MenuDescription"].ToString();
                Btn1.Image = Image.FromFile("C:\\Users\\chewj\\Documents\\Visual Studio 2012\\Projects\\Menu\\Menu\\Olive Garden\\Appetizer\\Caprese Flatbread.png");
                
                dataGridView1.Rows.Add();


                dataGridView1.Rows[0].Cells[0].Value = reader["MenuDescription"].ToString();
                dataGridView1.Rows[0].Cells[1].Value = reader["MenuPrice"].ToString();                
            }


            reader.Close();
            connect.Close();
            //MessageBox.Show("Connection Opened");  //Checks to see if the connection is established
        }
    }
}
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,525
地点
悉尼,澳大利亚
编程经验
10+
您正在为每一行设置按钮的文本。这意味着,在循环结束时,“按钮的文本”将包含最后一行的数据。如果要从特定行中获取数据,则不要从每一行中获取。

您是在说只想从数据库中检索一行,还是要全部检索然后只显示一行?您使用网格的事实暗示了后者,在这种情况下,您应该使用DataTable。您需要编辑数据并保存更改吗?如果是这样,那么您根本不应该使用数据读取器;您应该使用数据适配器并调用Fill来填充DataTable。如果您不需要保存更改,则可以坚持使用数据读取器,然后调用Load on DataTable从数据读取器中进行填充。然后,您可以为DataTable的Rows集合建立索引,以获取所需的行。
 
已加入
2013年12月12日
留言内容
6
编程经验
Beginner
谢谢!实际上,它可以正常工作,但是有新问题。对于我添加的菜单项,每次单击特定按钮时,都需要将该项目的库存数量减少一。我将研究数据填充适配器。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,525
地点
悉尼,澳大利亚
编程经验
10+
谢谢!实际上,它可以正常工作,但是有新问题。对于我添加的菜单项,每次单击特定按钮时,都需要将该项目的库存数量减少一。我将研究数据填充适配器。

新问题=新线程
 
最佳 底部