- 浏览: 229535 次
- 性别:
- 来自: 常州
文章分类
- 全部博客 (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 835一.磁盘的基本操作 DriveInfo类提供方法和属性以查询 ... -
C# 学习笔记——数学计算,日期,字符串
2012-11-10 14:24 2280一.数学计算 Math name ... -
C#学习笔记——集合与数据结构
2012-11-06 23:10 5065.NETFramework的System.Collect ... -
Java 与 C# 计算性能比较
2012-11-02 14:51 1091程序:寻找2亿以内的最大素数,从2开始寻找。 Java程序: ... -
C#学习笔记——反射
2012-10-27 15:43 813Type类 BCL声明了一个叫做Type的抽象类,它被设计用 ... -
C#学习笔记——接口
2012-10-27 13:06 859声明接口 接口声明不包含数据成员。 接口声明只能包含如下类 ... -
C#学习笔记——事件
2012-10-18 16:40 1531事件 事件和委托相似 事件的很多方面和委托相似。其实 ... -
C#学习笔记——委托
2012-10-16 16:33 836委托 委托包含具有相 ... -
C#学习笔记——其他
2012-10-15 22:48 810运算符重载 C#运算符被定义为使用预定义类型作为操作数来工作 ... -
C#学习笔记——面向对象——类的继承
2012-10-15 14:31 1130类继承 基类,派生类 public class MyCla ... -
C#学习笔记——面向对象——类的基本概念
2012-10-12 16:06 1348类 class MyClass { } ... -
C#学习笔记——C#关键字
2012-10-12 14:54 768关键字 abstract as ... -
C#学习笔记——面向过程
2012-10-12 12:27 817基本数据类型 类型 别名 ...
相关推荐
《ADO.NET 4从入门到精通》主要内容简介:ADO.NET是windows开发平台上的核心数据技术之一。《ADO.NET 4从入门到精通》是microsoft ADO.NET 4的入门教程,旨在帮助visual basic和c#开发人员了解ADO.NET及相关技术的...
ADO.Net助手是一个获取ADO.Net连接字符串(支持Access,SQLite,SQLServer,MySQL和ORACLE),测试SQL命令,存储过程和数据库之间互导数据的辅助软件。ADO.Net助手还可以用来以插入SQL语句形式导出导入记录,目前提供了...
数据ADO.NET sql、LINQ to sql、ADO.NET Entity Framework(EF)数据库连接性能比较,主要比较了插入与读取的时间,读取里可以进行模糊检索
摘要:基于ASP.NET的WEB应用程序项目,使用程序语言C#,利用ADO.NET访问数据库,实现一个简易的用户登陆注册系统。主要实现的功能有用户登陆、用户注册、找回密码,... 关键字:ASP.NET;ADO.NET;WEB;vs2010;数据库
C#与数据库访问技术 ADO.NET(ActiveX Data Object.NET)是Microsoft公司开发的用于数据库连接的... ADO.NET还提供了对XML格式文档的支持,所以通过ADO.NET组件可以方便地在异构环境的项目间读取和交换数据。 ......
关于ado.net简单的参数化查询,操作的是oracle数据库!关于ado.net简单的参数化查询,操作的是oracle数据库!
Table of Contents Microsoft ADO.NET Step by Step Introduction Part I - Getting Started with ADO.NET Chapter 1 - Getting Started with ADO.NET ...
讲解了数据结构,演示了如何用ADO.NET来解决具体的数据访问问题。重点讨论了ADO.NET如何有效地平衡"功能的泛化"和"执行效率",以及它如何解决对扩展性、并发性和可靠性的要求。针对其他数据访问API(包括OLE DB,ADO...
ADO.NET自己封装SqlHelper类 1、简单封装 2、传递参数封装 3、参数可变封装
Pro ADO.NET Data Services: Working with RESTful Data Paperback: 336 pages Publisher: Apress; 1 edition (December 2, 2008) Language: English ISBN-10: 143021614X ISBN-13: 978-1430216148 Format: PDF You...
ADO.Net数据库访问(代码示例),介绍了ADO.Net数据库访问的核心技术
ADO.NET 4从入门到精通源代码 里面有 未完成的和已完成的 源代码示例
ADO.NET是Microsoft最新推出的数据访问技术。作为.NET框架的一部分,ADO.NET绝不仅仅是前一版本ADO的简单升级。ADO.NET提供了一组.NET类,这些类不仅可以帮助我们对各种数据源进行高效访问,使我们能够对数据...
本书是使用Microsoft Visual Studio .NET和ADO.NET编写高可伸缩性、可用Web数据库应用程序的开发人员必备指南。介绍了如何使用ADO.NET在企业级的Web应用程序中访问、排序和处理数据。通过书中丰富的实例和工具,读者...
通过 ADO.NET 访问数据 ADO.NET 概述 ADO.NET 的设计目标:讨论创建 ADO.NET 的动机和设计目标。 ADO.NET 结构:提供 ADO.NET 结构和组件的概述。 .NET 数据提供程序:提供有关随 ADO.NET 提供的 .NET 数据提供程序...
讲解了数据结构,演示了如何用ado.net来解决具体的数据访问问题。重点讨论了ado.net如何有效地平衡"功能的泛化"和"执行效率",以及它如何解决对扩展性、并发性和可靠性的要求。针对其他数据访问api(包括ole db,ado...
Professional ADO .NET Programming Professional ADO .NET Programming Professional ADO .NET Programming Professional ADO .NET Programming
ADO.net操作数据库总结,包括SqlConnection、SqlCommand等
2.掌握ADO.NET对象的使用方法。 3.初步熟悉数据绑定控件GridView控件的使用方法。 二.实验内容: 本实验将通过创建一个的“C#学习网”,使同学们掌握ASP.NET服务器验证控件、ADO.NET对象的使用方法,并初步熟悉...
Teach yourself the fundamentals of ADO.NET 4 — one step at a time. With this practical, learn-by-doing tutorial, you get the clear guidance and hands-on examples you need to start creating ...