如何通过单击按钮将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"(,程序会显示异常。
我做错了什么?
这是在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)
...
}
}