如何使用 C# 在 Access 中创建、更新、删除数据?

Posted

技术标签:

【中文标题】如何使用 C# 在 Access 中创建、更新、删除数据?【英文标题】:How to create, update, delete data in Access using C#? 【发布时间】:2011-04-08 13:40:13 【问题描述】:

我正在使用 Microsoft Visual C# 2008 Express Edition 创建这个项目。 我想使用单选按钮插入数据如何编写代码,例如,我想插入性别(男/女)。请帮我写代码

namespace WindowsFormsApplication1

    public partial class Form1 : Form
    
        public Form1()
        
            InitializeComponent();
        

        OleDbConnection con;
        DataSet ds1;
        OleDbDataAdapter da;

        int MaxRows = 0;
        int inc = 0;

        private void Form1_Load(object sender, EventArgs e)
        
            con = new.OleDbConnection();
            ds1 = new DataSet();

            con.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/MyWorkers1.mdb";

            string sql = "SELECT * from tblWorkers";
            da = new OleDbDataAdapter(sql, con);

            con.Open();
            da.Fill(ds1, "MyWorkers1");
            NavigateRecords();
            MaxRows = ds1.Tables["MyWorkers1"].Rows.Count;
            //MaxRows = ds1.Tables["MyWorkers1"].Rows[inc];
            //MessageBox.Show("Database open");

            con.Close();
            //MessageBox.Show("Database close");

            con.Dispose();
        

        private void NavigateRecords()
        
            DataRow drow = ds1.Tables["MyWorkers1"].Rows[inc];
            textBox1.Text = drow.ItemArray.GetValue(0).ToString();
            textBox2.Text = drow.ItemArray.GetValue(1).ToString();
            textBox3.Text = drow.ItemArray.GetValue(2).ToString();
        

        private void btnNext_Click(object sender, EventArgs e)
        
            if (inc != MaxRows - 1)
            
                inc++;
                NavigateRecords();
            
            else
            
                MessageBox.Show("No More Records");
            
        

        private void btnPrevious_Click(object sender, EventArgs e)
        
            if (inc > 0)
            
                inc--;
                NavigateRecords();
            
            else
            
                MessageBox.Show("First Record");
            
        

        private void btnFirst_Click(object sender, EventArgs e)
        

            if (inc != 0)
            
                inc = 0;
                NavigateRecords();
            
        

        private void btnLast_Click(object sender, EventArgs e)
        
            if (inc != MaxRows - 1)
            
                inc = MaxRows - 1;
                NavigateRecords();
            
        

        private void btnAddNew_Click(object sender, EventArgs e)
        
            textBox1.Clear();
            textBox2.Clear();
            textBox3.Clear();
        

        private void btnSave_Click(object sender, EventArgs e)
        
            System.Data.OleDb.OleDbCommandBuilder cb;
            cb = new System.Data.OleDb.OleDbCommandBuilder(da);

            DataRow drow = ds1.Tables["MyWorkers1"].NewRow();

            drow[0] = textBox1.Text;
            drow[1] = textBox2.Text;
            drow[2] = textBox3.Text;

            ds1.Tables["MyWorkers1"].Rows.Add(drow);

            MaxRows = MaxRows + 1;
            inc = MaxRows - 1;

            da.Update(ds1, "MyWorkers1");

            MessageBox.Show("Record / Entry Added");
               

    

运行时它会在 da.Update(ds1, "MyWorkers1");` 中显示错误

Invalid OperationException Unhandled 连接属性尚未初始化

请帮帮我。

【问题讨论】:

为什么将 OleDbCommandBuilder 放在 btnSave_click 事件中? 好的,我明白了……这太“直观”了:( 【参考方案1】:

您需要像在 FormLoad 方法中一样在 Save 方法中再次打开您的连接。

【讨论】:

【参考方案2】:

更新前你忘记打开连接了。

最佳做法是在事务之前和之后打开和关闭连接。

首先,不要通过从函数中删除 con.Dispose(); 来处理 Form1_Load() 中的连接。

然后在 btnSave_Click 事件处理程序中的更新调用周围添加以下内容:

con.Open();
da.Update(ds1, "MyWorkers1");
con.Close();

这应该可以解决问题。

【讨论】:

@premkumar:请发布一个新问题,因为这是一个不同的主题。 @Berry Ligtermoet:我正在使用 C# 窗口窗体创建新项目,并且我还创建了 ms-access 学生数据库,其中 tblStudent 是其中的表名,我使用三个属性,即(studID、name , 性别)。我已经插入数据,但我想通过选择 studID 使用组合框显示数据(选择 studID 时将显示剩余数据)。

以上是关于如何使用 C# 在 Access 中创建、更新、删除数据?的主要内容,如果未能解决你的问题,请参考以下文章

关于动态使用 C# 代码在 MS ACCESS 中创建数据库

如何在 Microsoft Access 中创建/更新具有复杂表关系的表单中的记录集

如何在 MS Access 2013 中创建只读表?

当数据在 SQL Server 中时,如何通过 ADO 在 Access 中创建报表?

我需要从 mysql 存储过程连接到 Access 数据库来更新我已经在 mysql db 中创建的表

如何使用 SQL 在 Microsoft Access 2013 中创建查找字段?