- 浏览: 236934 次
- 性别:
- 来自: 常州
文章分类
- 全部博客 (165)
- Java基础 (49)
- 开发工具 (3)
- Python基础 (1)
- Oracle基础 (9)
- Java 符号计算 (0)
- 计算机基本原理 (10)
- SQL (6)
- javascript (16)
- HTML (2)
- XML (4)
- 程序员之路 (7)
- JDBC (1)
- Unicode (0)
- 字符编码 (3)
- JSP基础 (2)
- Servlet&JSP (9)
- MySQL基础 (1)
- UML基础 (1)
- Hibernate (2)
- Java包 (1)
- Spring (1)
- Struts2 (9)
- 系统命令 (1)
- Tomcat (1)
- Windows (1)
- Android (1)
- C#基础 (14)
- HTML5 (1)
- .NET基础 (1)
- 数据库基础 (2)
- ASP.NET基础 (7)
- 开源Java (3)
- 趣味算法 (1)
- 面向对象思想 (1)
- 软件应用 (1)
- Web工程 (1)
- jquery (2)
- JPA (0)
- 设计模式 (0)
最新评论
-
静夜独窗:
JavaBean组件能说的具体一点吗,我感觉这样说理解的不清晰 ...
EL 表达式语言 -
静夜独窗:
在Java中,不同字符集编码的转换是通过Unicode作为中介 ...
JavaWeb中的乱码产生与解决方案
System.Data包含两个主要命名空间
System.Data.OleDB
System.Data.SQLClient
System.Data.OracleClient
ADO.NET支持两种访问数据的模型:无连接模型和连接模型。
无连接模型将数据封装到内存中,然后可以像访问本地关系数据库已压根访问内存中的数据。
连接模型依赖封于逐记录的访问,这种访问要求打开并保持与数据库的连接。
ADO.NET数据访问步骤
第一步:导入的命名空间:连接不同的数据库所采用的对象是不一样的,因此导入的命名空间也不一样
SQL Server/Oracle/Access……
第二步:建立应用程序对数据库的连接
第三步:向数据库发送SQL命令
命令类型
SQL文本
存储过程
命令执行类型
查询命令
数据操作命令
第四步:返回命令执行结果
第五步:用户对返回结果进行处理:将结果显示在用户界面上
一、连接数据库:Connection对象
1. Connection对象
Connection对象是一个连接对象,主要功能是建立于物理数据库的连接,主要包括4中访问数据库的对象类,也可称为数据提供程序,如下:
SQL Server数据提供程序,位于System.Data.SqlClient命名空间 相对应:SqlConnection
ODBC数据提供程序,位于System.Data.Odbc命名空间 相对应:OdbcConnection
OLEDB数据提供程序,位于System.Data.OleDb命名空间 相对应:OleDbConnection
Oracle数据提供程序,位于System.Data.OracleClient命名空间 相对应:OracleConnection
打开连接为: .Open() 关闭连接为:.Close()
2. 连接数据库
以SQL Server数据库为例,如果要连接SQL Server数据库,必须使用System.Data。SqlClient命名空间下的SqlConnection类。
通过using System.Data.SqlClient命名引用命名空间,连接数据库之后,通过调用SqlConnection对象的Open方法打开数据库。通过SqlConnection对象的State属性判断数据库的连接状态。
public overriid ConnectionState State{get;}
属性值:ConnectionState枚举。
ConnectionState枚举的值及说明:
枚举值 | 说明 |
Broken | 与数据库的连接中断。只有在连接打开之后才可能发生这种情况。可以关闭处于在这种状态的连接,再重新打开。 |
Closed | 连接处于关闭状态。 |
Connectioning | 连接对象正在与数据源连接。 |
Executing | 连接对象正在指向命令。 |
Fetching | 连接对象正在检索数据。 |
Open | 连接处于打开状态。 |
3. 关闭连接
当对数据库操作完毕后,要关闭与数据库的连接,释放占用的资源。通过调用SqlConnection对象的Close()方法或Dispose()方法关闭与数据库的连接,
这两种方法的区别:
Close()方法用于关闭一个连接。当使用Close()方法关闭连接后,可以再调用Open()方法打开连接,不会产生任何错误。
Dispose()方法比较关闭一个连接,而且还清理连接所占用的资源。如果使用Dispose()方法关闭连接,就不可以在此直接用Open方法打开连接,必须再次重新初始化连接再打开。
二、执行SQL语句:Command对象
1. Command对象
Command对象是一个数据命令对象,主要功能是向数据库发送查询、更新、删除、修改的SQL语句。Command对象主要有以下几种方式:
1. SqlCommand:向SQL Server数据库发送SQL语句,位于System.Data.SqlClient命名空间。
2. OdbcCommand:向使用ODBC公开的数据库发送SQL语句,位于System.Data.Odbc命名空间。有些数据库没有提供相应的连接程序,则可以配置好ODBC连接后,使用OdbcCommand。
3. OleDbCommand:向使用OLEDB公开的数据库发送SQL语句,位于System.Data.OleDb命名空间。例如,Access数据库和MySQL数据库都是OLEDB公开的数据库。
4. OracleCommand:向使用ORACLE公开的数据库发送SQL语句,位于System.Data.OracleClient命名空间。
注意:
System.Data.OracleClient命名空间,在默认情况下没有此命名空间,此时,需要将System.Data.OracleClient引入到项目中,引入程序集的方法是在项目名称上单击鼠标右键,在菜单中选择“添加应用”,打开“添加应用”对话框,在该对话框中选择System.Data.OracleClient程序集,单击“确定”按钮,即可将其添加到项目中。
2. 设置数据源类型
Command对象有三个重要属性:Connection属性,CommandText属性,CammandType属性。
Connection属性用于设置Sqlcommand使用的SqlConnection。
CommandText属性用于设置要对数据源执行的SQL语句或存储过程。
CammandType属性用于设置知道CommandText的类型。CammandType属性的值是CommandType枚举值,CommandType枚举有3个枚举成员:
StoredProcedure:存储过程的名称。
TableDirect:表的名称。
Text:SQL文本命令。
如果要设置数据源的类型,便可以通过设置CommandType属性来说
3. 执行SQL语句
几种执行SQL语句的方法。
1. ExecuteNonQuery方法
用于向数据库发送增、删、改命令。
public override int ExecuteNonQuery()
返回值:受影响的行数。
说明:
如果想要执行存储过程,应将CommandType属性设置为StoredProcedure,将CommandText属性设置为存储过程的名称。
2. ExecuteReader方法
执行SQL语句,并生成一个包含数据的SqlDataReader对象的实例。
public SqlDataReader ExecuteNonQuery()
返回值:一个SqlDataReader对象。
例:
SqlCommand cmd = new SqlCommand(strSql,conn); 或者【 SqlCommand cmd = new SqlCommand(); cmd.Connection = conn;cmd.CommandText=strSql;cmd.CommandType=CommandType.Text; 】
SqlDataReader sdr = cmd.ExecuteReader();
while (sdr.Read())
{
listView1.Items.Add(sdr[1].ToString());
}
3.ExecuteScalar()方法
执行SQL语句,返回结果集中的第一行的第一列。
public override Object ExecuteScalar()
返回值:结果集中第一行的第一列或空引用(如果结果集为空)。
说明:ExecuteScalar方法通常与聚合函数一起使用。
三、读取数据:DataReader对象
DataReader对象是数据读取器对象,提供只读向前的游标,如果只是需要快速读取数据,并不需要修改数据,那么就可以使用DataReader对象进行读取,对于不同的数据库连接,有不同的DataReader类型:
1. 在System.Data.SqlClient命名空间下时,可以调用SqlDataReader类。
2. 在System.Data.Odbc命名空间下时,可以调用OdbcDataReader类。
3. 在System.Data.OleDb命名空间下时,可以调用OleDbDataReader类。
4. 在System.Data.OracleClient命名空间下时,可以调用OracleDataReader类。
在使用DataReader对象读取数据时,可以使用ExecuteReader方法,根据SQL语句的结果创建一个SqlDataReader对象。
说明:在创建DataRelation时,它首先验证是否可以建立关系。在创建DataRelation和将其添加到
DataRelationCollection(DataSet的DataRelation对象的集合)之间的这段时间,可以对父行或子行进行其他更改。
判断查询结果中是否有值
可以通过SqlDataReader对象的HasRows属性获取一个值,该值指示SqlDataReader是否好汉一行或多行,即半段查询结果中是否有值。
public override bool HasRows{get;}
属性值:如果SqlDataReader包含一行或多行,则为true;否则为false。
读取数据
如果要读取数据表中的数据。 通过ExecuteReader方法,根据SQL语句创建一个SqlDataReader对象后。调用SqlDataReader对象的Read方法读取数据。Read方法使SqlDataReader前进到下一条记录,SqlDataReader的默认位置在第一条记录前面。因此,必须调用Read方法访问数据。对于每个关联的SqlConnection,一次只能打开一个SqlDataReader,在第一个关闭之前,打开另一个的任何尝试都将失败。
public override bool Read()
调用该方法,则游标向下读取一行数据。
返回值:如果下一条还有数据,则为true;如果下一条没有数据,则为false。
在使用玩SqlDateReader对象后,要使用Close方法关闭SqlDataReader对象。
public override void Close()
遍历DataReader对象
while(reader.Read())
{
}
读取数据
reader.GetXXX(xxx)
GetXXX:表示读取数据的类型。例如:GetString(),GetInt32()
xxx:表示字段名称。
例如:
reader.GetString("username") 读取数据select语句返回结果集的当前记录条数的username字段的数据。
参数化查询
Command对象的属性Parameters是一个集和对象。
Parameters对象的方法
Add():添加参数对象。
Clear():清除上一次使用Parameters时添加的参数对象。在每次使用Parameters之前调用。
注意:
在实际使用时,不会每次都创建Command,Parameters等对象。而是每次都重用第一次创建的这些对象。
想其中添加SqlParameter对象。
SqlParameter的构造函数有两个参数。第一个是参数的名称,第二个是参数的实际值。
例:
cmd.CommandText="select * from T_Users where UserName=@U and Password=@P";
cmd.Parameters.Clear();
cmd.Parameters.Add(new SqlParameter("U",username));
cmd.Parameters.Add(new SqlParameter("P",password));
int i=Conver.ToInt32(cmd.ExecuteScalar());
说明:
1. DateReader取得的数据结果集不管多少条,对服务器是没有影响的。
在读取时,一旦数据库连接断开,就无法再读取数据了。
原理:DateReader相对于指针(游标),读取数据时,只是移动指针(游标)。
2. DateReader不适合小数据量数据结果。
四、数据适配器:DataAdapter对象
1. DataAdapter对象
DataAdapter对象是一个数据适配器对象,是DataSet与数据源之间的桥梁。DataAdapter对象对象提供了4个属性,实现与数据源之间的互通:
SelectCommand属性:向数据库发生查询SQL语句。
DeleteCommand属性:向数据库发生删除SQL语句。
InsertCommand属性:向数据库发生插入SQL语句。
UpdateCommand属性:向数据库发生更新SQL语句。
使用DataAdapter必须使用响应的Command属性。否则没有意义。可以在构造函数中放入Command对象。
DataAdapter adapler=new DataAdapter(cmd);
在对数据库进行操作时,只要将这4个属性设置成相应的SQL语句即可。DataAdapter对象中还有几个主要的方法,具体如下:
1. Fill方法用数据填充DataSet。
public int Fill(DataSet dataSet,string srcTable)
dataSet:要用记录和架构填充的DataSet。
srcTable:用于表映射的源表的名称。注意:该参数可选。
返回值:已在DataSet中成功添加或刷新的行数,这不包括受不返回行的语句影响的行。
说明:
当创建DataAdapter的实例时,将其读/写数学将设置为初始值,MissingMappingAction数学设置为MissingMappingAction.Passthrough,MissSchemaAction属性设置为MissingSchemaAction.Add。
2. Update方法更新数据库时,DataAdpter将调用DeleteCommand,InsertCommand,UpdateCommand属性。
public int Update(DataTable dataTable)
dataTable:用于更新数据源的DataTable。
返回值:DataSet中成功更新的行数。
实例:
string strConn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQL Server链接字符串
SqlConnection ConnSql=new SqlConnection (strConn); //Sql链接类的实例化
ConnSql.Open ();//打开数据库
string strSQL="SELECT * FROM 表名1 "; //要执行的SQL语句
SqlDataAdapter da=new SqlDataAdapter(strSQL,ConnSql); //创建DataAdapter数据适配器实例
DataSet ds=new DataSet();//创建DataSet实例
da.Fill(ds,"自定义虚拟表名");//使用DataAdapter的Fill方法(填充),调用SELECT命令
ConnSql.Close ();//关闭数据库
2. 填充DataSet数据集
通过DataAdpter对象的Fill方法填充DataSet数据集,Fill方法使用Select语句从数据源中检索数据。与Select命令关联的Connection对象必须有效,但不需要将其打开。
说明:DataSet和DataTable对象从MarshalByValueComponent(实现IComponent并提供可远程控制的组件的基实现)继承而来,并支持用于远程处理ISerializable接口。
3. 更新数据源
使用DataAdpter对象的Update方法,可以将DataSet中修改过的数据及时地更新到数据库中。在调用Update方法之前,要实例化一个CommandBuilder类,它能自动根据DataAdapter的SelectCommand的SQL语句判断其他的InsertCommand,UpdateCommand和DeleteCommand。这样就不要设置DataAdpter的InsertCommand,UpdateCommand和DeleteCommand属性,直接使用DataAdapter的Update方法来更新DataSet,DataTable或DataRow数组即可。
五、数据集DataSet对象
1. DataSet对象
DataSet对象就像存放于内存中的小型数据库。它可以包含数据表、数据列、数据行、视图、约束以及关系。
通常DataSet的数据来源于数据库或者XML,为了从数据库中获取数据,需要使用数据适配器(DataAdapter)从数据库中查询数据。
创建DataSet对象
DataSet dataset=new DataSet();
填充DataSet
SqlAdapter adapter=new SqlAdapter(cmd);
adapter.Fill(dataset);
DataSet的Tables属性
Tables属性是DataTable对象的集和。可以使用Tables属性得到DataSet中的表。
DataTable table=dataset.Tables[0];
说明:一般情况下,DataSet中只有一个DataTable。
DataTable的Rows属性
Rows属性是DataRow对象的集和。
for(int i=0;i<table.Rows.Count;i++) //遍历Rows属性。
{
DataRow row=table.Rows[i];
string name=Convert.ToString(row["Name"]);
}
Rows.Count表示行数。
table.Rows[i] 表示取得table的第i行。
row["Name"] 表示取得row的Name字段的值。
注意:
DataSet是离线式的,占用内存。所以只适合小数据量。大数据量会把内存占满。
1. 合并DataSet内容
可以使用DataSet的Merge方法将DataSet,DataTable或DataRow数组的内容并入现有的DataSet中。Merge方法将指定的DataSet及其架构与当前的DataSet合并,在此过程中,将根据给定的参数保留或放弃在当前DataSet中的更改并处理不兼容的架构。
方法为:Merge(dataSet将合并的数据和架构的dataSet名,preserveChanges是否保留当前DataSet中的更改,missingSchemaAction枚举值之一);
public void Merge(DataSet dataSet,bool preserveChanges,MissingSchemaAction missingSchemaAction )
dataSet:其数据和架构被合并到DataSet中。
preserveChanges:要保留当前DataSet中的更改,则为true,否则为false。
missingSchemaAction: MissingSchemaAction枚举值之一。
MissingSchemaAction枚举成员及说明:
枚举成员 | 说明 |
Add | 添加必须的列以完成架构。 |
AddWithKey | 添加必须的列和主键信息以完成架构,用户可以在每个DataTable上显示设置主键约束。这样确保对与现有记录匹配的传入记录进行更新,而不是追加。 |
Error | 如果缺少指定的列映射,则生产InvalidOperationException。 |
Ignore | 忽略额外列。 |
注意:
当DataSet对象为null时,无法进行合并。
2. 复制DataSet内容
方法为:Copy 例:DataSet ds1 =ds.Copy();
发表评论
-
C#学习笔记——文件访问
2012-11-12 23:17 872一.磁盘的基本操作 DriveInfo类提供方法和属性以查询 ... -
C# 学习笔记——数学计算,日期,字符串
2012-11-10 14:24 2350一.数学计算 Math name ... -
C#学习笔记——集合与数据结构
2012-11-06 23:10 5107.NETFramework的System.Collect ... -
Java 与 C# 计算性能比较
2012-11-02 14:51 1153程序:寻找2亿以内的最大素数,从2开始寻找。 Java程序: ... -
C#学习笔记——反射
2012-10-27 15:43 850Type类 BCL声明了一个叫做Type的抽象类,它被设计用 ... -
C#学习笔记——接口
2012-10-27 13:06 895声明接口 接口声明不包含数据成员。 接口声明只能包含如下类 ... -
C#学习笔记——事件
2012-10-18 16:40 1564事件 事件和委托相似 事件的很多方面和委托相似。其实 ... -
C#学习笔记——委托
2012-10-16 16:33 883委托 委托包含具有相 ... -
C#学习笔记——其他
2012-10-15 22:48 869运算符重载 C#运算符被定义为使用预定义类型作为操作数来工作 ... -
C#学习笔记——面向对象——类的继承
2012-10-15 14:31 1171类继承 基类,派生类 public class MyCla ... -
C#学习笔记——面向对象——类的基本概念
2012-10-12 16:06 1388类 class MyClass { } ... -
C#学习笔记——C#关键字
2012-10-12 14:54 801关键字 abstract as ... -
C#学习笔记——面向过程
2012-10-12 12:27 862基本数据类型 类型 别名 ...
相关推荐
本文将深入探讨三种常见的.NET框架下的数据库访问技术:ADO.NET SQL、LINQ to SQL以及ADO.NET Entity Framework(EF),并重点分析它们在数据库连接性能上的差异,特别是在插入和读取操作,包括模糊检索方面的表现。...
《基于ADO.NET与SQL2005的学生管理系统详解》 在信息技术日新月异的今天,学生管理系统已经成为教育机构日常管理的重要工具。本系统利用ADO.NET技术和SQL Server 2005数据库,实现了对学生的全面信息化管理,为教育...
ADO.NET 4是微软.NET Framework 4的一部分,它提供了一组用于访问数据库的类和接口。这个技术允许开发者高效地创建、操作和管理数据存储,无论是关系型数据库还是其他类型的数据源。本压缩包文件“ADO.NET 4从入门到...
《ADO.NET 4从入门到精通》主要内容简介:ADO.NET是windows开发平台上的核心数据技术之一。《ADO.NET 4从入门到精通》是microsoft ADO.NET 4的入门教程,旨在帮助visual basic和c#开发人员了解ADO.NET及相关技术的...
### ADO.NET核心技术详解 #### 一、ADO.NET概述 ADO.NET是一组包含在.NET框架中的库,专门用于在.NET应用程序的各种数据存储之间进行通信。它不仅能够作为一个强大的、层次化的数据缓存来使用,还支持离线处理数据...
ADO.NET 是 .NET Framework 中用于访问关系数据库的关键组件,它提供了与各种数据源(如 SQL Server、Oracle 等)交互的灵活性。在2021-09版的官方参考文档中,主要关注了DataSet、DataTable、DataView这三个核心类...
ADO.NET是Microsoft开发的一种用于访问关系数据库的数据访问技术,它为.NET Framework应用程序提供了一套全面的数据访问组件。本文将深入探讨ADO.NET的核心概念、对象模型和数据操作。 首先,我们来看ADO.NET的设计...
《自做的ADO.NET项目——借阅图书》 在信息技术领域,数据库管理是不可或缺的一部分,而ADO.NET作为.NET框架中用于数据库交互的重要组件,为开发者提供了高效、强大的数据访问能力。本项目“借阅图书”正是基于ADO...
ADO.NET是微软.NET框架的一部分,主要用于访问和操作数据库。它为开发者提供了强大的数据访问接口,使得程序员能够高效地处理各种数据库任务,如查询、更新、插入数据等。本资源是《ADO.NET专业项目实例开发》一书的...
ADO.NET是微软.NET框架下的一种数据访问技术,用于与数据库进行交互。它是.NET应用程序与数据库之间通信的基础,提供了高效、灵活的数据处理能力。本教程专为初学者设计,旨在帮助新接触ADO.NET的开发者理解其核心...
ADO.NET 是微软为.NET Framework 设计的一种全新的数据库访问技术,它是对传统ADO(ActiveX Data Objects)的升级,旨在提供更高效、更易用的数据访问接口。ADO.NET 的设计核心是面向数据集而非数据库,这使得它更适合...
ADO.NET是微软开发的一种用于访问数据的框架,它在.NET Framework中扮演着核心角色,为开发者提供了高效、灵活的数据访问接口。"ADO.NET本质论"这本书深入探讨了ADO.NET的内在原理和实际应用,旨在帮助读者理解并...
ADO.Net助手是一个获取ADO.Net连接字符串(支持Access,SQLite,SQLServer,MySQL和ORACLE),测试SQL命令,存储过程和数据库之间互导数据的辅助软件。ADO.Net助手还可以用来以插入SQL语句形式导出导入记录,目前提供了...
轻轻松松掌握 ADO.NET 事务处理方法技巧 ADO.NET 事务处理方法是指在编程中使用的一种机制,用于保证数据一致性和完整性。事务是一组不可分的 SQL 语句,在编程中也是很难解决的一个问题。ADO.NET 事务处理方法提供...
本实验“ADO.NET大数据量操作数据库实验”聚焦于如何高效地在SQL Server中存储和处理大量数据。实验环境基于Visual Studio 2015(VS2015)和SQL Server 2008,采用多种方法来演示批量数据插入,包括常规方法、Bulk ...
ADO.net 操作数据库总结 ADO.net 是 một 微软公司开发的数据库访问技术,用于与关系数据库管理系统(RDBMS)交互。以下是 ADO.net 操作数据库的总结,包括使用 SqlConnection 和 SqlCommand 对象连接数据库、执行...
【标题】:“【传智播客.Net培训—ADO.Net】5练习登录”指的是一个关于ADO.NET技术在实际登录功能中的应用教程。这个练习可能是针对初学者或者已经有一定基础的.Net开发者设计的,旨在通过实际操作加深对ADO.NET的...
ADO.NET是微软.NET框架下的一种数据访问技术,用于与各种关系型数据库进行交互。它提供了一组组件和服务,使得开发者可以高效、灵活地存取和处理数据。在本"ADO.NET数据库访问技术案例教程"中,我们将深入探讨ADO...
ADO.NET是微软.NET框架的一部分,它提供了一组用于与数据源进行交互的组件,使得开发者能够高效、灵活地处理各种数据库操作。这个标题"ADO.Net数据库访问(代码示例)"暗示我们将深入探讨如何使用ADO.NET进行数据库的...
ADO.NET是微软.NET框架下的一种数据访问技术,用于与各种关系型数据库进行交互,包括SQL Server、Oracle、MySQL等。这个实例着重展示了如何利用ADO.NET进行数据库的基本操作,如连接数据库、执行SQL语句、处理结果集...