使用SqlDataAdapter.Update方法时为空数据集

时间:2017-08-15 03:49:56

标签: c# sql sql-server datagridview

我正在尝试通过在dataGridView(Windows窗体)中编辑它们来更新数据库中的值。但是,在下面的代码中调用SqlDataAdapter.Update()时,它表示我的DataSet为null。我在网上搜索过,发现在GetChanges()之后添加AcceptChanges()对大多数人都有效,但这并没有解决我的错误。

以下是我尝试使用的代码,感谢任何帮助。

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
    {
        carHireDataSetBindingSource.EndEdit();

        string connectionString = "Data Source=SQLServer;Initial Catalog=CarHire;Integrated Security=True";
        string selectCommand = "SELECT * FROM CarHire.dbo.Customer";

        SqlConnection con = new SqlConnection(connectionString);
        con.Open();

        DataSet ds = carHireDataSet.GetChanges();
        carHireDataSet.AcceptChanges();
        DataAdapter da = new SqlDataAdapter(selectCommand, connectionString);
        da.Update(ds);

        con.Close();
    }

编辑:试过这个,仍然是同样的错误。

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
    {
        carHireDataSetBindingSource.EndEdit();

        string connectionString = "Data Source=SQLServer;Initial Catalog=CarHire;Integrated Security=True";
        string selectCommand = "SELECT * FROM CarHire.dbo.Customer";

        SqlConnection con = new SqlConnection(connectionString);
        con.Open();

        DataTable dt = carHireDataSet.Tables["Customer"].GetChanges();
        DataSet ds = new DataSet();
        ds.Tables.Add(dt);
        ds.AcceptChanges();
        DataAdapter da = new SqlDataAdapter(selectCommand, connectionString);
        da.Update(ds);

        con.Close();
    }

1 个答案:

答案 0 :(得分:0)

我认为在用户完成编辑行时执行更新会更好。

将代码从CellEndEdit事件移至RowValidated事件。

private void dataGridView1_RowValidated(object sender, DataGridViewCellEventArgs e)
{
    //Here place your code to update
}