将新行数据从C1FlexGrid添加到Access 97 .mdb数据库C#

时间:2013-04-16 21:25:31

标签: c# oledb ms-access-97

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

我正在尝试创建一个允许用户连接到他们选择的.mdb Access 97数据库的WinForm应用程序,允许用户进行更改(例如,在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数据库文件内容“绑定”到.mdb文件中的C1FlexGrid?因为1,我没有像Microsoft建议的那样通过Visual Studio 2008中的“添加数据源”向导来绑定数据源(因为用户可以连接到他们选择的任何.mdb数据库 - 而不仅仅是一个)和2,我希望我对C1FlexGrid所做的任何更改都应用于原始数据库。

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

1 个答案:

答案 0 :(得分: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);