数据层组件设计与数据传递6

时间:2010-02-02 08:29:58  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:息。有关如何处理行错误的详细信息,请参阅 Adding and Reading Row Error Information。        以下代码示例显示了 Customer 数据访问逻辑组件如何检查并发冲突。该示例假设客户端检索到了一个 DataSet 并修改了数据,然后把该 DataSet 传递给了数据访问逻辑组件中的 UpdateCustomer 方法。UpdateCustomer 方法将通过调用以下存储过程来更新相应的客...
  正文:使用数据适配器测试并发错误的另一种方法是在调用 Update 方法之前把 DataAdapter.ContinueUpdateOnError 属性设置为 true。完成更新后,调用 DataTable 对象的 GetErrors 方法以确定哪些行发生了错误。然后,使用这些行的 RowError 属性找到特定的详细错误信息。有关如何处理行错误的详细信息,请参阅 Adding and Reading Row Error Information。
  
    以下代码示例显示了 Customer 数据访问逻辑组件如何检查并发冲突。该示例假设客户端检索到了一个 DataSet 并修改了数据,然后把该 DataSet 传递给了数据访问逻辑组件中的 UpdateCustomer 方法。UpdateCustomer 方法将通过调用以下存储过程来更新相应的客户记录;仅当客户 ID 与公司名称未被修改时存储过程才能更新该客户记录:
  
  
  
  CREATE PROCEDURE CustomerUpdate
  {
  @CompanyName varchar(30),
  @oldCustomerID varchar(10),
  @oldCompanyName varchar(30)
  }
  AS
  UPDATE Customers Set CompanyName = @CompanyName
  WHERE CustomerID = @oldCustomerID AND CompanyName = @oldCompanyName
  GO
  
    在 UpdateCustomer 方法中,以下代码示例将一个数据适配器的 UpdateCommand 属性设置为测试开放式并发,然后使用 RowUpdated 事件测试开放式并发冲突。如果遇到开放式并发冲突,应用程序将通过设置要更新的行的 RowError 来表明开放式并发冲突。注意,传递给 UPDATE 命令中的 WHERE 子句的参数值被映射到 DataSet 中各相应列的原始值。
  
  // CustomerDALC 类中的 UpdateCustomer 方法
  public void UpdateCustomer(DataSet dsCustomer)
  {
  // 连接到 Northwind 数据库
  SqlConnection cnNorthwind = new SqlConnection(
  "Data source=localhost;Integrated security=SSPI;Initial
  Catalog=northwind");
  
  // 创建一个数据适配器以访问 Northwind 中的 Customers 表
  SqlDataAdapter da = new SqlDataAdapter();
  
  // 设置数据适配器的 UPDATE 命令,调用存储过程“UpdateCustomer”
  da.UpdateCommand = new SqlCommand("CustomerUpdate", cnNorthwind);
  da.UpdateCommand.CommandType = CommandType.StoredProcedure;
  
  // 向数据适配器的 UPDATE 命令添加两个参数,
  // 为 WHERE 子句指定信息(用于检查开放式并发冲突)
  da.UpdateCommand.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 30,
  "CompanyName");
  
  // 将 CustomerID 的原始值指定为第一个 WHERE 子句参数
  SqlParameter myParm = da.UpdateCommand.Parameters.Add(
  "@oldCustomerID", SqlDbType.NChar, 5,
  "CustomerID");
  myParm.SourceVersion = DataRowVersion.Original;
  
  // 将 CustomerName 的原始值指定为第二个 WHERE 子句参数
  myParm = da.UpdateCommand.Parameters.Add(
  "@oldCompanyName", SqlDbType.NVarChar, 30,
  "CompanyName");
  myParm.SourceVersion = DataRowVersion.Original;
  
  // 为 RowUpdated 事件添加一个处理程序
  da.RowUpdated += new SqlRowUpdatedEventHandler(OnRowUpdated);
  
  // 更新数据库
  da.Update(ds, "Customers");
  
  foreach (DataRow myRow in ds.Tables["Customers"].Rows)
  {
  if (myRow.HasErrors)
  Console.WriteLine(myRow[0] + " " + myRow.RowError);
  }
  }
  
  // 处理 RowUpdated 事件的方法。 如果登记该事件但不处理它,
  // 则引发一个 SQL 异常。
  protected static void OnRowUpdated(object sender, SqlRowUpdatedEventArgs "数据层组件设计与数据传递6"由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Programming/aspnet/12734.html


关键字:

关于《数据层组件设计与数据传递6》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td