OleDb数据库到DataSet并返回c#?

时间:2010-03-23 18:22:04

标签: c# database dataset oledb oledbconnection

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

  1. 连接到用户指定的(任意)数据库
  2. 在单独的DataGridViews
  3. 中查看该数据库中的所有表
  4. 在程序中编辑它们,生成随机数据,并查看结果
  5. 选择提交这些更改或还原
  6. 所以我发现了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查询。难道不是这样就否定了让班级为我处理这些事情的全部意义吗?

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

1 个答案:

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