ユーザーに次のことを許可するプログラムを作成しています。
- ユーザーが指定する (任意の) データベースに接続する
- そのデータベース内のすべてのテーブルを個別の DataGridViews で表示する
- プログラムでそれらを編集し、ランダム データを生成し、結果を確認します。
- これらの変更をコミットするか元に戻すかを選択します
そこで私は DataSet クラスを発見しました。これは、データベースが保持できるすべてのものを保持できるように見えます。ここで行う最善の方法は、すべてを 1 つのデータセットにロードし、ユーザーに編集させてからデータセットを保存することであると判断しました。データベースに戻ります。問題は、データベース テーブルをロードする唯一の方法が次のとおりであることです。
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 クエリを提供する必要があると言われました。この種のものを私のために処理するクラスを持つことのすべてのポイントを否定していませんか?
とにかく、データベースをデータセットにロードして保存する方法を誰かが説明してくれることを願っています。私はいつでも自分でコマンドを一緒に解析できましたが、それは最善の解決策とは思えません。