0

グリッドビューを編集した後、データベースへの変更を更新できません。エラーはスローされませんが、データベースのテーブルで変更が更新されません。ここでは SQL サーバーを使用しており、Form1 と Form 2 という 2 つの Winform があります。gridview(Form2)でデータを編集して更新しようとすると、変更が更新されません。助けてください

以下は私のフォーム1です:

    namespace Tailor_app
{
    public partial class Form1 : Form
    {
        DataSet ds = new DataSet();
        SqlConnection con = new SqlConnection("server=(local);Database=MSNETDB;Integrated Security=true;");
        SqlDataAdapter da;
        DataTable dt;

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        //SqlConnection con = new SqlConnection("server=(local);Database=MSNETDB;Integrated Security=true;");
        txtFirstName.Focus();
        da = new SqlDataAdapter("select * from Measurement", con);
        da.Fill(ds, "Measurement");
        dt = ds.Tables["Measurement"];
        SqlCommandBuilder cb = new SqlCommandBuilder(da);
        cb.ConflictOption = ConflictOption.CompareAllSearchableValues;
    }

    private void btnSave_Click(object sender, EventArgs e)
    {
            DataRow dr = dt.NewRow();
            dr["CellNumber"] = txtCellNo.Text.Trim();
            dr["FirstName"] = txtFirstName.Text;
            dr["LastName"] = txtLastName.Text;
            dr["Shirt"] = txtShirt.Text;
            dr["Pant"] = txtPant.Text;
            dr["DueDate"] = txtDueDate.Text;
            dr["Date"] = txtDate.Text;
            if (dr["CellNumber"] == "")
            {
                MessageBox.Show("Please enter Cell Number");
            }
            else if (dr["CellNumber"] != "")
            {
                dt.Rows.Add(dr);
                MessageBox.Show("Success");
            }

                try
                {
                    da.Update(ds, "Measurement");
                }
                catch (DBConcurrencyException ex)
                {
                    MessageBox.Show(ex.Message);
                    dt.Clear();
                    da.Fill(ds, "Measurement");
                }
        }

    private void btnSearchAllCustomers_Click(object sender, EventArgs e)
    {
        this.Hide();
        frmDgv_SearchResult frm2 = new frmDgv_SearchResult();
        frm2.Show();

        using (da = new SqlDataAdapter())
        {
            try
            {
                da.SelectCommand = new SqlCommand("Select * From Measurement", con);
                ds.Clear();
                da.Fill(ds,"Measurement");
                dt = ds.Tables["Measurement"];
                frm2.dgvSearchResults.DataSource = dt;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
        }
    }
}

}

以下は私のフォーム2です:

namespace Tailor_app
{

public partial class frmDgv_SearchResult : Form
{
    DataSet ds = new DataSet();
    SqlConnection con = new SqlConnection("server=(local);Database=MSNETDB;Integrated Security=true;");
    SqlDataAdapter da;
    DataTable dt;

    public frmDgv_SearchResult()
    {
        InitializeComponent();
    }

    private void dgvSearchResults_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {

    }

      private void frmDgv_SearchResult_Load(object sender, EventArgs e)
    {
        da = new SqlDataAdapter("select * from Measurement", con);
        da.Fill(ds, "Measurement");
        dt = ds.Tables["Measurement"];
        SqlCommandBuilder cb = new SqlCommandBuilder(da);
        cb.ConflictOption = ConflictOption.CompareAllSearchableValues;
    }

    private void btnUpdate_Click(object sender, EventArgs e)
    {
        try
            {
                da.Update(ds, "Measurement");
            }
            catch (DBConcurrencyException ex)
            {
                MessageBox.Show(ex.Message);
                dt.Clear();
                da.Fill(ds, "Measurement");
            }
            finally
            {
                MessageBox.Show("success");
            }
        }
4

3 に答える 3

1

dt.AcceptChanges();挿入、更新、または削除した後に行う必要があります。AcceptChanges前回のAcceptChanges呼び出し以降にデータテーブルに加えられたすべての変更をコミットします

于 2013-02-04T15:15:05.300 に答える
0

私の場合は次のようになります。

da.Fill(dt)

Dim cb As SqlCommandBuilder = New SqlCommandBuilder(da)

da.MissingSchemaAction = MissingSchemaAction.AddWithKey     ' includes default field value settings
da.InsertCommand = cb.GetInsertCommand      ' instantiate for transaction
da.UpdateCommand = cb.GetUpdateCommand
于 2013-02-04T18:26:05.067 に答える
0

データ アダプタの更新コマンドをリクエストしてみてください:-

  private void frmDgv_SearchResult_Load(object sender, EventArgs e)
    {
        da = new SqlDataAdapter("select * from Measurement", con);
        da.Fill(ds, "Measurement");
        dt = ds.Tables["Measurement"];
        SqlCommandBuilder cb = new SqlCommandBuilder(da);

        cb.GetInsertCommand();
        cb.GetUpdateCommand();
        cb.GetDeleteCommand();

        cb.ConflictOption = ConflictOption.CompareAllSearchableValues;
    }
于 2013-02-04T15:49:30.327 に答える