ADO.NET数据访问技术
ADO.NET数据访问技术
就是将C#和MSSQLl连接起来的纽带
可以通过ADO.NET将内存中的临时数据写入到数据库中,也可以将数据库中的数据提取到内存中供程序调用。是所有数据访问技术的基础。
ADO.NET使用一些ADO对象,如Connection和Command对象,也引入了一些新对象。关键的新对象包括DataSet,DataReader,和DataAdapter。
Connections. 用于连接和管理针对数据库的事务。
Commands. 用于发出针对数据库的SQL指令。
DataReaders. 用于从SQL Server数据源读取只进流的数据记录。
DataSets. 用于针对结构型数据,XML数据和关系型数据的存储,远程处理和编程。
DataAdapters. 用于推送数据到DataSet,并针对数据库协调数据。
Connections
Connections用于和数据库“沟通”,并且被声明为特定的提供程序级别,例如SQLConnection。Commands扫描连接然后结果集以流的形式被返回,这种流可以被DataReader对象读取,或者推入DataSet对象。
下面的例子演示了如何创建一个连接对象。Connections可以通过调用Open方法被显式打开
SqlConnection conn = new SqlConnection("server=.;database=Data0720;user=sa;pwd=123");
数据库连接字符串
server=连接的数据库;database=连接数据库中国的那个表;user=用户名;pwd=密码
Commands
Commands包含提交到数据库的信息,特定于提供程序的类比如SQLCommand。一个命令可以是一个存储过程调用,一个UPDATE语句,或者一个返回结果的语句。你也可以使用输入和输出参数,返回值作为命令的一部分。下面的示例演示了如何对数据库执行一条insert(无返回值)语句和update(有返回值)语句。
数据访问类中的示例
// 创建 SqlConnection 与 SqlCommand 对象 在构造函数中奖他们实例化出来
SqlConnection conn = null;
SqlCommand cmd = null;
public UsresData()
{
conn = new SqlConnection("server=.;database=mydb;user=sa;pwd=123");
cmd = conn.CreateCommand();
}
public void insert(Users u)//添加方法
{
cmd.CommandText = "insert into Users values(@a,@b,@c,@d,@e,@f,@g)";
cmd.Parameters.Clear();
cmd.Parameters.Add("@a",u.UserName);
cmd.Parameters.Add("@b", u.PassWord);
cmd.Parameters.Add("@c", u.NickName);
cmd.Parameters.Add("@d", u.Sex);
cmd.Parameters.Add("@e",u.Birthday);
cmd.Parameters.Add("@f", u.Nation);
cmd.Parameters.Add("@g",u.Area);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
public bool update(Users u)//修改方法
{
bool ok = false;
cmd.CommandText = " update Users set PassWord=@a,NickName=@b,Sex=@c,Birthday=@d,Nation=@e,Area=@f;";
cmd.Parameters.Clear();
cmd.Parameters.Add("@a",u.PassWord);
cmd.Parameters.Add("@b", u.NickName);
cmd.Parameters.Add("@c", u.Sex);
cmd.Parameters.Add("@d", u.Birthday);
cmd.Parameters.Add("@e", u.NickName);
cmd.Parameters.Add("@f", u.Area);
conn.Open();
try
{
cmd.ExecuteNonQuery();
ok = true;
}
catch
{ }
conn.Close();
return ok;
}
DataReaders
DataReader对象有点类似一种只读/只进的数据游标。DataReader API不但支持平级数据而且支持层级数据。数据库执行一条命令后会返回一个DataReader对象。返回的DataReader对象格式不同于一个记录集。比如,你可以在一个web页面使用DataReader显示搜索结果列表。
下面的示例 读取数据库中数据的方法
// 创建 SqlConnection 与 SqlCommand 对象 在构造函数中奖他们实例化出来
SqlConnection conn = null;
SqlCommand cmd = null;
public UsresData()
{
conn = new SqlConnection("server=.;database=mydb;user=sa;pwd=123");
cmd = conn.CreateCommand();
} public Users select(string uname)//读取一条数据
{
Users u = null;
cmd.CommandText = "select * from Users where UserName=@a;"; //拼TSQL语句
cmd.Parameters.Clear();
cmd.Parameters.Add("@a",uname);
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)// 如果有数据
{
dr.Read();//读取数据
u = new Users();
u.UserName = dr["UserName"].ToString();
u.PassWord = dr["PassWord"].ToString();
u.NickName = dr["NickName"].ToString();
u.Sex = Convert.ToBoolean(dr["Sex"]);
u.Birthday = Convert.ToDateTime(dr["Birthday"]);
u.Nation = dr["Nation"].ToString();
u.Area = dr["Area"].ToString();
}
conn.Close();
return u;
} public List<Users> select()//查全部
{
List < Users > list = new List<Users>();
cmd.CommandText = "select * from Users";
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
Users u = new Users();
u = new Users();
u.UserName = dr["UserName"].ToString();
u.PassWord = dr["PassWord"].ToString();
u.NickName = dr["NickName"].ToString();
u.Sex = Convert.ToBoolean(dr["Sex"]);
u.Birthday = Convert.ToDateTime(dr["Birthday"]);
u.Nation = dr["Nation"].ToString();
u.Area = dr["Area"].ToString();
list.Add(u);
}
}
conn.Close();
return list;
}
DataSets
DataSet对象和ADO RecordSet对象相似,但更强大,并且有一个重要区别:DataSet总是断开连接的。DataSet代表缓存数据,与数据库结构类似例如表,列,关系,和约束。然而,尽管DataSet可以也确实表现的更像一个数据库,最重要的请记住DataSet对象不直接和数据库交互,或者其他数据源。这使得开发人员无论使用什么数据源都可以始终使用一种一致的编程模型。数据从数据库,XML文件来,或者从用户输入来都可以放进DatSet对象。然后,当更改DataSet就可以被跟踪和验证之前更新数据源。DataSet对象的GetChanges方法实际上创建了第二个仅包含更改数据的DataSet。然后由DataAdapter(或其他对象)使用这个DataSet来更新原始数据源。
DataSet具备XML的特性,包括生产和消费XML数据和XML模式的能力。XML模式可以用来描述通过XML Web服务交换的模式。事实上,模式化DataSet实际上可以被编译为类型安全和完整的语句。
DataAdapters (OLEDB/SQL)
DataAdapter对象作为DataSet和数据源之间的桥梁。当使用Microsoft SQL Server数据库时,利用特定提供程序SqlDataAdapter(和他相关的SqlCommand和SqlConnection)可以提高整体的性能。对于其他支持OLE DB的数据库,你可以使用OleDbDataAdapter和他先关的OleDbCommand和OleDbConnection对象。
DataAdapter对象使用命令在DataSet完成变动后更新数据源。使用DataAdapter的Fill方法调用SELECT命令;使用Update方法对于每个更改行调用INSERT、UPDATE或者DELETE命令。你可以显示设置这些命令以便在运行时控制这些语句的使用解决变更,包括使用存储过程。对于特别的场景,CommandBuilder对象可以在运行时基于select语句生成这些语句。然而,运行时创建语句需要在服务器做额外的往返以便手机必须的源数据,所以在设计阶段显示的提供INSERT、UPDATE、和DELETE命令会导致更好的运行时性能。
小结:
- ADO.NET是适合于.NET框架的改进版的ADO。
- ADO.NET是在多层架构、无状态性与XML的情况下诞生的。DataSet和DataAdapter2个对象提供这些场景。
- ADO.NET可以被用于从流获取数据,或者缓存用于更新的数据。
ADO.NET数据访问技术的更多相关文章
- [翻译]比较ADO.NET中的不同数据访问技术(Performance Comparison:Data Access Techniques)
Performance Comparison: Data Access Techniques Priya DhawanMicrosoft Developer Network January 2002 ...
- ADO.Net 数据库访问技术
1.在web.Config配置文件中设置连接字符串 <connectionStrings> <add name="connString" connectionSt ...
- Spring Data:企业级Java的现代数据访问技术(影印版)
<Spring Data:企业级Java的现代数据访问技术(影印版)>基本信息原书名:Spring Data:Modern Data Access for Enterprise Java作 ...
- jdbc数据访问技术
jdbc数据访问技术 1.JDBC如何做事务处理? Con.setAutoCommit(false) Con.commit(); Con.rollback(); 2.写出几个在Jdbc中常用的接口 p ...
- Spring.NET 中的 ADO.NET 数据访问的示例
Spring.NET 1.3.1 中提供了一个使用 AdoTemplate 的完整示例,包括使用泛型和使用非泛型技术进行数据访问,这个示例位于下载的压缩包中\Spring.NET-1.3.1\Spri ...
- ADO.net数据访问方法
ADO.NET是一组用于和数据源进行交互的面向对象的类库. 核心组件有两个: DataSet 是 ADO.NET 的非连接(断开)结构的核心组件.DataSet 的设计目的很明确:为了实现独立于任何数 ...
- ADO.NET数据访问模板整理
/// <summary> /// 数据访问类:hi_test /// </summary> public partial class TestDA { public Test ...
- ADO.NET 数据访问类查询、属性扩展
今天,我首先在之前所做的人员管理系统的基础上,利用数据访问类进行了所有人员信息的查询. 主程序代码: List<Users> Ulist = new UsersData().Select( ...
- ADO.net数据访问
需要引用对应命名空间:System.Data.SqlClient; SqlConnection:连接对象SqlCommand:命令对象SqlDataReader:读取器对象 //造连接字符串 stri ...
随机推荐
- UI控件(UISegmentedControl)
@implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; NSArray* segmentArray = [[ ...
- C#温故知新:《C#图解教程》读书笔记系列
一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...
- 飞鱼(FlyFish)——便捷的原型在线制作工具
关于项目原型制作,小菜先前写过一篇文章<FastUI快速界面原型制作工具>,只不过那个是用C#写的原型制作工具,但是感觉用C#写起来比较费力,而且也不太好用,经过高人指点,茅塞顿开,决定重 ...
- C语言 · 最小公倍数
问题描述 编写一函数lcm,求两个正整数的最小公倍数. 样例输入 一个满足题目要求的输入范例.例:3 5 样例输出 与上面的样例输入对应的输出.例: 数据规模和约定 输入数据中每一个数的范围. 例:两 ...
- JS实战 · 级联菜单选择省份和城市(两种)
DOM编程步骤.思路 1.定义界面: 通过html标签将数据进行封装: 2.定义一些静态样式: 利用css: 3.需要动态地完成的和用户的交互: a:明确事件源: ...
- EF Codefirst 多对多关系 操作中间表的 增删改查(CRUD)
前言 此文章只是为了给新手程序员,和经验不多的程序员,在学习ef和lambada表达式的过程中可能遇到的问题. 本次使用订单表和员工表建立多对多关系. 首先是订单表: public class Ord ...
- 王宝强新片P2P风波持续发酵,互金真的前途未卜?
王宝强离婚风波还未完全结束,一波未平一波又起,新片又引来话题爆点,其自导自演的电影<大闹天竺>陷P2P平台集资的新闻占据各大媒体头条. 该P2P平台为湖北武汉一家P2P互联网金融理财平台& ...
- 冒烟测试 smoking test
冒烟测试的概念: 版权声明:本文为博主原创文章,未经博主允许不得转载. 冒烟测试既是对软件基本的功能进行测试,测试的对象是每一个新编译的需要正式测试的软件版本,目的是确认软件基本的功能正常,保证软件系 ...
- CentOS 下 MySQL DateBasic 抢救
CentOS 下 MySQL DateBasic 抢救 强 Kill 数据库进程. 分析问题:确定报错内容 报错信息:The server quit without updating PID file ...
- SVN:服务器资源删掉,本地添加时和删掉的名字同名出现One or more files are in a conflicted state.
异常处理汇总-开发工具 http://www.cnblogs.com/dunitian/p/4522988.html