最近很忙,也没有什么感想,结果导致很久没有更新 Blog 了。
侯Sir说发表是最好的记忆(原话是什么?我记不太清了),所以准备把自己代码中的一些细节记录下来,以便和大家分享,有什么错误或理解不当之处也好请大家指正。
关于 Adapter 的连接
……
System.Data.OleDb.OleDbAdapter ada1 = new System.Data.OleDb.OleDbAdapter(strSql, strCon);
System.Data.OleDb.OleDbAdapter ada2 = new System.Data.OleDb.OleDbAdapter(strSql, strCon);
System.Data.OleDb.OleDbAdapter adaN = new System.Data.OleDb.OleDbAdapter(strSql, strCon);
如果期望使用同一个连接来创建各个 Adapter 对象,恐怕会让您失望,.Net 无法准确判断您的意图(猛一看,想必就算是人也无法得知上面代码段的作者准确的想法)。所以,.Net采取了最直接的办法,为每个 Adapter 创建一个连接(Connection)。为了达到使用同一个 Connection 创建 Adapter 的目的,采取了如下代码:
……
System.Data.OleDb.OleDbConnection objCon = new System.Data.OleDb.OleDbConnection(strCon);
System.Data.OleDb.OleDbAdapter ada1, ada2, adaN;
ada1 = new System.Data.OleDb.OleDbAdapter(strSql, objCon);
ada2 = new System.Data.OleDb.OleDbAdapter(strSql, objCon);
adaN = new System.Data.OleDb.OleDbAdapter(strSql, objCon);
System.Data.DataSet dataset = new System.Data.DataSet();
ada1.Fill(dataset);
ada2.Fill(dataset);
adaN.Fill(dataset);
虽然没有显示调用 objCon.Open() 但上面代码段依然能正常运行,因为 .Net 在 Adapter 上自动打开了连接,但是在效率方面,上面的代码段不够理想。由于没有显示 objCon.Open() 方法调用(没有已打开的连接),造成在调用 Fill 方法的过程中,.Net 频繁的打开、关闭 Connection,从而影响了性能。如果在 Fill 前,存在打开的连接,在调用完成后 .Net 并不会关闭该连接。所以,只要对 Open 进行显示调用即可解决该问题。
……
System.Data.OleDb.OleDbConnection objCon = new System.Data.OleDb.OleDbConnection(strCon);
objCon.Open();
System.Data.OleDb.OleDbAdapter ada1, ada2, adaN;
ada1 = new System.Data.OleDb.OleDbAdapter(strSql, objCon);
ada2 = new System.Data.OleDb.OleDbAdapter(strSql, objCon);
adaN = new System.Data.OleDb.OleDbAdapter(strSql, objCon);
System.Data.DataSet dataset = new System.Data.DataSet();
ada1.Fill(dataset);
ada2.Fill(dataset);
adaN.Fill(dataset);
objCon.Close();
……
打印 | 张贴于 2004-05-17 16:16:00 | Tag:.Net