ADO.NET数据库编程浅析

时间:2022-10-26 01:37:09

ADO.NET数据库编程浅析

摘要:使数据访问技术大大向前迈进了一步,它使开发人员对代码与数据交互的控制达到一个空前的级别,该文通过对包含的类库详细描述,以及通过它实现对各种数据库访问和连接部分的功能,进一步熟悉并掌握的数据库编程,最后通过实例操作来进一步加深对数据库操作技术。

关键词:;数据库;类库;编程

中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)06-1316-03

Tentative Analysis of Database Programming

CHEN Yan-qun1, ZHANG Hua-gui1, WANG Hai-yan2

(1.Information Department, Dalian Sanatorium, Shenyang Military Region, Dalian 116013, China; 2.Educational Technology Center of 65066 Troops Shenyang Military Area Command, Dalian 116100, China)

Abstract: actualizes a great leap of data accessing technology. It enables the developers to reach an unprecedented level in terms of control over interchange between code and data. Through detailed description of the class libraries contained by , and the functions of accessing a variety of database and connection via it, this paper further masters database programming, and final? ly reinforce the operation of database through case operation.

Key words: database; class libraries; programming

ADO是一种专门用于对数据源文件进行读写操作的一种技术,后来由于Microsoft公司推出了.NET编程环境中,作为这个环境下优先使用的数据访问接口,所以将ADO命名为。它为用户提供了一组用于和数据源进行交互的面向对象类库,通过这些类库我们可以很容易地访问各种数据库,甚至是文本文件、Excel表格或者XML文件。

1简述数据访问技术

数据访问技术为各种不同的数据源提供了一些公共的类库用于操作数据源中的数据。通常情况下,他可以与许多类型的对象交互,不仅有存储在数据库中的数据:例如企业及数据库Oracle、Microsoft SQL Server、BM DB2;桌面数据库如Access等等,除了这些以外,它也可以访问其它的非数据库文件。

面向对象编程的好处是可以把各种复杂的功能进行封装,然后对封装的对象定义好使用的接口,封装的对象为用户提供一些方法和属性,用户通过操作这些方法和属性来操作数据源。它的优点是可以连接任何类型的数据库,只要为这些数据源编写好相应的连接通道、驱动程序、适配器等,就可以利用从数据源中操作相应的数据。对于数据库的管理员来说,他可以授予用户使用数据视图的权限,那么也可以把数据通过视图读出来并显示,安全性也非常高。

在处理数据源时,他可以处理断开连接的数据集,在用户重新访问数据时在建立相应的连接,传送数据源中的数据,传送完毕后关闭他们之间的连接,在这种情况下,操作者还可以修改这些数据,修改的数据不会在数据源中立即更新,只有操作者提交了这些对数据库的修改之前,才会去重新连接数据源,这样做的好处是执行效率非常高,可延展性好,节约了系统资源,否则当每个用户建立的会话连接一直打开的话,就会占用非常多的系统资源,而系统资源是非常宝贵的,所以这种方式能够使数据服务器更高效的处理数据。

总之,利用技术所提供的功能能够非常容易地读取各种数据源中的数据,减少程序员需要编写的大量程序代码。的对象模型共提供了五个非常重要的组件,这些组件分别可以连接数据源、对数据源执行SQL命令、对数据源中的数据提取并显示、缓存数据等等操作。下面我们就分别来介绍这五个对象

2 五大对象简介

2.1 Connection对象,负责对数据库进行连接

Connection对象的功能是与数据库之间建立连接,只有成功连接数据库,才能和数据库进行交互。当他和数据进行连接时,需要提供数据库服务器的名称或地址、数据库名称、用户名、用于登录数据库的密码以及其它参数,他工作在的最底层,运

行时通过Command对象进行调用。Connection对象成功连接数据库后,就可以通过command对象对数据库执行SQL语句。在对数据源的操作中,它是最重要的对象,无论对数据源的增、删、改、查等操作,都必须要首先与他成功建立连接,它是与数据库之间交流的一座桥梁。

2.2 Command对象,负责对数据库执行命令

成功与数据源建立连接后,利用Command对象的方法就可以完全操控数据源。其中,对于数据库的基本操作:查询、新增、修改、删除等指令,以及执行数据库中的存储过程和函数就变得更加容易。Command对象在执行前必须要首先使用Connection对象与数据源建立好一条连接通道,然后执行各种所需的SQL命令。Command对象对于数据库来说使用最多的方法有ExecuteReader()方法,用于读取一个表的记录,但是不能进行写入数据的操作;ExecuteScalar()方法,只能读取到一条数据记录,也不能执行写入操作;ExecuteNonQuery()方法,可以对数据进行读写的双向操作。

2.3 DataReader对象,负责对数据库执行命令,但只能从数据库中按顺序读取数据

在数据库的操作中,我们需要按顺序来读取数据库中的记录时,就可以使用DataReader对象。这个对象可以按要求从数据库中每次取一条记录,并且是从上向下地循环读取,并且对数据只能是只读的操作,这种读取的优点是节省资源,效率高。因为他对数据的操作方法较简单,如果你想对数据进行复杂的操作,建议使用DataSet对象。

2.4 DataSet对象,负责对数据库执行命令,及缓存数据等

DataSet对象是数据在内存中的表示形式,他可以把数据库中需要查询到的数据全部保留起来,而且可以包括整个数据库。由于他在对数据库进行操作后(包括获取与更新数据),就立即断开与数据库的连接,所以执行效率比较高,程序员可以使用这个对象及时高效地访问和操作数据库中的数据。由于他的离线特性,也更加适合用于接收大数据量的信息。

2.5 DataAdapter对象,也叫数据适配器,是数据集和数据库之间联系的桥梁

DataAdapter对象主要用于提取数据源中的数据,并将这些数据放到DataSet对象的DataTable中,而且他还可以将数据的改动写回到数据库,他的操作不需要通过中的Command对象来执行。DataAdapter对象工作的过程是首先需要建立并初始化一个DataTable即数据表,然后对连接的数据源执行SQL命令,同时与DataSet对象相结合进行存取数据的操作。他是DataSet对象的操作核心,是这个对象与数据库之间进行沟通的桥梁。

3 数据库编程实例

首先,我们假设在本机已经建立好了一个Sql Server2005的数据库服务,其中Sql Server使用身份验证,登录名:sa,密码:caifox.。我们利用管理员身份到数据库管理器中新建一个Library(图书馆)数据库,并且新建一张Book表。在这张表中添加下面字段:Book_Id(图书编号),Book_Name(书名),Author_Name(图书的作者姓名),Publisher(出版社),字段添加完成后大家可以自行往这个表中添加几条数据作为本实例制作过程中来使用。

在这个实例中,我们使用vs2010控制台程序来演示,启动vs2010后建立一个C#的控制台程序并命名为Ado_netStudy。在Program.cs程序中首先引入下面两行:

using System.Data;//包含数据集/数据表/数据行/类

using System.Data.SqlClient;//包含连接/命令/适配器/读取器/类

在命名空间namespace Ado_netStudy的class Program类中新建一个静态连接字符串便于下面新建的对数据库操作的函数引用字符串变量:

static string conStr = @"Data Source=.;Initial Catalog=Library;User ID=sa;Password=caifox;";

3.1测试数据库连通函数

在class Program类中新建下面的测试函数

public static void TestConnection()

{ SqlConnection conn = new SqlConnection(conStr);//连接数据库通道对象conn.Open();//打开数据库连接通道conn.Close();//关闭数据库连接通

Console.WriteLine("数据库连接成功了");

}

建立完成后在主程序中直接调用estConnection()函数就可以测试数据是否连接成功,后面的几个函数完成后都可以像这个函数一样在下面的主程序中直接调用即可,所以后面的几个对数据库操作的函数就不写下面的代码了,大家可以自行测试。

static void Main(string[] args)

{

TestConnection();//调用测试连接的函数

Console.ReadKey();

}

3.2新增数据库记录函数

public static void AddRecord()

{ int res = -1;//准备接受新增受影响的行数

SqlConnection conn = new SqlConnection(conStr);//连接数据库通道对象

string sqlStr = "insert into Book(Book_Id,Book_Name,Author_Name,Publisher) values(2,’从入门到精通’,’张华贵’,’大连蓝天出版社’)";//准备新增的sql命令

SqlCommand cmd = new SqlCommand(sqlStr, conn); //新建命令对象,并且告诉它怎么连接数据库以入执行什么命令conn.Open();//打开数据库连接通道

res = cmd.ExecuteNonQuery();//此方法负责增删改,返回受影响行数(int)

conn.Close();//关闭数据库连接通

if (res > 0)

{ Console.WriteLine("新增成功啦!");}

else { Console.WriteLine("新增失败啦!");}}

3.3删除数据库记录函数

public static void DelRecord()

{ int res = -1;//准备接受新增受影响的行数

SqlConnection conn = new SqlConnection(conStr);

string sqlStr = "delete book where Book_Id=1"; //准备删除的SQL命令,update更新语句使用同一方法

SqlCommand cmd = new SqlCommand(sqlStr, conn);

conn.Open();

res = cmd.ExecuteNonQuery(); conn.Close(); if (res > 0)

{Console.WriteLine("删除成功啦!");}

else {Console.WriteLine("删除失败啦!);}}

3.4查询单个数据库记录函数

public static void QuerySingle()

{ SqlConnection con = new SqlConnection(conStr); string sqlStr = "select * from Book";

SqlCommand cmd = new SqlCommand(sqlStr, con);

con.Open();

object obj = cmd.ExecuteScalar();//调用此方法,获得查询语句在数据库执行后得到的结果集的第一个单元格的值,返回类型是

object

con.Close();

Console.WriteLine(obj.ToString());//在输出结果集的第一个单元格的值}

3.5查询多行数据--通过DataReader类来读取的函数

public static void QueryListByColName()

{ SqlConnection conn = new SqlConnection(conStr); string sqlStr = "select * from Book";

SqlCommand cmd = new SqlCommand(sqlStr, conn);

conn.Open();

SqlDataReader dr = cmd.ExecuteReader();//调用此方法获得一个读取器对象

if (dr.HasRows) //判断记录集是否包含一行或多行,如果包含多行,则通过循环读取数据并输出到控制台{

while (dr.Read())//Read方法,如果读到下一行数据,则返回true,而且dr本身就等于那一行数据

{

Console.WriteLine(dr["Book_Id"].ToString() + "_" + dr["Book_Name"].ToString() + "_" + dr["Author_Name"].ToString()+ "_" + dr["Publisher"].ToString());

else Console.WriteLine("无数据"); dr.Close();

conn.Close();}

3.6使用适配器读取数据的函数

public static void QueryListByAdapter()

{SqlConnection conn = new SqlConnection(conStr);

string sqlStr = "select * from book";

SqlDataAdapter da = new SqlDataAdapter(sqlStr, conn);//这种方式不需要代码打开和关闭连接通道

DataSet ds = new DataSet(); //创建数据集对象(程序端的临时数据库)

da.Fill(ds); //调用fill方法,填充数据集。

DataTable dt = ds.Tables[0];//获得数据集中的第一张表

for (int i = 0; i < dt.Rows.Count; i++)//循环数据表中的每一行{

DataRow dr = dt.Rows[i];//将循环到的行拿出来给dr对象

Console.WriteLine(dr[0].ToString() + " __ " + dr[1] .ToString());//通过下标获取一行的某列的值并输出}

}

上面的几个函数包括了对数据库增、删、查、改的基本操作,我们只要把这些函数放到Main主函数里执行就可以看到输出结果。是与数据源交互的.NET技术,只要我们熟练掌握的五个对象,我们就可以很容易的操控数据源。

参考文献:

[1]王宝祥.基于的数据库访问技术研究[J].计算机应用与软件,2004(2).

[2]孙三才,许薰尹.程序设计C# [M].北京:中国青年出版社,2001.

[3] Reilly D Web应用程序开发新思维[M].北京:清华大学出版社,2002.

[4]卢成均.多层模式下通用数据存取层的设计与实现[J].计算机工程与设计,2007(13).

上一篇:基于B/S的软件项目交易平台的开发 下一篇:GPON管理系统