如何通过单击按钮将DataGridView中更改的数据发送到数据库(Access)

本文关键字:数据 数据库 Access 按钮 单击 何通过 DataGridView | 更新日期: 2023-09-27 18:00:54

我看到了很多关于这方面的问题和答案,但就是不知道我的代码出了什么问题。

我以这种方式显示数据库中的表:

public void refreshTable() {
            string conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb";
            OleDbConnection connection = new OleDbConnection(conStr);
            OleDbDataAdapter adapter = new OleDbDataAdapter();
            connection.Open();
            OleDbCommand command = new OleDbCommand("SELECT * FROM " + 
                comboBox1.Text, connection); //comboBox1 have table name
            connection.Close();
            adapter.SelectCommand = command;
            DataSet dataSet = new DataSet();
            adapter.Fill(dataSet);
            dataGridView1.DataSource = dataSet.Tables[0];
            adapter.Update(dataSet);
        }

每个人都会讲述这件事:http://tech.pro/tutorial/664/csharp-tutorial-binding-a-datagridview-to-a-database

我试着用这种方式使用这个链接的代码:

private void saveButton_Click(object sender, EventArgs e) {
            string conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb";
            OleDbConnection connection = new OleDbConnection(conStr);
            OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM " + 
                comboBox1.Text, connection);
            BindingSource bSource = new BindingSource();
            DataTable dTable = new DataTable();
            adapter.Fill(dTable);
            bSource.DataSource = dTable;
            dataGridView1.DataSource = bSource;
            adapter.Update(dTable);
        }

一切看起来都很好,但当我按下按钮(调用saveButton_Click(时,我在DataGridView中所做的所有更改都是撤消的,数据库仍然相同。所以基本上它只是再次将DataGridView从数据库加载到DataGridView。

但如果我在DataGridView中写了不正确的东西(键值"asdasd"或日期"qwer"(,程序会显示异常。

我做错了什么?

如何通过单击按钮将DataGridView中更改的数据发送到数据库(Access)

这是在VB和Mysql服务器中,但ADO的基础是相同的

Dim CS As New MySqlConnection(My.Settings.myConnectionString)
Dim da As New MySqlDataAdapter("SELECT * FROM " + 
            comboBox1.Text, CS)
Dim ds As New DataSet
Dim cmb As New MySqlCommandBuilder(da)
Dim tableNamesBS As New BindingSource
    Try
    da.Fill(ds, "test")
    datagridview1.DataSource = ds.Tables("test")
    tableNamesBS.DataSource = ds.Tables("test")
        Dim x As Integer
        da.UpdateCommand = cmb.GetUpdateCommand
        x = da.Update(ds.Tables("test"))
        MsgBox(x & "Record(s) Updated")
    Catch ex As Exception
        msgbox("Error in " & ex.message)
    End Try

您在Save按钮Click事件中再次加载并填充数据,这就是为什么所有更新的更改都会被删除的原因。

在具有公共变量的不同子系统/函数中具有加载和保存(更新(事件。

所以LoadData((将是

//Global variable for adapter;
DataSet dataSet;
public void LoadData() {
            string conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb";
            OleDbConnection connection = new OleDbConnection(conStr);
            OleDbDataAdapter adapter = new OleDbDataAdapter();
            connection.Open();
            OleDbCommand command = new OleDbCommand("SELECT * FROM " + 
                TABLE_NAME, connection); 
            connection.Close();
            adapter.SelectCommand = command;
            dataSet = new DataSet();
            adapter.Fill(dataSet);
            dataGridView1.DataSource = dataSet.Tables[0];
        }

然后在UpdateData功能中

public void UpdateData()
{
    adapter.update(dataSet);
}

终于拿到了。

public FormExemple : Form
{
    protected string conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb";
    protected OleDbConnection connection;
    protected OleDbDataAdapter adapter;
    ....
    Window_Load()
    {
        connection = new OleDbConnection(conStr);
        ...
        adapter.Fill(dTable);
        cb = new OleDbCommandBuilder(adapter);
        adapter.InsertCommand = cb.GetInsertCommand();
        //and other commands
        ...
    }
    Button_Click()
    {
        ...
        adapter.Update(dTable)
        ...
    }
}