网站建设
  简约型网页设计套餐998
  实惠型网站建设套餐2580
  综合型网站制作套餐4980
  网站改版与网站维护
  行业网站建设方案
  大型网站建设解决方案
  企业网站建设流程
  帝网科技网站设计与网站制作
建站FAQ
·网站空间问题解答
·企业邮箱问题解答
 
酷站欣赏
·房产酷站(379)
·综合门户(8 9)
·建筑装饰(603)
·手机通讯(354)
·生活购物(376)
·医疗保健(199)
·文化摄影(602)
·休闲体育(399)
>>更多酷站欣赏
网站优化
·Google(谷歌)优化   ·百度(BaiDu)优化
·雅虎(Yahoo)优化    ·Alexa排名优化   
·Google AdSense   ·DMOZ目录提交  
建站知识
·网站建设知识·网站名词解释·网站运营知识
·网络营销知识·搜索引擎知识·实用技术文摘
网站推广
百度网站推广 google网站推广
搜狐网站推广 网易网站推广
新浪网站推广   雅虎网站推广
  您当前位置: 当前位置:帝网科技 >> web开发 >> .NET专栏 >> 浏览文章
 
 
使用ADO.NET2.0提升数据交互性能(5)
作者:袁袁整理 来源:帝网科技 日期:2008年11月08日 点击数:



六:DataTable和其他方面的性能提升

另一个好消息是DataTable的功能被大大增强了。毕竟我们不是时时需要Dataset。

1.装载XML数据

在 ADO.NET 1.* 时,离线的数据访问模型以 DataSet 对象为主,因此若要将 XML 的数据装载到 DataTable,必须通过 DataSet 来实现。若我们仅操作一个数据表,不需要访问多个数据表,则还需经过 DataSet 类才能赋予 DataTable 数据或将数据输出成 XML

文件,其过程有点繁琐。ADO.NET 2.0 的 DataTable 类则新增了与 DataSet 相同的

ReadXML、ReadXMLSchema、WriteXML 以及WriteXMLSchema 等方法。因此我们可以直接操作 DataTable 实例,而不需先创建 DataSet 类的实例来赋予 DataTable 实例数据,然后只使用 DataTable 实例。

2.结果集直接装载DataTable

可以通过DataTableReader对象生成DataTable和DataSet。利用DataTable和DataSet在2.0版本中新引入的方法Load,可以传递DataTableReader或者任何实现IDataReader接口的类对象。下面的代码就是通过Load方法将dt1的数据传递到新的数据表dt2中:

以下为引用的内容:
DataTableReader dtRdr = dt1.CreateDataReader();
DataTable dt2 = new DataTable();
dt2.Load(dtRdr);
 


在使用Load方法装载多行数据时,可以先调用BeginLoadData方法来避免通知(notifications),索引维护(index maintenance)以及约束检查(constraint checking),然后再通过EndLoadData方法返回数据。

3.通过 SqlDataAdapter 类实例将 DataTable 内的记录更新回数据源

现在我们还可以使用 SqlDataAdapter 类实例通过 DataGridView 更新的记录。

Update方法由以下几个重载:

以下为引用的内容:
public int Update(DataRow[] dataRows);

public override int Update(DataSet dataSet);

public int Update(DataTable dataTable);

public int Update(DataSet dataSet, string srcTable);
 


4.千呼万唤的Merge方法,终于实现了。

以下为引用的内容:
public void Merge(DataTable table);

public void Merge(DataTable table, bool preserveChanges);

public void Merge(DataTable table, bool preserveChanges, MissingSchemaAction missingSchemaAction);
 


preserveChanges:参数决定当前 DataTable在相同主键记录合并时,是保留数据表内当前更新过的记录(设置为 True),还是以合并来的记录覆盖掉曾经修改过的记录(设置为 False)。

5.

轻量级对象和快速遍历

ADO.NET 2.0中的DataTable提供了CreateDataReader方法(在之前的版本名为GetDataReader),该方法将创建一个DataTableReader对象。DataTableReader与DataTable不同,它是一个轻量级的对象,其支持Disconnected,这一点与DataReader(SqlDataReader)不同。这些特点决定遍历DataTableReader对象将更加快速,占用的数据资源更少(Disconnected)。下面的代码创建了一个DataTableReader对象,并将其绑定到DataGridView控件上:

以下为引用的内容:
using (SqlConnection cn = new SqlConnection(cnStr))
{
SqlCommand cmd = new SqlCommand(sqlAllCustomers, cn);
SqlDataAdapter adpt = new SqlDataAdapter(cmd);
DataTable dtCustomers = new DataTable("Customers");
adpt.Fill(dtCustomers);
DataTableReader dtRdr = ds.CreateDataReader();
dgvCustomers.DataSource = dtRdr;
}
 


和DataReader一样,DataTableReader对象只能向前遍历,可以通过Read方法,定位到对象的第一行。如果DataTableReader如果是被一个包含有多个数据表的DataSet对象创建,DataTableReader也会包含多个结果集。通过调用NextResult方法,访问结果集序列。

以下为引用的内容:
using (SqlConnection cn = new SqlConnection(cnStr))
{
// Create the Command and Adapter
SqlCommand cmd = new SqlCommand(sqlAllCustomers, cn);
SqlDataAdapter adpt = new SqlDataAdapter(cmd);

// Create a DataTable and fill it
DataTable dtCustomers = new DataTable("Customers");
adpt.Fill(dtCustomers);

DataSet ds = new DataSet();
ds.Tables.Add(dtCustomers);
adpt.SelectCommand = new SqlCommand("SELECT * FROM Orders", cn);

adpt.Fill(ds, "Orders");

// Create the DataTableReader (it is disconnected)
using(DataTableReader dtRdr = ds.CreateDataReader())
{
do
{
Console.WriteLine("******************************");
while (dtRdr.Read())
{
Console.WriteLine(dtRdr.GetValue(0).ToString());
}
}
while (dtRdr.NextResult());
}
}
 


DataTableReader对象中数据表的顺序与DataSet中的数据表顺序一致。如果你需要制定特定的顺序,可以通过重载CreateDataReader方法来实现。

6.其他的更新

Connection Pool操作


ADO.NET 1.0 就已经引进了数据库连接 pooling 的新架构,但只有 SqlClient 和 OracleClient

两个数据提供者使用这种架构,OLE DB 和 ODBC 因为沿用以往的程序架构,有自己的 pooling 机制。

.NET 的 pooling 架构提供了较 OLE DB、ODBC 更细致的控制,例如设置 pool 内最大与最小的连接数目,pool manager

等待可用连接的时间,可程序化地清空 pool(也就是关闭其内的连接)等。你可以通过静态方法(VB.NET 称为 Shared)

SqlConnection.ClearPool 清空某个特定的 connection pool,或是以静态方法 SqlConnection.ClearPools

清掉某个 AppDomain 内所有的 Connection Pool。


新的隔离级别

行隔离级别和SYSTEM.Transaction事务,行隔离级别是2005新的隔离级别,可以大大提升数据交互的并发性。

  相关文章
 
·ASP.NET使用log4Net日志组件教程(日志
·ASP.NET MVC 框架
·C#实现的BinaryTree
·WebForms使用System.Web.Routing
·ASP.NET获取远程网页下载到本地文件
·一个“简单”的ASP.NET的服务器控件
·ASP.net与PHP两大网站开发架构优势对比
·教你七招提高.NET网站性能
·ASP.NET未来:简化开发 HTML5性能提升
·ASP.NET实现类似Excel的数据透视表
·FileUpload上传多文件出现错误的解决方
·.NET从优酷专辑中采集所有视频及信息(
·ASP.NET 4中的SEO改进
·详解Asp.net MVC DropDownLists
·提高ASP.NET应用程序性能的几招方法
·asp.net实现51job地区选择效果
·ASP.NET中创建GeoRSS订阅源
·ASP.NET 4.0开发更加简便
·ASP.NET页面间数据传递的方法
·ASP.NET的SEO:使用.ashx文件——排除
 
 

公司环境 | 合作伙伴 | 人才招聘 | 付款方式 | 关于我们

地址:广州市天河区中山大道中120号D805 电话:020-82529556 传真:020-82529556
广州帝网网络科技有限公司 版权所有 粤ICP备08119341号