Occurs during Update after a command is executed against the data source. The attempt to update is made, so the event fires.
[Visual Basic]
Public Event RowUpdated As OleDbRowUpdatedEventHandler
[C#]
public event OleDbRowUpdatedEventHandler RowUpdated;
[C++]
public: __event OleDbRowUpdatedEventHandler* RowUpdated;
[JScript] In JScript, you can handle the events defined by a class, but you cannot define your own.
Event Data
The event handler receives an argument of type OleDbRowUpdatedEventArgs containing data related to this event. The following OleDbRowUpdatedEventArgs properties provide information specific to this event.
| Property | Description |
| Command | Gets the OleDbCommand executed when Update is called. |
| Errors (inherited from RowUpdatedEventArgs) | Gets any errors generated by the .NET Framework data provider when the Command was executed. |
| RecordsAffected (inherited from RowUpdatedEventArgs) | Gets the number of rows changed, inserted, or deleted by execution of the SQL statement. |
| Row (inherited from RowUpdatedEventArgs) | Gets the DataRow sent through an Update. |
| StatementType (inherited from RowUpdatedEventArgs) | Gets the type of SQL statement executed. |
| Status (inherited from RowUpdatedEventArgs) | Gets the UpdateStatus of the Command property. |
| TableMapping (inherited from RowUpdatedEventArgs) | Gets the DataTableMapping sent through an Update. |
Remarks
When using Update, there are two events that occur per data row updated. The order of execution is as follows:
- The values in the DataRow are moved to the parameter values.
- The OnRowUpdating event is raised.
- The command executes.
- If the command is set to FirstReturnedRecord, then the first returned result is placed in the DataRow.
- If there are output parameters, they are placed in the DataRow.
- The OnRowUpdated event is raised.
- AcceptChanges is called.
Example
[Visual Basic, C#, C++] The following example shows the RowUpdating and RowUpdated events in use.
[Visual Basic]
Imports System
Imports System.Data
Imports System.Data.OleDb
Public Class Sample
public Shared Sub Main()
Dim nwindConn As OleDbConnection = New OleDbConnection("Provider=SQLOLEDB;Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind")
Dim custDA As OleDbDataAdapter = New OleDbDataAdapter("SELECT * FROM Customers WHERE CustomerID = 'ALFKI'", nwindConn)
custDA.InsertCommand = New OleDbCommand("INSERT INTO Customers (CustomerID, CompanyName) VALUES(?, ?)", nwindConn)
custDA.InsertCommand.Parameters.Add("@CustomerID", OleDbType.VarChar, 5, "CustomerID")
custDA.InsertCommand.Parameters.Add("@CompanyName", OleDbType.VarChar, 30, "CompanyName")
nwindConn.Open()
Dim custDS As DataSet = New DataSet()
custDA.Fill(custDS, "Customers")
Dim custRow As DataRow = custDS.Tables("Customers").NewRow()
custRow("CustomerID") = "NEWCO"
custRow("CompanyName") = "New Company"
custDS.Tables("Customers").Rows.Add(custRow)
' add handlers
AddHandler custDA.RowUpdating, New OleDbRowUpdatingEventHandler( AddressOf OnRowUpdating )
AddHandler custDA.RowUpdated, New OleDbRowUpdatedEventHandler( AddressOf OnRowUpdated )
custDA.Update(custDS, "Customers")
' remove handlers
RemoveHandler custDA.RowUpdating, New OleDbRowUpdatingEventHandler( AddressOf OnRowUpdating )
RemoveHandler custDA.RowUpdated, New OleDbRowUpdatedEventHandler( AddressOf OnRowUpdated )
Dim myRow As DataRow
For Each myRow In custDS.Tables("Customers").Rows
If myRow.HasErrors Then Console.WriteLine(myRow.RowError)
Next
nwindConn.Close()
End Sub
protected Shared Sub OnRowUpdating(sender As Object, args As OleDbRowUpdatingEventArgs)
If args.StatementType = StatementType.Insert Then
Dim tw As System.IO.TextWriter = System.IO.File.AppendText("Inserts.log")
tw.WriteLine("{0}: Customer {1} Inserted.", DateTime.Now, args.Row("CustomerID"))
tw.Close()
End If
End Sub
protected Shared Sub OnRowUpdated(sender As Object, args As OleDbRowUpdatedEventArgs)
If args.Status = UpdateStatus.ErrorsOccurred Then
args.Row.RowError = args.Errors.Message
args.Status = UpdateStatus.SkipCurrentRow
End If
End Sub
End Class
[C#]
using System;
using System.Data;
using System.Data.OleDb;
public class Sample
{
public static void Main()
{
OleDbConnection nwindConn = new OleDbConnection("Provider=SQLOLEDB;Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind");
OleDbDataAdapter custDA = new OleDbDataAdapter("SELECT * FROM Customers WHERE CustomerID = 'ALFKI'", nwindConn);
custDA.InsertCommand = new OleDbCommand("INSERT INTO Customers (CustomerID, CompanyName) VALUES(?, ?)", nwindConn);
custDA.InsertCommand.Parameters.Add("@CustomerID", OleDbType.VarChar, 5, "CustomerID");
custDA.InsertCommand.Parameters.Add("@CompanyName", OleDbType.VarChar, 30, "CompanyName");
nwindConn.Open();
DataSet custDS = new DataSet();
custDA.Fill(custDS, "Customers");
DataRow custRow = custDS.Tables["Customers"].NewRow();
custRow["CustomerID"] = "NEWCO";
custRow["CompanyName"] = "New Company";
custDS.Tables["Customers"].Rows.Add(custRow);
// add handlers
custDA.RowUpdating += new OleDbRowUpdatingEventHandler( OnRowUpdating );
custDA.RowUpdated += new OleDbRowUpdatedEventHandler( OnRowUpdated );
custDA.Update(custDS, "Customers");
// remove handlers
custDA.RowUpdating -= new OleDbRowUpdatingEventHandler( OnRowUpdating );
custDA.RowUpdated -= new OleDbRowUpdatedEventHandler( OnRowUpdated );
foreach (DataRow myRow in custDS.Tables["Customers"].Rows)
{
if (myRow.HasErrors)
Console.WriteLine(myRow.RowError);
}
nwindConn.Close();
}
protected static void OnRowUpdating(object sender, OleDbRowUpdatingEventArgs args)
{
if (args.StatementType == StatementType.Insert)
{
System.IO.TextWriter tw = System.IO.File.AppendText("Inserts.log");
tw.WriteLine("{0}: Customer {1} Inserted.", DateTime.Now, args.Row["CustomerID"]);
tw.Close();
}
}
protected static void OnRowUpdated(object sender, OleDbRowUpdatedEventArgs args)
{
if (args.Status == UpdateStatus.ErrorsOccurred)
{
args.Row.RowError = args.Errors.Message;
args.Status = UpdateStatus.SkipCurrentRow;
}
}
}
[C++]
#using <mscorlib.dll>
#using <System.dll>
#using <System.Data.dll>
#using <System.Xml.dll>
using namespace System;
using namespace System::Data;
using namespace System::Data::OleDb;
public __gc class Sample
{
public:
static void OnRowUpdating(Object* /*sender*/, OleDbRowUpdatingEventArgs* args)
{
if (args->StatementType == StatementType::Insert)
{
System::IO::TextWriter* tw = System::IO::File::AppendText(S"Inserts.log");
tw->WriteLine(S" {0}: Customer {1} Inserted.", __box(DateTime::Now), args->Row->Item[S"CustomerID"]);
tw->Close();
}
}
static void OnRowUpdated(Object* /*sender*/, OleDbRowUpdatedEventArgs* args)
{
if (args->Status == UpdateStatus::ErrorsOccurred)
{
args->Row->RowError = args->Errors->Message;
args->Status = UpdateStatus::SkipCurrentRow;
}
}
};
int main()
{
OleDbConnection* nwindConn = new OleDbConnection(S"Provider=SQLOLEDB;Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind");
OleDbDataAdapter* custDA = new OleDbDataAdapter(S"SELECT * FROM Customers WHERE CustomerID = 'ALFKI'", nwindConn);
custDA->InsertCommand = new OleDbCommand(S"INSERT INTO Customers (CustomerID, CompanyName) VALUES(?, ?)", nwindConn);
custDA->InsertCommand->Parameters->Add(S"@CustomerID", OleDbType::VarChar, 5, S"CustomerID");
custDA->InsertCommand->Parameters->Add(S"@CompanyName", OleDbType::VarChar, 30, S"CompanyName");
nwindConn->Open();
DataSet* custDS = new DataSet();
custDA->Fill(custDS, S"Customers");
DataRow* custRow = custDS->Tables->Item[S"Customers"]->NewRow();
custRow->Item[S"CustomerID"] = S"NEWCO";
custRow->Item[S"CompanyName"] = S"New Company";
custDS->Tables->Item[S"Customers"]->Rows->Add(custRow);
// add handlers
custDA->add_RowUpdating( new OleDbRowUpdatingEventHandler(0, Sample::OnRowUpdating) );
custDA->add_RowUpdated( new OleDbRowUpdatedEventHandler(0, Sample::OnRowUpdated) );
custDA->Update(custDS, S"Customers");
// remove handlers
custDA->remove_RowUpdating( new OleDbRowUpdatingEventHandler(0, Sample::OnRowUpdating) );
custDA->remove_RowUpdated( new OleDbRowUpdatedEventHandler(0, Sample::OnRowUpdated) );
System::Collections::IEnumerator* myEnum = custDS->Tables->Item[S"Customers"]->Rows->GetEnumerator();
while (myEnum->MoveNext())
{
DataRow* myRow = __try_cast<DataRow*>(myEnum->Current);
if (myRow->HasErrors)
Console::WriteLine(myRow->RowError);
}
nwindConn->Close();
}
[JScript] No example is available for JScript. To view a Visual Basic, C#, or C++ example, click the Language Filter button
in the upper-left corner of the page.
Requirements
Platforms: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family
See Also
OleDbDataAdapter Class | OleDbDataAdapter Members | System.Data.OleDb Namespace