1

私はDataTable/DataAdapterアーキテクチャを使用して、データベースとモデル オブジェクトの間を仲介します。データベースに 2 つのテーブルがあり、dataGridView2 つのウィンドウ フォームに 2 つのテーブルがあります。GetData最初に、メソッドを呼び出して最初のdataGridView. 無事埋まりました。次に、その中の任意のフィールドを変更して を呼び出しますUpdateTableChanges。変更された行も正常に db に追加されます。GetData次に、もう一度呼び出して second を埋めdataGridViewますが、行が返されません。また、2回目の呼び出し中にエラーはありませんGetData 。しかし、私が呼び出さず、2回目に呼び出すUpdateTableChangesGetData、すべての行が返されます。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;
    }
4

0 に答える 0