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 つのイベントが発生します。次の順序で処理が実行されます。
- DataRow 内の値が、パラメータ値に移動されます。
- OnRowUpdating イベントが発生します。
- コマンドが実行されます。
- コマンドが FirstReturnedRecord に設定されている場合は、最初に返された結果が DataRow に格納されます。
- 出力パラメータがある場合は、それが DataRow に格納されます。
- OnRowUpdated イベントが発生します。
- 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 名前空間