批处理ADO.NET SQL语句解析

来源:岁月联盟 编辑:exp 时间:2009-10-29

了解数据库的人都知道很多数据库支持把多条命令合并或批处理成一条单一命令执行。这里就批处理ADO.NET SQL语句来和大家说说。

批处理ADO.NET SQL语句

我们先举个例子,SQL Server 使您可以用分号 (;) 分隔命令。把多条命令合并成单一命令,能减少到服务器的行程数,并提高应用程序的性能。例如,可以把所有预定的删除在应用程序中本地存储起来,然后再发出一条批处理命令调用,从数据源删除它们。虽然这样做确实能提高性能,但是,当对 DataSet 中的数据更新进行管理时,可能会增加应用程序的复杂性。要保持简单,可能要在 DataSet 中为每个 DataTable 创建一个 DataAdapter。

用多个表填充 DataSet

如果使用批处理ADO.NET SQL语句检索多个表并填充 DataSet,第一个表用指定给 Fill 方法的表名命名。后面的表用指定给 Fill 方法的表名加上一个从 1 开始并且增量为 1 的数字命名。例如,如果运行下面的代码:

  1. 'Visual Basic  
  2. Dim da As SqlDataAdapter = New SqlDataAdapter("SELECT * FROM Customers; SELECT * FROM Orders;", myConnection)  
  3. Dim ds As DataSet = New DataSet()  
  4. da.Fill(ds, "Customers")  
  5. //C#  
  6. SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Customers; SELECT * FROM Orders;", myConnection);  
  7. DataSet ds = new DataSet();  
  8. da.Fill(ds, "Customers"); 


来自 Customers 表的数据放在名为 "Customers" 的 DataTable 中。来自 Orders 表的数据放在名为 "Customers1" 的 DataTable 中。

填充完 DataSet 之后,可以很容易地把 "Customers1" 表的 TableName 属性改为 "Orders"。但是,后面的填充会导致 "Customers" 表被重新填充,而 "Orders" 表会被忽略,并创建另外一个 "Customers1" 表。为了对这种情况作出补救,创建一个 DataTableMapping,把 "Customers1" 映射到 "Orders",并为其他后面的表创建其他的表映射。例如:

  1. 'Visual Basic  
  2. Dim da As SqlDataAdapter = New SqlDataAdapter("SELECT * FROM Customers; SELECT * FROM Orders;", myConnection)  
  3. da.TableMappings.Add("Customers1", "Orders")  
  4. Dim ds As DataSet = New DataSet()  
  5. da.Fill(ds, "Customers")  
  6.  
  7. //C#  
  8. SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Customers; SELECT * FROM Orders;", myConnection);  
  9. da.TableMappings.Add("Customers1", "Orders");  
  10. DataSet ds = new DataSet();  
  11. da.Fill(ds, "Customers");