RSS
热门关键字:  数据挖掘  数据仓库  商业智能  人工智能  搜索引擎
当前位置 :| 首页>编程技术>asp编程>

使用DataReader高效地访问数据库

来源: 作者:unkonwn 时间:2005-07-05 点击:

当我们连接到数据库,进行了想要的查询以后,就可以在网页上显示它们。使用DataReader是一个比较节省服务器资源的选择。DataReader提供了一种只读的、只向前的数据访问方法,因此在访问比较复杂的数据,或者只是想显示某些数据时,DataReader再适合不过了。 数据挖掘研究院

 

DataReader是一个抽象类,因此不能直接实例化,要通过Command对象的ExecuteReader方法来建立。 数据挖掘研究院

  数据挖掘研究院

下面是个例子:

  数据挖掘研究院

private void Page_Load(object sender, System.EventArgs e)

数据挖掘实验室

{ 数据挖掘研究院

      SqlConnection Conn = new SqlConnection("server=.;database=northwind;uid=sa;pwd=chengbo;");

数据挖掘研究院

      SqlCommand Comm = new SqlCommand("SELECT EmployeeID, LastName, BirthDate FROM Employees", Conn); 数据挖掘研究院

      try 数据挖掘研究院

      { 数据挖掘研究院

        Conn.Open();

        SqlDataReader reader = Comm.ExecuteReader();

数据挖掘研究院

  数据挖掘研究院

        while(reader.Read()) 数据挖掘研究院

        {

数据挖掘研究院

          //此处使用序数索引器

          Response.Write("<P>" + reader[0] + "&nbsp;" + reader[1] + "&nbsp;" + reader[2] + "</P>"); 数据挖掘实验室

        } 数据挖掘实验室

        reader.Close(); 数据挖掘研究院

      }

      catch(SqlException ex) 数据挖掘研究院

      { 数据挖掘实验室

        Response.Write(ex.Message); 数据挖掘实验室

      }

数据挖掘研究院

      finally 数据挖掘研究院

      { 数据挖掘研究院

        Conn.Close();

      } 数据挖掘研究院

}

 

数据挖掘实验室

代码中有灰色背景的地方使用的是序数索引器,还可以使用列名索引器:

  数据挖掘实验室

Response.Write("<P>" + reader["EmployeeID"] + "&nbsp;" + reader["LastName"] + "&nbsp;" + reader["BirthDate"] + "</P>"); 数据挖掘研究院

此外,还可以使用类型访问方法:

数据挖掘研究院

 

数据挖掘研究院

Response.Write("<P>" + reader.GetSqlInt32(0).ToString() + "&nbsp;" + reader.GetSqlString(1).ToString() + "&nbsp;" + reader.GetSqlDateTime(2).ToString() + "</P>"); 数据挖掘实验室

  数据挖掘研究院

三种方法最终的结果都一样,但是哪种方法性能更好,速度更快呢? 数据挖掘研究院

答案是

数据挖掘研究院

类型访问 > 序数索引器 > 列名索引器 数据挖掘研究院

  数据挖掘研究院

序数索引是通过列的序数来访问列值的,这种方法不必从行中查找列,而是直接跳到指定的列中进行访问,因而比较省资源,速度较快。

 

数据挖掘实验室

列名索引是通过列的名称来访问列值的,这种方法虽然速度一般,但是它使得代码更易读,因而更易维护,降低了成本。 数据挖掘研究院

 

数据挖掘研究院

类型访问和序数索引比较相像,它也包含序数,但它同时指定了数据类型,减少了额外的工作,因而使速度更快,类型更安全。

数据挖掘研究院

 

这里要提到的是,由于我们使用的是MSDESQL Server 2000),而.Net Framework提供了专门为SQL Server 7.0及以上版本设计的优化类型方法,所以我们使用了GetSqlInt32GetSqlStringGetSqlDateTime等优化方法,更为通用的是GetInt32GetStringGetDateTime等。 数据挖掘研究院

  数据挖掘研究院

GetSqlInt32GetSqlStringGetSqlDateTime等方法返回的是SqlTypes对象,比如,GetSqlInt32方法返回的是System.Data.SqlTypes.SqlInt32类型而不是System.Int32对象,后者才是GetInt32方法返回的对象,所以我们在每个方法后再调用了ToString方法进行转换,这样才能使用"+"连接,然后输出。

 

数据挖掘研究院

下面是System.Data.SqlTypes 命名空间为 SQL Server 内的本机数据类型提供类。这些类提供了一种较之其他数据类型更安全、更快捷的方法。在可能丢失精度的情况下,在此命名空间中使用这些类有助于防止产生类型转换错误。由于其他数据类型在幕后与 SqlTypes 进行相互转换,所以在此命名空间内显式创建和使用对象将会使代码更快。 数据挖掘实验室

下表将 System.Data.SqlTypes 命名空间的成员映射到 Microsoft SQL Server 数据类型及 SqlDbType 枚举的成员。

本机 SQL Server

.NET Framework SqlTypes

.NET Framework SqlDbType 数据挖掘研究院

binary

SqlBinary

Binary 数据挖掘研究院

Bigint 数据挖掘实验室

SqlInt64 数据挖掘研究院

BigInt

Char 数据挖掘研究院

SqlString 数据挖掘研究院

Char 数据挖掘研究院

datetime

SqlDateTime

数据挖掘研究院

DateTime 数据挖掘研究院

decimal

数据挖掘实验室

SqlDecimal 数据挖掘实验室

Decimal

Float 数据挖掘实验室

SqlDouble

数据挖掘研究院

Float 数据挖掘实验室

image 数据挖掘实验室

SqlBinary

数据挖掘研究院

Image

Int 数据挖掘研究院

SqlInt32 数据挖掘研究院

Int

数据挖掘研究院

Money

数据挖掘研究院

SqlMoney

数据挖掘研究院

Money

数据挖掘研究院

nchar 数据挖掘研究院

SqlString 数据挖掘研究院

NChar

Ntext

SqlString

数据挖掘研究院

NText

数据挖掘实验室

nvarchar

SqlString 数据挖掘研究院

NVarChar 数据挖掘研究院

Numeric 数据挖掘研究院

SqlDecimal 数据挖掘研究院

Numeric

Real

数据挖掘研究院

SqlSingle 数据挖掘研究院

Real

数据挖掘实验室

smalldatetime

数据挖掘研究院

SqlDateTime

数据挖掘实验室

SmallDateTime

数据挖掘实验室

smallint 数据挖掘研究院

SqlInt16 数据挖掘实验室

SmallInt

smallmoney

SqlMoney

数据挖掘研究院

SmallMoney

sql_variant

数据挖掘实验室

Object

Variant 数据挖掘研究院

sysname

数据挖掘研究院

SqlString

数据挖掘研究院

VarChar

text

数据挖掘研究院

SqlString 数据挖掘研究院

Text 数据挖掘研究院

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
匿名?