ADO.NET常用对象

一、Connection对象
  Connection对象也称为数据库连接对象,Connection对象的功能是负责对数据源的连接。所有Connection对象的基类都是DbConnection类。
  Connection对象有两个重要属性:
    (1)ConnectionString:表示用于打开 SQL Server 数据库的字符串;
    (2)State:表示 Connection 的状态,有Closed和Open两种状态。
  Connection对象有两个重要方法:

    (1)Open()方法:指示打开数据库;

    (2)Close()方法:指示关闭数据库。

1 SqlConnection connection = new SqlConnection( "server=localhost;database=pubs;uid=sa;pwd=''";);

2  //注意,DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")是将当前时间格式化为类似于2008-10-09 00:00:03的形式的字符串

3 Response.Write("时间"+ DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")+"当前数据库连接状态是:"+connection.State +"<br/>");

4 connection.Open();

5 Response.Write("时间" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "当前数据库连接状态是:" + connection.State + "<br/>");

6 connection.Close();

7 Response.Write("时间" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "当前数据库连接状态是:" + connection.State + "<br/>");

【技巧】利用Visual Studio数据源控件生成数据库连接字符串。根据向导“新建连接”后,会出现一个“添加连接”的对话框,在这里可以根据实际需要更改数据源。这个连接向导配置连接到Access数据库文件、ODBC数据源、SQL Server数据库、SQL Server手机版数据库、SQL Server数据库文件、Oracle数据库文件及其它数据库。 在这里我们选择Microsoft SQL Server选项,连接到SQL Server数据库。如果我们在局域网中,我们可以点击“添加连接”界面中的刷新按钮来查看局域网中有哪些SQL Server数据库可以连接。连接到数据库可以用下面的方式:

  (1)如果要连接的数据库服务器与开发者的机器在同一个局域网里,可以使用局域网IP地址或者局域网中的电脑主机名;
  (2)如果要连接的数据库服务器与开发者的机器不在同一个局域网内,那么就要求数据库服务器必须有一个公网IP,我们可以使用公网IP来连接,如果数据库服务器还有互联网域名,那么用互联网域名也是可以的。
  (3)如果要连接的数据库服务器与开发者所使用的机器是同一台机器,那么可以使用以下几种方式之一:”(local)”或者”.”或者”127.0.0.1”。需要注意的是,如果在一台机器上运行者同一种数据库的不同版本,比如说在”xxxxx”这台主机上同时运行着SQL 2000、SQL 2005和SQL Express三种版本,并且它们所使用的Windows服务名分别为”SQL2000”、”SQL2005”和”SQLExpress”,那么我们要连接到SQL 2000这个数据库上所使用的服务器名就应该填写”xxxxx\SQL2000”这种“主机名\实例名”的方式或者“主机IP\实例名”,这种情况在同时安装了Visual Studio 和SQL 的朋友那里很常见,因为SQL Express是针对学生的功能有限的免费版本,这个版本的数据库在安装Visual Studio 时默认是一同安装的。点击一下“测试连接”按钮,如果弹出连接成功的提示消息就表示这个数据库连接是可用的。点击“确定”按钮,回到“配置数据源”界面,这时候点击连接字符串旁边的”+”按钮就可以看到数据库的连接字符串信息。

二、Command对象

  Command对象也称为数据库命令对象,Command对象主要执行包括添加、删除、修改及查询数据的操作的命令。也可以用来执行存储过程。用于执行存储过程时需要将Command对象的CommandType 属性设置为CommandType.StoredProcedure,默认情况下CommandType 属性为CommandType.Text,表示执行的是普通SQL语句。
  Command主要有三个方法:
  ExecuteNonQuery():执行一个SQL语句,返回受影响的行数,这个方法主要用于执行对数据库执行增加、更新、删除操作,注意查询的时候不是调用这个方法。

OleDbConnection conn = new OleDbConnection();conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Server.MapPath("person.mdb");conn.Open();string strSQL = "insert into grade values(12,'女','小张',78,86,98)";OleDbCommand Comm = new OleDbCommand(strSQL, conn);Comm.ExecuteNonQuery();conn.Close();

  ExecuteReader ():执行一个查询的SQL语句,返回一个DataReader对象。

SqlConnection Conn = new SqlConnection();Conn.ConnectionString = "server=localhost;database=pubs;uid=sa;pwd=''";Conn.Open();SqlCommand Comm = new SqlCommand("select * from Authors", Conn);SqlDataReader dr = Comm.ExecuteReader();dg.DataSource = dr;dg.DataBind();Conn.Close();

   ExecuteScalar ():从数据库检索单个值。这个方法主要用于统计操作。ExecuteScalar ()这个方法是针对SQL语句执行的结果是一行一列的结果集,这个方法只返回查询结果集的第一行第一列。

OleDbConnection conn = new OleDbConnection();conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source=" + Server.MapPath("person.mdb");conn.Open();string strSQL = "select avg(数学) from grade";OleDbCommand Comm = new OleDbCommand(strSQL, conn);double d = (double)Comm.ExecuteScalar();Message.Text = "所有人数学的平均成绩为:"+d.ToString()+"分";conn.Close();

【注意】在操作数据库的时候,为了提高性能,都遵循一个原则:数据库连接对象应该尽可能晚打开,尽可能早关闭。在上面的例子中,在Command对象需要执行数据库操作之前才打开数据库连接对象,执行数据库操作之后马上就关闭了数据库连接对象。

三、DataReader对象
  DataReader对象是一个读取行的只读流的方式,绑定数据时比使用数据集方式性能要高,因为它是只读的,所以如果要对数据库中的数据进行修改就需要借助其它方法将所作的更改保存到数据库。

DataReader对象不能通过直接实例化,必须借助与相关的Command对象来创建实例,例如用SqlCommand的实例的ExecuteReader()方法可以创建SqlDataReader实例。因为DataReader对象读取数据时需要与数据库保持连接,所以在使用完DataReader对象读取完数据之后应该立即调用它的Close()方法关闭,并且还应该关闭与之相关Connection对象。在.net类库中提供了一种方法,在关闭DataReader对象的同时自动关闭掉与之相关的Connection对象,使用这种方法是可以为ExecuteReader()方法指定一个参数,如: SqlDataReader reader =command.ExecuteReader(CommandBehavior.CloseConnection); CommandBehavior是一个枚举,上面使用了CommandBehavior枚举的CloseConnection值,它能在关闭SqlDataReader时关闭相应的SqlConnection对象。

并且DataReader对象读取数据有三种方式:
  一种是按查询的时候列的索引用指定的方式来读取列值,无需做相应转换,如GetByte(int i)就是读取第i列的值并且转换成byte类型的值。第这种方法的优点是指定列后直接将该列的直接读取出来了,无需再转换,缺点是一旦指定的列不能按照指定的方式转换时就会抛出异常,比如数据库里字段的类型是string类型或者该字段的值为空时按照GetByte(i)这种方式读取会抛出异常。

  第二种方式就是按照列索引的方式读取,在读取的时候并不进行值转换,如:reader[5]就是读取第5列的值(这里reader是一个Reader对象的实例),这样得到的值是一个object类型的值,这也很好理解,因为在数据库可能存储各种类型的值,而object是所有类的基类,所以这个方法不会抛出异常。如果要得到它的正确类型,还需要根据数据库里的字段进行进行相应转换。

  最后一种是按照列名的方式去读,并且在读的时候也不进行相应转换,得到的是object类型的值。 综合前面三种方式各有特点,第一种方式最直接,但是有可能抛出异常,第二种方式比第一种稍微灵活一些,我们可以根据读取到值为空(在.net里用DBNull类来表示,可以表示数据库中任意数据类型的空值),我们就不进行相应的类型转换,避免出现异常。第三种方式按照列的名字来读取数据,也需要按照第二种方式进行一定的转换。就性能来说第一种最高,第二种稍低,第三种最低(这很好理解,假设要在一个旅馆里找人直通过房间号找肯定比通过名字找快),就灵活性来说第三种最灵活,第二种次之,第一种最不灵活(假如在后来编写SQL语句中更改了列的索引,第一种和第二种都可能出现问题)。实际开发中根据实际情况选择合适的方式。

使用 DataReader 检索数据的步骤:
1、创建 Command 对象
2、调用 ExecuteReader() 创建 DataReader 对象
3、使用 DataReader 的 Read() 方法逐行读取数据
4、读取某列的数据,(type)dataReader[ ]
5、关闭 DataReader 对象

注意:DataReader 使用后必须关闭

参考代码:

string sql = "SELECT StudentName FROM Student WHERE StudentName LIKE '李%'"; SqlCommand command = new SqlCommand(sql, connection); connection.Open(); SqlDataReader dataReader = command.ExecuteReader(); Console.WriteLine("查询结果:"); while (dataReader.Read()) { Console.WriteLine((string)dataReader["StudentName"]); } dataReader.Close();

四、DataAdapter对象
  DataAdapter对象也称之为数据适配器对象,DataAdapter对象利用数据库连接对象(Connection)连接的数据源,使用数据库命令对象(Command)规定的操作从数据源中检索出数据送往数据集对象(DataSet),或者将数据集中经过编辑后的数据送回数据源。 数据适配器将数据填入数据集时调用方法Fill(),语句如下:

//直接填充表

dataAdapter1.Fill (dataTable);

或者

//填充dataSet11数据集中的"Products"表

dataAdapter1.Fill (dataSet11, "Products");

  当dataAdapter1调用Fill() 方法时将使用与之相关联的命令组件所指定的 SELECT 语句从数据源中检索行。然后将行中的数据添加到 DataSet 中的DataTable 对象中或者直接填充到DataTable的实例中,如果 DataTable 对象不存在,则自动创建该对象。 当执行上述SELECT语句时,与数据库的连接必须有效,但不需要用语句将连接对象打开。如果调用Fill()方法之前与数据库的连接已经关闭,则将自动打开它以检索数据,执行完毕后再自动将其关闭。如果调用Fill()方法之前连接对象已经打开,则检索后继续保持打开状态。
注意:一个数据集中可以放置多张数据表。但是每个数据适配器只能够对应于一张数据表。

五、DataSet对象
  DataSet对象也称为数据集对象,DataSet对象用于表示那些储存在内存中的数据,它相当于一个内存中的数据库。它可以包括多个DataTable对象及DataView对象。DataSet主要用于管理存储在内存中的数据以及对数据的断开操作。 由于DataSet对象提供了一个离线的数据源,这样减轻了数据库以及网络的负担,在设计程序的时候可以将DataSet对象作为程序的数据源。

六、DataTable对象
  DataTable 是 ADO.NET 库中的核心对象,就像普通的数据库中的表一样,它也有行和列。它主要包括DataRow和  DataColumn,分别代表行和列。
  (1) 数据行(DataRow)
  数据行是给定数据表中的一行数据,或者说是数据表中的一条记录。它可能代表一个学生、一位用户、一张订单或者一件货物的相关数据。DataRow对象的方法提供了对表中数据的插入、删除、更新和查看等功能。提取数据表中的行的语句如下:
DataRow dr = dt.Rows[n];
其中:DataRow代表数据行类;dr是数据行对象;dt代表数据表对象; n代表行的序号(序号从0开始)。
  (2) 数据列(DataColumn)
  数据表中的数据列(又称字段)定义了表的数据结构,例如,可以用它确定列中的数据类型和大小,还可以对其他属性进行设置。例如,确定列中的数据是否是只读的、是否是主键、是否允许空值等;还可以让列在一个初始值的基础上自动增殖,增值的步长还可以自行定义。 某列的值需要在数据行的基础上进行。语句如下:

string dc = dr.Columns["字段名"].ToString();或者string dc = dr.Column[i].ToString();//i表示对应的列索引

如若想取出数据表(dt)中第3条记录中的“姓名”字段,并将该字段的值放入一输入框(textBox1)中时,语句可以写成:

DataRow dRow = dt.Rows[2 ]; // 从数据表提取行 string textBox1.Text=dRow["CompanyName"].ToString(); // 从行中取出字段的值

一个基本的例子

//实例化Connection对象 SqlConnection connection = new SqlConnection("Data Source=(local); Initial Catalog=数据库名;Persist Security Info=True;User ID=sa;Password=sa"); connection.open();//要执行查询,则先需要实例化Command对象,SqlCommand command = new SqlCommand("select * from UserInfo where sex=0", connection); SqlDataAdapter adapter = new SqlDataAdapter(command); /* 下面的被注释掉的代码与上面的代码是等效的 SqlDataAdapter adapter = new SqlDataAdapter("select * from UserInfo where sex=0",connection); */ DataTable data = new DataTable(); adapter.Fill(data); /* 下面的被注释掉语句与上面填充DataTable的效果是一样的,我更倾向于没有注释掉的部分 DataSet ds = new DataSet();//实例化DataSet adapter.Fill(ds, "UserInfo");//填充ds中的"UserInfo"表 DataTable data = ds.Tables["UserInfo"]; */connection.close();

时间: 2024-10-27 15:08:38

ADO.NET常用对象的相关文章

用ADO的COMMAND对象实现对WEB数据库动态数据查询的方法

用ADO的COMMAND对象实现对WEB数据库动态数据查询的方法★ 林碧英众所周知,由于ASP技术的出现,使得Intranet的应用更加广泛深入.相当多的企业都建立了企业内部综合查询系统,如何快速.准确地查询企业内部信息是编写基于WEB技术应用程序必须要解决的主要问题.ASP提供了用ADO内置的3个主要对象Recordset.Connection和Command对WEB数据库进行操作.其中Connection的主要功能是建立与WEB数据库的链接:Command的主要功能是向WEB数据库传送数据查

关注于使用常用对象来加快Access 2007数据库

很多时候我们需要加快Access数据库.这篇文章讲述了使用数据可以怎样使得这个需求更加受到关注.这篇文章还探究了Access 2007 ACCDB一个叫做TempVars的特性.但是首先让我们讨论一些用户场景. 情景一:一个经验丰富的Excel技术人员建立了一个具有众多关联数据表的数据库.他坚信他需要升级到SQL server来加快这个数据库.这个数据库只有20MB大小,但是一些表单非常慢,在许多子表单里有许多标签控件和成百上千的离散字段.此外,使用这个数据库的用户需要每次都翻找记录来找到他们所

JavaScript常用对象的方法和属性小结_javascript技巧

本文将简单介绍JavaScript中一些常用对象的属性和方法,以及几个有用的系统函数. 一.串方法 JavaScript有强大的串处理功能,有了这些串方法,才能编写出丰富多彩的网页.在这一部分里,我们将介绍到如何使用与串对象有关的方法和属性. 1.串对象的length属性 串对象仅有一个属性length,这个属性值表示这个串所包括字符的相对数目.语法为: stringName.length 2.串对象的方法 JavaScript提供了多个串方法以帮助控制显示信息.串方法可以分为几个大类,如属性方

SQL Server编程系列(2):SMO常用对象的有关操作

原文:SQL Server编程系列(2):SMO常用对象的有关操作 在上一篇周公简单讲述了SMO的一些基本概念,实际上SMO体系结构远不止周公在上一篇中讲述的那么简单,下图是MSDN上给出的一个完整的结构图: 上图是一个完整的涉及到各种关系的结构图.不过它们之间的层次结构关系周公已经在上一篇做了简单概述. 在本篇中周公还是在上一篇的基础上再做稍微深入一点的介绍,在本篇中主要讲述如何获取数据库常见对象信息,并且如何利用SMO来进行一些日常操作:如创建Login,创建数据库.备份数据库和还原数据库.

ado 记录集对象的filter属性使用中需注意的地方

ado|对象|记录集   最近使用filter对象很多,也遇到了一些问题,我会在使用过程中进一步总结,然后将重要的记录下来. 一.避免空集错误 空集错误一般在第一次filter赋值时没有匹配的情况下.例如: do while not rr.eof     rs.filter="user_id='" & rr("user_id") & "'"        do while not rs.eof                  '

一个支持SqlClient和OleDb的ADO.NET常用操作通用类

using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlClient; using System.Configuration; using System.Data.OleDb; /* *************************************** * * *作者:GhostBear * *博客:http://blog.csd

如何高效地使用ADO.net连接对象

很多初学者朋友在做项目时遇到过这样的问题,那就是在本地调试运行的程序正常,放到服务器上也是正常的,但是如果有了一些并发之后,就会发现页面会出现打不开的现像,其实大多数时候是因为Ado.net链接没有处理完善.当然对于老鸟来说这种情况是不会发生的. 其实避免出现这种情况和提高Connection对象的使用性能的方式很简单,我们这里列出两种方式供初学者或遇到过这种问题的朋友选择: 1.使用try-catch-finally语句块: SqlConnection conn = new SqlConnec

关于asp.net中内置常用对象的属性方法

问题描述 大家能否告诉我下你你们做项目中经常用的内置对象的属性方法........谢谢各位!! 解决方案 解决方案二:Response,Application,Request,Session看LX怎么说解决方案三:你想干什么?解决方案四:你想让人把本该一本书的内容在这里用不超过10000个字符的篇幅浓缩出来?解决方案五:慢慢整...解决方案六:该回复于2012-04-20 11:55:03被版主删除解决方案七:多看书吧解决方案八:引用2楼的回复: 你想干什么? 我想知道常用是什么........

Ado实现C++对象的存取

其实我最讨厌写东西了,最近忙死了,呵呵,前一段时间在做一个图形程序时,需要把C++对象保存到数据库里,刚开始真让我头疼啊,琢磨了一个下午,终于给做出来了,废话不说了,还是把自己的一些体会与各位同任一起分享!!!! 一.新建一个继承于 CObject 的子类 CLine: 头文件:Line.h class CLine : public CObject? { private : LOGPEN m_logPen; //画笔 COLORREF m_crBackColor; CArray<CPoint,