c#学习笔记04——ADO.NET
- ADO.NET结构:ADO.NET建立在几个核心类之上,这些类可以分为两组
- 包含和管理数据的类:DataSet DataTable DataRow DataRelation...
- 链接数据源的类:Connection Command DataReader...
- 数据提供器与DataSet之间的关系

- ADO.NET命名空间
- 数据提供器类
- 数据库访问方式
- 直接数据库访问:一种最容易的访问数据库的方式。使用直接数据库访问可以创建并执行SQL命令。使用直接访问数据库时,并不需要在内存中保存信息副本。
- 简单的数据查询步骤(ASP.NET页面)
- 创建Connection Command和DataReader对象
- 使用DataReader对象从数据库获得信息,并显示在Web表单的控件里
- 关闭连接
- 发送页面到客户端。此时,在页面上看到的信息和数据库中的信息不存在任何联系,且所有的ADO.NET对象都被释放。
- 插入和更新数据步骤
- 创建Connection和Command对象
- 执行SQL命令
- 创建连接
//声明一个Connection对象
//为该对象的属性ConnectionString设定一个值
//SQL Server .ver
//DataSource=数据库服务器
//Initial Catalog=要访问的数据库
//User ID=登录名;Password=密码;
SqlConnection connection=new SqlConnection();
connection.ConnectionString="DataSource=zzl;Initial Catalog=BookSample;User ID=sa;PassWord=123"; - Select命令
()创建一个Command对象,指定SQL命令,并设置可以利用的数据库连接
SqlCommand myCommand=new SqlCommand();
myCommand.Connection=connection;
myCommand.CommandText="Select * from DataTable";
()在创建Command对象时,直接指定SQL命令和数据库连接
SqlCommand myCommad=new SqlCommand("Select * from DataTable",connection); - DataReader:如果利用Command对象执行的命令时有传回数据的Select语句,此时Command对象会自动产生一个DataReader对象,可以将数据源的数据抽取后显示给使用者。可以在执行Execute方法时传给一个DataReader类型的变量来接收。一次仅读取一条数据,且只能只读。
using cs002;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
namespace cs002
{
public class program
{
public static SqlConnection CreateConnection()
{
string ConnectionString = "Data Source=arkiwang;initial Catalog=scott;User ID=sa;PassWord=123";
SqlConnection sqlConnection = new SqlConnection(ConnectionString);
return sqlConnection;
}
public static void Main(string[] args)
{
string name = Console.ReadLine();
string selectSQL = "select * from students where StuName='" + name + "'";
SqlConnection sqlConnection = CreateConnection();
SqlCommand cmd = new SqlCommand(selectSQL, sqlConnection);
SqlDataReader reader; try
{
sqlConnection.Open();
reader = cmd.ExecuteReader();
reader.Read();
Console.WriteLine("学生{0}的基本信息:", name);
Console.WriteLine("姓名:{0}", reader["StuName"]);
Console.WriteLine("电话:{0}", reader["Phone"]);
Console.WriteLine("地址:{0}", reader["Address"]);
Console.WriteLine("城市:{0}", reader["City"]);
Console.WriteLine("国家:{0}", reader["State"]); }
catch(Exception err)
{
Console.WriteLine("连接数据库错误:{0}", err.Message.ToString());
}
finally
{
sqlConnection.Close();
//Console.WriteLine("前数据库连接:{0}", SqlConnection.State.ToString()); }
Console.ReadLine();
}
}
}
- 简单的数据查询步骤(ASP.NET页面)
- 直接数据库访问:一种最容易的访问数据库的方式。使用直接数据库访问可以创建并执行SQL命令。使用直接访问数据库时,并不需要在内存中保存信息副本。
- 不链接的数据库访问:会在内存中的DataSet对象中保存数据的副本,在数据库断开链接后仍然能操作这些数据。不链接的数据库访问方式并不是意味着不需要连接到数据库,而连接数据库后,把数据从数据库中取出并放入DataSet,然后断开数据库连接,这时虽然断开连接,但仍可以对这些数据进行操作。不过因为连接已经断开,将不会同步到数据库影响其状态。
- DataAdapter:数据适配器DataAdapter表示一组数据命令和一个数据库连接,它们用于填充DataSet和更新数据源。常与DataSet一起配合使用,作为DataSet和数据源之间的桥接器以便检索和保存数据。
- DataSet:从数据库完成数据抽取后,DataSet就是数据的存放地,它是各种数据源中的数据在计算机内存中映射成的缓存。
特性
- 独立性:DataSet独立于各种数据源
- 离线(断开)性:DataSet既可以以离线方式也可以以实时连接来操作数据库中的数据
- DataSet对象是一个可以用XML形式表示的数据视图,是一种数据关系视图
- 以不连接的方式获取数据:DataAdapter对象提供了一个名为Fill的方法,使用该方法可以把从数据库中获取的数据填充到DataSet对象中。
/*Adapter为DataAdapter对象的一个实例,调用方法Fill把从数据库中获得的数据填充到DataSet对象的实例dsPubs中的一个名为Authors的表中。*/
Adapter.Fill(dsPubs,"Authors");using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;
namespace cs001
{
public class program
{
private static DataSet dsPubs = new DataSet();
public static SqlConnection CreateConnection()
{
string ConnectionString = "Data Source=arkiwang;initial Catalog=scott;User ID=sa;PassWord=123";
SqlConnection sqlConnection = new SqlConnection(ConnectionString);
return sqlConnection;
}
public static void Main(string[] args)
{
string name = Console.ReadLine();
string selectSQL = "select * from students where StuName='" + name + "'";
SqlConnection sqlConnection = CreateConnection();
SqlCommand cmd = new SqlCommand(selectSQL, sqlConnection);
// SqlDataReader reader;
SqlDataAdapter adapter = new SqlDataAdapter(cmd); try
{
sqlConnection.Open();
// reader = cmd.ExecuteReader();
adapter.Fill(dsPubs, "Students");
//reader.Read();
sqlConnection.Close();
//Console.WriteLine("前数据库连接:{0}", SqlConnection.State.ToString()); Console.WriteLine("学生{0}的基本信息:", name);
Console.WriteLine("学号:{0}",dsPubs.Tables ["Students"].Rows[]["ID"]);
Console.WriteLine("姓名:{0}", dsPubs.Tables[].Rows[]["StuName"]);
Console.WriteLine("电话:{0}", dsPubs.Tables[].Rows[]["Phone"]);
Console.WriteLine("地址:{0}", dsPubs.Tables[].Rows[]["Address"]);
Console.WriteLine("城市:{0}", dsPubs.Tables[].Rows[]["City"]);
Console.WriteLine("国家:{0}", dsPubs.Tables[].Rows[]["State"]); }
catch (Exception err)
{
Console.WriteLine("连接数据库错误:{0}", err.Message.ToString());
}
finally
{
//sqlConnection.Close();
//Console.WriteLine("前数据库连接:{0}", SqlConnection.State.ToString());
}
Console.ReadLine();
}
}
}
c#学习笔记04——ADO.NET的更多相关文章
- 机器学习实战(Machine Learning in Action)学习笔记————04.朴素贝叶斯分类(bayes)
机器学习实战(Machine Learning in Action)学习笔记————04.朴素贝叶斯分类(bayes) 关键字:朴素贝叶斯.python.源码解析作者:米仓山下时间:2018-10-2 ...
- SaToken学习笔记-04
SaToken学习笔记-04 如果有问题,请点击:传送门 角色认证 在sa-token中,角色和权限可以独立验证 // 当前账号是否含有指定角色标识, 返回true或false StpUtil.has ...
- Redis:学习笔记-04
Redis:学习笔记-04 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 10. Redis主从复制 1 ...
- xml基础学习笔记04
今天继续xml学习,主要是:SimpleXML快速解析文档.xml与数组相互转换 .博客中只是简单的做一个学习记录.积累.更加详细的使用方法,可以查看php手册 1.SimpleXML快速解析文档 前 ...
- OpenCV 学习笔记 04 深度估计与分割——GrabCut算法与分水岭算法
1 使用普通摄像头进行深度估计 1.1 深度估计原理 这里会用到几何学中的极几何(Epipolar Geometry),它属于立体视觉(stereo vision)几何学,立体视觉是计算机视觉的一个分 ...
- [Golang学习笔记] 04 程序实体1 变量声明
变量声明: Go语言的程序实体包含:变量.常量.函数.结构体和接口,是一门静态类型的编程语言. (在声明变量或常量的时候,需要指定类型,或者给予足够信息是的Go语言能够推导出类型) Go语言变量的类型 ...
- [原创]java WEB学习笔记04:Servlet 简介及第一个Servlet程序(配置注册servlet,生命周期)
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- Bash脚本编程学习笔记04:测试命令test、状态返回值、位置参数和特殊变量
我自己接触Linux主要是大学学习的Turbolinux --> 根据<鸟哥的Linux私房菜:基础篇>(第三版) --> 马哥的就业班课程.给我的感觉是这些课程对于bash的 ...
- Qt Creator 源码学习笔记04,多插件实现原理分析
阅读本文大概需要 8 分钟 插件听上去很高大上,实际上就是一个个动态库,动态库在不同平台下后缀名不一样,比如在 Windows下以.dll结尾,Linux 下以.so结尾 开发插件其实就是开发一个动态 ...
随机推荐
- IDE一直在indexing, 造成系统卡死解决方法
点击箭头指向,重启idea
- Flink 历史服务与连接器
History Server(历史服务) Flink提供了记录历史任务运行情况的服务,可用于在关闭Flink群集后依然能够查询已完成作业的相关信息. 配置: # 任务执行信息存储在hdfs目录 job ...
- 吴裕雄--天生自然C++语言学习笔记:C++ 类 & 对象
C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计.类是 C++ 的核心特性,通常被称为用户定义的类型. 类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法.类中的 ...
- Python 异常处理(Try...Except)
版权所有,未经许可,禁止转载 章节 Python 介绍 Python 开发环境搭建 Python 语法 Python 变量 Python 数值类型 Python 类型转换 Python 字符串(Str ...
- java基础源码 (5)--reflect包-AccessibleObject类
学习参考博客:https://blog.csdn.net/benjaminzhang666/article/details/9664585AccessibleObject类基本作用 1.将反射的对象标 ...
- 08 SSM整合案例(企业权限管理系统):11.AOP日志
04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.权限控制 09.用户和角色操作 10.权限关联 11.AOP日志 11.AOP日志 1.数据库与 ...
- Day 15:缓冲输入输出常用方法和小练习
以拷贝图片为例子,演示异常处理的代码: 拷贝一张图片 import java.io.File;import java.io.FileInputStream;import java.io.FileOut ...
- Codeforces 392 B Blown Garland
题意:输入是由连续的RYGB和字符!组成的字符串,R代表红灯,Y代表黄灯,G代表绿灯,B代表蓝灯.简而言之,就是给定的字符串保证了下标对4取余相同的灯颜色都相同,但是有的地方为‘!’代表这个灯坏了,然 ...
- 关于ThinkCMF后台验证码不显示
最近小凯在群里看到好多同学们遇到一个头疼的问题,程序在本地调试好了之后上传服务器,后台的验证码就会不显示,今天三群的 [江苏 冰点零度 php] 同学遇到了这个问题. 开始小凯以为是GB库出来问题 ...
- 51Nod-1072-威佐夫游戏
有2堆石子.A B两个人轮流拿,A先拿.每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取.拿到最后1颗石子的人获胜.假设A B都非常聪明,拿石子的过程中不会出现失误.给出2堆石子的数量, ...