OleDbDataAdapter.RowUpdating 事件
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
在对数据源执行命令前的 Update(DataSet) 过程中发生。 尝试进行更新。 因此,事件发生。
public:
event System::Data::OleDb::OleDbRowUpdatingEventHandler ^ RowUpdating;
public event System.Data.OleDb.OleDbRowUpdatingEventHandler? RowUpdating;
[System.Data.DataSysDescription("DbDataAdapter_RowUpdating")]
public event System.Data.OleDb.OleDbRowUpdatingEventHandler RowUpdating;
public event System.Data.OleDb.OleDbRowUpdatingEventHandler RowUpdating;
member this.RowUpdating : System.Data.OleDb.OleDbRowUpdatingEventHandler
[<System.Data.DataSysDescription("DbDataAdapter_RowUpdating")>]
member this.RowUpdating : System.Data.OleDb.OleDbRowUpdatingEventHandler
Public Custom Event RowUpdating As OleDbRowUpdatingEventHandler
事件类型
- 属性
示例
以下示例演示正在使用 的 RowUpdating 和 RowUpdated 事件。
public static void CreateDataAdapter(
string connectionString)
{
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
OleDbDataAdapter adapter = new OleDbDataAdapter(
"SELECT * FROM Customers WHERE CustomerID = 'ALFKI'", connection);
adapter.InsertCommand = new OleDbCommand(
"INSERT INTO Customers (CustomerID, CompanyName) VALUES(?, ?)",
connection);
adapter.InsertCommand.Parameters.Add(
"@CustomerID", OleDbType.VarChar, 5, "CustomerID");
adapter.InsertCommand.Parameters.Add(
"@CompanyName", OleDbType.VarChar, 30, "CompanyName");
connection.Open();
DataSet custDS = new DataSet();
adapter.Fill(custDS, "Customers");
DataRow custRow = custDS.Tables["Customers"].NewRow();
custRow["CustomerID"] = "NEWCO";
custRow["CompanyName"] = "New Company";
custDS.Tables["Customers"].Rows.Add(custRow);
// add handlers
adapter.RowUpdating += new OleDbRowUpdatingEventHandler(OnRowUpdating);
adapter.RowUpdated += new OleDbRowUpdatedEventHandler(OnRowUpdated);
adapter.Update(custDS, "Customers");
// remove handlers
adapter.RowUpdating -= new OleDbRowUpdatingEventHandler(OnRowUpdating);
adapter.RowUpdated -= new OleDbRowUpdatedEventHandler(OnRowUpdated);
foreach (DataRow row in custDS.Tables["Customers"].Rows)
{
if (row.HasErrors)
Console.WriteLine(row.RowError);
}
}
}
protected static void OnRowUpdating(object sender,
OleDbRowUpdatingEventArgs args)
{
if (args.StatementType == StatementType.Insert)
{
System.IO.TextWriter writer = System.IO.File.AppendText("Inserts.log");
writer.WriteLine("{0}: Customer {1} Inserted.",
DateTime.Now, args.Row["CustomerID"]);
writer.Close();
}
}
protected static void OnRowUpdated(object sender, OleDbRowUpdatedEventArgs args)
{
if (args.Status == UpdateStatus.ErrorsOccurred)
{
args.Row.RowError = args.Errors.Message;
args.Status = UpdateStatus.SkipCurrentRow;
}
}
Public Sub CreateDataAdapter(ByVal connectionString As String)
Using connection As New OleDbConnection(connectionString)
Dim adapter As New OleDbDataAdapter( _
"SELECT * FROM Customers WHERE CustomerID = 'ALFKI'", connection)
adapter.InsertCommand = New OleDbCommand( _
"INSERT INTO Customers (CustomerID, CompanyName) VALUES(?, ?)", _
connection)
adapter.InsertCommand.Parameters.Add( _
"@CustomerID", OleDbType.VarChar, 5, "CustomerID")
adapter.InsertCommand.Parameters.Add( _
"@CompanyName", OleDbType.VarChar, 30, "CompanyName")
connection.Open()
Dim custDS As New DataSet()
adapter.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 adapter.RowUpdating, _
New OleDbRowUpdatingEventHandler(AddressOf OnRowUpdating)
AddHandler adapter.RowUpdated, _
New OleDbRowUpdatedEventHandler(AddressOf OnRowUpdated)
adapter.Update(custDS, "Customers")
' remove handlers
RemoveHandler adapter.RowUpdating, _
New OleDbRowUpdatingEventHandler(AddressOf OnRowUpdating)
RemoveHandler adapter.RowUpdated, _
New OleDbRowUpdatedEventHandler(AddressOf OnRowUpdated)
Dim row As DataRow
For Each row In custDS.Tables("Customers").Rows
If row.HasErrors Then Console.WriteLine(row.RowError)
Next
End Using
End Sub
Sub OnRowUpdating(ByVal sender As Object, _
ByVal args As OleDbRowUpdatingEventArgs)
If args.StatementType = StatementType.Insert Then
Dim writer As System.IO.TextWriter = _
System.IO.File.AppendText("Inserts.log")
writer.WriteLine("{0}: Customer {1} Inserted.", _
DateTime.Now, args.Row("CustomerID"))
writer.Close()
End If
End Sub
Sub OnRowUpdated(ByVal sender As Object, _
ByVal args As OleDbRowUpdatedEventArgs)
If args.Status = UpdateStatus.ErrorsOccurred Then
args.Row.RowError = args.Errors.Message
args.Status = UpdateStatus.SkipCurrentRow
End If
End Sub
注解
使用 Update时,每个更新的数据行都会发生两个事件。 执行顺序如下:
中的 DataRow 值将移动到参数值。
引发 OnRowUpdating 事件。
命令将执行。
如果命令设置为
FirstReturnedRecord
,则返回的第一个结果将放置在 中 DataRow。如果有输出参数,则它们放置在 中 DataRow。
引发 OnRowUpdated 事件。
调用 AcceptChanges。