私はDataTable/DataAdapter
アーキテクチャを使用して、データベースとモデル オブジェクトの間を仲介します。データベースに 2 つのテーブルがあり、dataGridView
2 つのウィンドウ フォームに 2 つのテーブルがあります。GetData
最初に、メソッドを呼び出して最初のdataGridView
. 無事埋まりました。次に、その中の任意のフィールドを変更して を呼び出しますUpdateTableChanges
。変更された行も正常に db に追加されます。GetData
次に、もう一度呼び出して second を埋めdataGridView
ますが、行が返されません。また、2回目の呼び出し中にエラーはありませんGetData
。しかし、私が呼び出さず、2回目に呼び出すUpdateTableChanges
とGetData
、すべての行が返されます。UpdateTableChanges
メソッドの後にいくつかの問題があります。このメソッドが私の_adapter
. 呼び出さないと行が返されるため、すべてのメソッドのすべてのパラメーターが正しいUpdateTableChanges
. アダプターがデータベースを更新した後に行を取得するには、何を変更する必要がありますか? どんな助けでも素晴らしいでしょう。理解を深めるために、try/catch ブロックを削除します。
class DBModel
{
private readonly string _connectionString;
private MySqlDataAdapter _adapter;
private MySqlConnection _connection;
public DBModel()
{
_connectionString = "SERVER = localhost; DATABASE = transportation; USER ID = root;";
_connection = new MySqlConnection(_connectionString);
_adapter = new MySqlDataAdapter(String.Empty, _connection);
}
public BindingSource GetData(string selectCommand)
{
var bindingSource = new BindingSource();
SetMySqlSelectCommand(selectCommand);
var commandBuilder = new MySqlCommandBuilder(_adapter);
var table = new DataTable();
_adapter.Fill(table);
bindingSource.DataSource = table;
return bindingSource;
}
public void UpdateTableChanges(BindingSource bindingSource, string selectCommand)
{
SetMySqlSelectCommand(selectCommand);
_adapter.Update((DataTable)bindingSource.DataSource);
}
private void SetMySqlSelectCommand(string selectCommand)
{
var mySqlCommand = _connection.CreateCommand();
mySqlCommand.CommandText = selectCommand;
_adapter.SelectCommand = mySqlCommand;
}