次の方法で共有


OleDbDataAdapter.RowUpdating イベント

Update 処理中に、データ ソースに対してコマンドが実行される前に発生します。更新が試行されると、このイベントが発生します。

Public Event RowUpdating As OleDbRowUpdatingEventHandler
[C#]
public event OleDbRowUpdatingEventHandler RowUpdating;
[C++]
public: __event OleDbRowUpdatingEventHandler* RowUpdating;

[JScript] JScript では、このクラスで定義されているイベントを処理できます。ただし、独自に定義することはできません。

イベント データ

イベント ハンドラが、このイベントに関連するデータを含む、OleDbRowUpdatingEventArgs 型の引数を受け取りました。次の OleDbRowUpdatingEventArgs プロパティには、このイベントの固有の情報が記載されます。

プロパティ 説明
Command Update の実行時に実行する OleDbCommand を取得または設定します。
Errors (RowUpdatingEventArgs から継承されます) Command の実行時に .NET Framework データ プロバイダが生成したエラーを取得します。
Row (RowUpdatingEventArgs から継承されます) Update を通じて送信する DataRow を取得します。
StatementType (RowUpdatingEventArgs から継承されます) 実行する SQL ステートメントの種類を取得します。
Status (RowUpdatingEventArgs から継承されます) Command プロパティの UpdateStatus を取得します。
TableMapping (RowUpdatingEventArgs から継承されます) Update を通じて送信する DataTableMapping を取得します。

解説

Update を使用すると、データ行が更新されるたびに 2 つのイベントが発生します。次の順序で処理が実行されます。

  1. DataRow 内の値が、パラメータ値に移動されます。
  2. OnRowUpdating イベントが発生します。
  3. コマンドが実行されます。
  4. コマンドが FirstReturnedRecord に設定されている場合は、最初に返された結果が DataRow に格納されます。
  5. 出力パラメータがある場合は、それが DataRow に格納されます。
  6. OnRowUpdated イベントが発生します。
  7. AcceptChanges が呼び出されます。

使用例

[Visual Basic, C#, C++] RowUpdating イベントと RowUpdated イベントを使用する例を次に示します。

 
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] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

参照

OleDbDataAdapter クラス | OleDbDataAdapter メンバ | System.Data.OleDb 名前空間