0

MS Access データベースのデータをフォームのテキスト ボックスにバインドできました。しかし、データを更新しても、データベースは変更されません。私の問題を示すために簡単な例を作成しました。フォームには、2 つのテキスト ボックス (txtFirstName と txtLastName) と 2 つのボタン (保存と更新) のみが含まれます。Refresh は、データベースから DataTable をリロードするだけです。ID 1 のレコードを読み込み、更新を試みます。コードは以下です。テキストボックスを更新すると、DataTable も更新されることを知っています。ただし、OleDbCommandBuilder によって Update コマンドが生成されないため、データ アダプタの Update 関数は何もしません。誰が私が間違っているのか教えてもらえますか?

本当にありがとう!


    // Global data
    public DataTable CaseTable = new DataTable();
    private OleDbCommand dbCmd;
    private OleDbDataAdapter adapter;
    private OleDbCommandBuilder builder;
    private OleDbConnection dbConn = null;

    public frmCustomer()
    {
        InitializeComponent();
        CaseTable.Columns.Add("ID");
        CaseTable.Columns.Add("FirstName");
        CaseTable.Columns.Add("LastName");
        this.txtFirstName.DataBindings.Add("Text", CaseTable, "FirstName"); //, true, DataSourceUpdateMode.OnPropertyChanged);
        this.txtLastName.DataBindings.Add("Text", CaseTable, "LastName"); //, true, DataSourceUpdateMode.OnPropertyChanged);
    }

    private void frmCustomer_Load(object sender, EventArgs e)
    {
        dbConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Customers.accdb");
        dbCmd = new OleDbCommand("Select * From Customers Where ID = 1", dbConn);
        adapter = new OleDbDataAdapter(dbCmd);
        builder = new OleDbCommandBuilder(adapter);
        RefreshForm();
    }

    private void RefreshForm()
    {
        CaseTable.Clear();
        adapter.Fill(CaseTable);

        if (CaseTable.Rows.Count < 1)
        {
            MessageBox.Show("Item Not Found", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return;
        }
    }

    private void btnSave_Click(object sender, EventArgs e)
    {
        if (adapter.Update(CaseTable) < 1)
            MessageBox.Show("No updates");
    }

    private void btnRefresh_Click(object sender, EventArgs e)
    {
        RefreshForm();
    }
4

1 に答える 1