ADO.NET学习笔记(一)

ado|笔记

最近几天一直在图书馆里面看《ADO.NET实用指南》,发现真是一本好书。读书自然就有心得,本人就根据书的线索,把自己的学习体会主要以代码的形式记录下来。(书上对应代码在http://www.adoguy.com/book里)

1、连接
ADO.NET最大的特色就在于支持在断开连接的情况下对数据库里的内容进行操作,这样可以大大的节约过多连接带来的消耗,前面的那一篇文章中已经给了一个具体的例子说明ADO.NET的这种特性。我们可以在从数据库里获得数据的时候打开连接,在得到数据之后就断开连接,对dataset里面的数据进行操作,然后在把dataset里的内容更新到数据库里面的时候再打开连接。对于dataReader则必须一直保持连接。
使用这种特性的时候有几点要注意一下:
(1)更改连接属性的时候必须断开连接
(2)切换数据库的时候选择conn.changeDatabase(dbName),减少断开连接与新建连接往返带来的消耗
ADO.NET同时支持数据库自带连接池。在一个连接关闭之后,连接会在池中保持一段时间,然后才实际的关闭,如果在超时之前,有人请求建立相同的连接,就将打开的连接分配给请求者,这对于经常进行打开和断开的连接可以减少很多的消耗。不过在SQL SERVER 2000中采用集成安全性的连接无法入池。
连接涉及到的事件有Dispose,InfoMessage,StateChange,在MSDN可以查到,不再赘述。
模板代码:
Dim conn As SqlConnection
conn=New SqlConnection("……") '里面为连接字符串
conn.open()
'进行相应的操作
conn.close()

2、Command对象
ADO.NET允许以三种不同的方式获取数据库里面的数据Command,DataSet,DataReader,Command是最基本的方法,通过执行SQL命令的形式获得数据。

(1)创建 可以用两种方式创建
a、创建新的Command对象
Dim cmd As New SqlCommand
cmd.connection=conn
cmd.CommandText="SELECT * FROM Customer"
b、获得对conn中command对象的引用
Dim cmd As SqlCommand
cmd=conn.createCommand();
cmd.CommandText="SELECT * FROM Customer"
推荐第二种方法

(2)执行 四种执行方式
ExecuteNonQuery() 返回受命令影响的行数
ExecuteScalar() 返回第一行第一列(使用与集函数)
ExecuteReader() 返回一个DataReader对象
ExecuteXmlReader()返回一个XmlReader对象

(3)参数 主要是用在存储过程中,有复杂和精简两种形式
复杂方法:
Dim param As new SqlParameter("@Return",SqlDbType.Int)
param.Direction=ParameterDirection.ReturnValue
cmd.Parameters.Add(param)
精简方法
cmd.Parameters.Add("@Return_value",DbType.Int32).Direction=ParameterDirection.ReturnValue
建议:如果需要处理输出值时的时候使用参数,只处理输入值的时候就不用使用参数了。

(4)事务
用SQL语句:
Begin TRAN
SQL操作
If @@ERROR <>0
Begin
RollBack TRAN
Return @@ERROR
End
Commit TRAN
Return 0
在ADO.NET中编写事务
cmd.Transaction = conn.BeginTransaction()
try
{
cmd.CommandText="..."
cmd.ExecuteNonQuery()
cmd.Transaction.commit()
}
catch(Exception ex)
cmd.Transaction.Rollback()
End try
如果希望将数据库事务处理与一些外部系统结合起来(比如在数据库更新时同时进行了WEB更新,如果WEB更新失败希望回滚事务时),选择客户端编写事务处理(用ADO.NET编写)
仅仅做数据库事务处理的话就直接在服务端写事务语句(在SQL SERVER2000 中写事务)
在事务中可以创建SavePoint来实现部分事务回滚
cmd.Transaction.save("New Customer")
cmd.Transaction.Rollback("New Customer")

(5)批处理查询 如果有多条SQL语句并且可以一起执行的话,就可以进行批处理查询。在DataReader中支持批处理查询获得的数据集。
cmd.CommandText="SELECT * FROM Customer;SELECT * FROM Inovince;"
Dim rdr As SqlDataReader
rdr=cmd.ExecuteReader()
rdr中即包含两个SQL语句执行的结果

3、DataReader对象
DataReader对象只能对查询获得的数据集进行自上而下的访问,但效率很高。如果仅仅是访问数据的话,可以使用DataReader。但DataReader要求一直连接,所以将结果的一小部分先放在内存中,读完后再从数据库中读取一部分,相当于一个缓存机制。这对于查询结果百万级的情况来说,带来的好处是显而易见的。
模板代码:
Do While rdr.Read()
Console.WriteLine(rdr(0)) '也可输出rdr("CustomerID")
Loop
如果要进行类型限制的话可以输出(String)rdr(0)或rdr.GetString(0)

从DataReader里读出数据的时候要注意属性是否为空,如果属性可以为空,则读出数据时应进行判断
If Not rdr.IsDBNull(0)
Console.writeLine(...)

用DataReader读取记录时,数据库默认上锁,可以通过更改DataReader的默认属性改变。

如果DataReader里面的数据是批处理语句执行得到的话,可以通过NextResult访问
模板代码:
Do
Do While rdr.Read()
Console.WriteLine(rdr(0))
Loop
Loop While rdr.NextResult()

处理元数据(显示每个属性的情况)
Dim schema As DataTable
schema=rdr.GetSchemaTable() '得到元数据表,表里的每列对应每个属性的特性集合
对于每一列属性对应的row,通过row("DataType")获得这列属性的数据类型。

时间: 2024-08-17 16:18:21

ADO.NET学习笔记(一)的相关文章

ADO.NET学习笔记(二)

ado|笔记 4.DataSet 在ADO.NET中DataSet的作用是为数据源提供一个断开式的存储,而不必关心数据源,操作只用在DataSet中进行就行了. 有三种方法可以创建DataSet:1.通过DataAdapter 2.通过XML 文件 3.用人工方法确定架构,然后逐行输入数据. 主要介绍第一种方法. DataAdapter用于将DataSet连接到基本数据存储,本质上是一种元Command对象. 它包括SelectCommand对象,InsertCommand对象,UpdateCo

ADO.NET学习笔记(三)

ado|笔记 (由于书上的代码全是用C#写的,转换为VB.NET实在麻烦,以后就不转换了,见谅)五.操纵dataset在DataSet中DataRow是其所有数据的基本存放位置,它主要是由一个值数组组成,代表DataTable单独一行.DataRow中主要包括一下几种信息:1.行中每一列的当前值,2.行中每一列的原始值,3.行状态,4.父行与子行间的链接 初始化一个DataRow:DataTable dataTable=dataSet.Tables[0];DataRow newRow=dataT

ASP.NET学习笔记之ADO.NET(一)

ado|asp.net|笔记|ado|asp.net 笔记内容全部来自<C# Web应用程序入门经典>1. ADO.NET的体系结构 ADO.NET这个名字并不代表实际的内容--ADO原来是表示ActiveX Data Obejects,而是一种技术的名称.访问数据库最常用的方法是:首先连接到数据库,然后使用SQL语句.对于不同的数据库操作有不同的Command对象方法.如,ExecuteScalar()方法返回一个包含值的对象,ExecuteReader()方法用于访问结果集的DataRea

一份ASP学习笔记(连载)

笔记 ASP学习笔记(一) 1. 突出显示文字 <em>要显示的文字</em>2. 根据用户选择,做出相应的反应(在客户端实现) SELECT CASE Document.Form1.card.options(selectedIndex).Text Case "value1" Option1 Case "value2" Option2 ...... END SELECT3. VBScript 的 Sub函数不返回值 Function 函数将返

那些年,我还在学asp.net(一) 学习笔记_基础应用

那些年到此,基本学习了前端的基本知识,那些年的第四课就是asp.net,当然那时看了很多教程,比如说:天轰穿,当然天轰穿说得比较多,如面向对象,C#知识,由于当时上过C++,所以就没有看这些,直接从asp.net开始,主要是学习一下asp.net用到的一些基本控件,后来感觉差不多了就不再看了,开始学习asp.net的数据教程(scott教程),那些年慢慢的走向web开发了.    先还是看一下asp.net中的一些基本的控件的使用. 一.GridView控件的使用 1.GridView 是asp

JetSpeed学习笔记(一)

笔记 JetSpeed学习笔记(一) fuweilin 2005-4-7 前言 参加了公司的portal的兴趣小组,今天对portal进行学习.首先上网看了看一些portal的资料,对portal.portlet.portlet container以及JSR168等概念有个基本的了解.决定进一步实战的方式感受portal,于是学习JetSpeed.     1.  JetSpeed介绍JetSpeed是Apache组织开发的一个采用Java和XML的开放源代码的企业信息门户的实现.门户可以让终端

PHP输入输出流学习笔记

  这篇文章主要介绍了PHP输入输出流学习笔记,PHP输入和输出流是通过php://来访问的,它允许访问 PHP 的输入输出流.标准输入输出和错误描述符,内存中.磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器,需要的朋友可以参考下 PHP输入和输出流是通过php://来访问的,它允许访问 PHP 的输入输出流.标准输入输出和错误描述符, 内存中.磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器. php://stdin, php://stdout 和 php://std

PHP学习笔记 (1) 环境配置与代码调试

一配置PHP环境 1.了解什么是PHP PHP("PHP: Hypertext Preprocessor",超文本预处理器的字母缩写) PHP,是英文超级文本预处理语言Hypertext Preprocessor的缩写.PHP 是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,被广泛的运用 2.PHP的背景和优势 PHP的发展背景 1).1994年由Rasmus Lerdorf创建,开始是一个简单的Perl语言编写的程序,用统计

Node.js 学习笔记之简介、安装及配置

 本文是Node.js学习笔记系列文章的第一篇,主要给大家讲解的是在Windows和Linux上安装Node.js的方法.软件安装版本以0.12.0为例.希望大家能够喜欢.     简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台. Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好. 谁适合阅