作为一个快速的背景,我是数据库编程的初学者,所以请原谅我,如果我在这里发布的任何内容都没有意义或完全是愚蠢的。
我正在尝试创建一个允许用户连接到他们选择的.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所做的任何更改都应用于原始数据库。
如果答案是否定的,我该如何创建“绑定”或将行添加到数据库?
答案 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);