1

作为一个快速背景,我是数据库编程的初学者,所以如果我在这里发布的任何内容没有意义或完全愚蠢,请原谅我。

我正在尝试制作一个 WinForm 应用程序,它允许用户连接到他们选择的 .mdb Access 97 数据库,允许用户进行更改(例如,在 WinForm 上添加新数据行,然后将其应用于原始 .mdb数据库),并在需要时在不同的 .mdb Access 97 数据库之间同步这些更改。

让您了解我到目前为止的情况。我已经使用 C# 成功连接到一个 .mdb Access 97 数据库,并将数据库表内容输出到一个DataSet对象中,然后我将其转储到一个对象中C1FlexGrid(代码稍后会跟随)。现在在任何人提及之前,我无法将数据库文件升级到更新版本,因此它必须保留为 Access 97 版本文件。

这是我用来连接的代码:

dbConnection  = new OleDbConnection(@"Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + path);
dbCommand     = new OleDbCommand("SELECT * from MAIN", dbConnection);
dbDataAdapter = new OleDbDataAdapter(dbCommand);

dbDataSet = new DataSet("MasterLanguageDB");
dbConnection.Open();
dbConnectionIsOpen = true;

// connection is successful, unlock connected mode features
EnterDatabaseConnectedMode();

dbDataAdapter.Fill(dbDataSet);
flexGrid.DataSource = dbDataSet.Tables[0];

我的问题是:我现在用 .mdb 数据库文件内容填充的 C1FlexGrid 是否“绑定”到 .mdb 文件?因为 1,我没有按照 Microsoft 建议的方式通过 Visual Studio 2008 中的添加数据源向导来绑定数据源(因为用户可以连接到他们选择的任何 .mdb 数据库——不仅仅是一个)和 2,我希望对 C1FlexGrid 所做的任何更改都应用于原始数据库。

如果答案是否定的,我如何创建该“绑定”或将行添加到数据库中?

4

1 回答 1

0

Dataset 或 DataTable 等 ADO.NET 类是断开连接的对象。
这意味着他们不能直接更新数据库。

OleDbDataAdapter 有一个名为Update的方法,负责将所有修改后的数据发送到数据库。因此,假设您在某处有一个按钮来保存更改,那么您需要调用 click 事件

  dbDataAdapter.Update(dbDataSet);

但是,这要求您将对象实例保持在类全局级别。
另外一点是需要准备dbDataAdapter.InsertCommand, dbDataAdapter.UpdateCommand and dbDataAdapter.DeleteCommand.

在您设置 SelectCommand 之后,可以使用OleDbCommandBuilder的实例简单地创建这些命令

  dbDataAdapter = new OleDbDataAdapter(dbCommand);
  OleDbCommandBuilder cb = new OleDbCommandBuilder(dbDataAdapter);
于 2013-04-16T21:52:08.170 回答