Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 8 additions & 18 deletions Npgsql/Npgsql/NpgsqlCommandBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -433,24 +433,15 @@ protected override string GetParameterPlaceholder(int parameterOrdinal)
/// <param name="adapter">The <see cref="T:System.Data.Common.DbDataAdapter" /> to be used for the update.</param>
protected override void SetRowUpdatingHandler(DbDataAdapter adapter)
{
var npgsqlAdapter = adapter as NpgsqlDataAdapter;
if (npgsqlAdapter == null)
throw new ArgumentException("adapter needs to be a NpgsqlDataAdapter", "adapter");

/* Disabling this handler makes the ado.net updating code works.
* Check if this code is really necessary or how to implement it correctly.
* By having this handler specified, ADO.Net was reusing strangely NpgsqlParameters when updating datasets.
* See bug 1010973 for more info.
*/

/*
if (!(adapter is NpgsqlDataAdapter))
{
throw new InvalidOperationException("adapter needs to be a NpgsqlDataAdapter");
}

this.rowUpdatingHandler = new NpgsqlRowUpdatingEventHandler(this.RowUpdatingHandler);

((NpgsqlDataAdapter) adapter).RowUpdating += this.rowUpdatingHandler;
*/

// Being called twice for the same adapter means unregister
if (adapter == DataAdapter)
npgsqlAdapter.RowUpdating -= RowUpdatingHandler;
else
npgsqlAdapter.RowUpdating += RowUpdatingHandler;
}

/// <summary>
Expand All @@ -459,7 +450,6 @@ protected override void SetRowUpdatingHandler(DbDataAdapter adapter)
/// <param name="sender">The sender</param>
/// <param name="e">A <see cref="NpgsqlRowUpdatingEventArgs"/> instance containing information about the event.</param>
private void RowUpdatingHandler(object sender, NpgsqlRowUpdatingEventArgs e)

{
base.RowUpdatingHandler(e);
}
Expand Down
26 changes: 26 additions & 0 deletions tests/DataAdapterTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@

using System;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI.WebControls;
using Npgsql;

Expand Down Expand Up @@ -419,6 +420,31 @@ public void DbDataAdapterCommandAccess()
System.Data.Common.DbDataAdapter common = da;
Assert.IsNotNull(common.SelectCommand);
}

[Test, Description("Makes sure that the INSERT/UPDATE/DELETE commands are auto-populated on NpgsqlDataAdapter (issue #179)")]
public void AutoPopulateAdapterCommands()
{
var da = new NpgsqlDataAdapter("SELECT field_pk,field_int4 FROM data", Conn);
var builder = new NpgsqlCommandBuilder(da);
var ds = new DataSet();
da.Fill(ds);

var table = ds.Tables[0];
var row = table.NewRow();
row["field_pk"] = 1;
row["field_int4"] = 8;
table.Rows.Add(row);
da.Update(ds);
Assert.That(ExecuteScalar(@"SELECT field_int4 FROM data"), Is.EqualTo(8));

row["field_int4"] = 9;
da.Update(ds);
Assert.That(ExecuteScalar(@"SELECT field_int4 FROM data"), Is.EqualTo(9));

row.Delete();
da.Update(ds);
Assert.That(ExecuteScalar(@"SELECT COUNT(*) FROM data"), Is.EqualTo(0));
}
}
/*
[TestFixture]
Expand Down