我正在编写一个程序,让用户:
所以我发现了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查询。难道不是这样就否定了让班级为我处理这些事情的全部意义吗?
无论如何,我希望有人可以解释如何将数据库加载并保存到数据集中,或者让我更好地了解如何做我正在尝试做的事情。我总是可以自己解析命令,但这似乎不是最好的解决方案。
答案 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);