当使用 Update 时,每一个更新的数据行都会发生两个事件。执行顺序如下:
-
将 DataRow 中的值移至参数值。
-
引发 OnRowUpdating 事件。
-
执行命令。
-
如果该命令设置为 FirstReturnedRecord,返回的第一项结果将放置在 DataRow 中。
-
如果存在输出参数,它们将被放在 DataRow 中。
-
引发 OnRowUpdated 事件。
-
调用 AcceptChanges。
-
下面的示例演示正在使用的 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;
}
}
using System;
using System.Data;
using System.Data.OleDb;
class Class1
...{
static void Main()
...{
string x = "Provider=SQLOLEDB;Data Source=(local);Integrated Security=SSPI;Initial Catalog=Northwind";
CreateDataAdapter(x);
}
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;
}
}
今天在使用gridview时出现一个低级错误.
朋友们我有个低级问题,我用GridView编辑功能时,查找不出里面的TextBox
string classname = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim();
其实e.RowIndex怎么点都不出来,要怎么设置才能点出来啊
“System.Web.UI.WebControls.GridViewUpdatedEventArgs”并不包含“RowIndex”的定义
原因是我选用的是RowUpdated而非RowUpdating这两个事件是不同的....
里面RowUpdating才能有这个选项:RowIndex,RowUpdated则没有....
应用得太少....要多加练习了!!!
本文介绍了使用ADO.NET中的Update方法进行数据更新时触发的RowUpdating和RowUpdated事件的处理方式。通过示例代码展示了如何在这些事件中记录插入操作,并处理更新过程中可能出现的错误。

2721

被折叠的 条评论
为什么被折叠?



