0

我正在编写一个程序,让用户:

  1. 连接到用户指定的(任意)数据库
  2. 在单独的 DataGridViews 中查看该数据库中的所有表
  3. 在程序中编辑它们,生成随机数据,然后查看结果
  4. 选择提交这些更改或还原

所以我发现了 DataSet 类,它看起来能够像数据库一样保存所有内容,我决定在这里做的最好的事情是将所有内容加载到一个数据集中,让用户编辑它,然后保存数据集回到数据库。问题是我能找到加载数据库表的唯一方法是:

set = new DataSet();
DataTable schema = connection.GetOleDbSchemaTable(
    OleDbSchemaGuid.Tables,
    new string[] { null, null, null, "TABLE" });
foreach (DataRow row in schema.Rows)
{
    string tableName = row.Field<string>("TABLE_NAME");
    DataTable dTable = new DataTable();
    new OleDbDataAdapter("SELECT * FROM " + tableName, connection).Fill(dTable);
    dTable.TableName = tableName;
    set.Tables.Add(dTable);
}

虽然似乎应该有一种更简单的方法,因为数据集似乎正是为此目的而设计的。真正的问题是当我尝试保存这些东西时。为了使用 OleDbDataAdapter.Update() 方法,我被告知我必须提供有效的 INSERT 查询。这不是否定了有一个班级为我处理这些东西的全部意义吗?

无论如何,我希望有人可以解释如何将数据库加载和保存到数据集中,或者让我更好地了解如何做我想做的事情。我总是可以自己一起解析命令,但这似乎不是最好的解决方案。

4

1 回答 1

1

您可以创建一个 OleDbAdapter,然后将其配置为处理记录,但您应该提供 Insert、Update 和 Delete 语句,因为 DataSet 本身不知道数据来自哪里;它可以是 Access 数据库或 Xml 或文本文件。

它会是这样的(显然没有经过测试)

DataSet ds = new DataSet("myData");
var da = new OleDbDataAdapter("SELECT * FROM employee", connection);
// filling your dataset
da.Fill(ds);

// Setting up the dataAdapter, could be a stored procedure
da.InsertCommand = new OleDbCommand("INSERT employee (id, name) VALUES (@id, @name)");
da.UpdateCommand = new OleDbCommand("UPDATE employee SET name = @name WHERE id = @id");

// Updating Database from data on DataSet
da.Update(ds);
于 2010-03-23T18:26:57.893 回答