База данных OleDb для DataSet и обратно в C #? - PullRequest
0 голосов
/ 23 марта 2010

Я пишу программу, которая позволяет пользователю:

  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. Разве это не сводит на нет весь смысл наличия класса, чтобы справиться с этим для меня?

В любом случае, я надеюсь, что кто-нибудь может объяснить, как загрузить и сохранить базу данных в наборе данных, или, возможно, дать мне лучшее представление о том, как сделать то, что я пытаюсь сделать. Я всегда мог разобрать команды вместе, но это не лучшее решение.

1 Ответ

1 голос
/ 23 марта 2010

Вы можете создать 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);
...