数据库学习任务四:数据读取器对象SqlDataReader、数据适配器对象SqlDataAdapter、数据集对象DataSet
数据库应用程序的开发流程一般主要分为以下几个步骤:
- 创建数据库
 - 使用Connection对象连接数据库
 - 使用Command对象对数据源执行SQL命令并返回数据
 - 使用DataReader和DataSet对象读取和处理数据源的数据
 
在与数据库的交互中,要获得数据库访问的结果可以两种方法实现,一是通过DataReader对象从数据源中获取数据并进行处理;二是通过DataSet对象将数据存储在内存中进行处理。
1.SqlDataReader对象
SqlDataReader对象可以顺序地从查询结果中读取记录,其特点是单向向前,速度快,占内存少。这里要注意SqlCommand对象不能用new初始化,必须调用SqlCommand对象的ExecuteReader()方法初始化。

其中 Item 属性有两种使用方法:


【例】使用SqlDataReader对象读取数据,判断登录是否成功
protected void btnLogin_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection();
con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\ASUS\Desktop\案例\EBookShop\App_Data\ShopBookDB.mdf;
Integrated Security=True;User Instance=True";
SqlCommand com = new SqlCommand();
com.Connection = con;
com.CommandText = "select * from users where user_name ='" + txtName.Text.Trim() + "' and password='" + txtPwd.Text.Trim() + "'";
con.Open();
SqlDataReader sdr = com.ExecuteReader();
try
{
if (sdr.HasRows)
{
Response.Write("<script>alert('登录成功!')</script>");
}
else {
Response.Write("<script>alert('登录失败')</script>");
}
sdr.Close();
con.Close();
}
catch (Exception)
{
Response.Write("<script>alert('数据库无法连接')</script>");
con.Close();
} }
2.SqlDataAdapter对象
SqlDataAdapter对象是一种用来充当数据集与实际数据源之间的桥梁的对象,使用SqlDataAdapter对象在应用程序和数据库之间通讯,数据适配器可以将数据从数据库读入数据集,也可以见数据集中已更改的数据写回数据库。


3.DataSet对象
DataSet对象是数据库数据的内存驻留表示形式,无论数据源是什么,都会提供一致的关系编程模型。它可以用户多种不同的数据源:用于XML数据,或用于管理应用程序本地的数据。一个DataSet对象表示包括相关表、约束和表间关系在内的整个数据集。



【例】使用SqlDataAdapter对象读取数据,利用DataSet对象显示数据
protected void btnDS_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection();
con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\ASUS\Desktop\案例\EBookShop\App_Data\ShopBookDB.mdf;Integrated Security=True;User Instance=True";
SqlCommand com = new SqlCommand();
com.Connection = con;
com.CommandText = "select * from users";
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = com;
DataSet ds = new DataSet();
con.Open();
try
{
ds.Clear();
da.Fill(ds,"users");
if (ds.Tables["users"].Rows.Count == )
{
Response.Write("没有查询到数据,请重试!"); }
else {
Response.Write("用户名" + "密码"+"<br/>");
for (int i = ; i < ds.Tables["users"].Rows.Count;i++ ) {
Response.Write(ds.Tables["users"].Rows[i]["user_name"]);
Response.Write(ds.Tables["users"].Rows[i]["password"]);
Response.Write("<br/>");
} }
con.Close();
}
catch (Exception)
{
Response.Write("<script>alert('数据库无法连接')</script>");
con.Close();
}
}
数据库学习任务四:数据读取器对象SqlDataReader、数据适配器对象SqlDataAdapter、数据集对象DataSet的更多相关文章
- 数据读取器对象SqlDataReader与数据适配器对象SqlDataAdapter的使用
		
一.数据读取器对象SqlDataReader的使用 如何执行有查询结果集的select语句. 1.SqlDataReader对象的作用:当包含select语句的SqlCommad对象 ...
 - 如何在ADO中使用数据读取器(DataReader)读取数据
		
DbDataReader类型(实现IDataReader接口)是从数据源获取信息最简单也最快速的方法. 数据读取器是只读向前的效据流.井且一次返回一条记录.因此.只有当你向数据源提交 Select 查 ...
 - c#中使用数据读取器读取查询结果
		
今天有时间了. 在看<c#数据库入门经典> ,总结数据读取器查询结果. 针对单个结果集使用读取器,有3中方法: String connString =..; String sql =@&q ...
 - Extjs的数据读取器store和后台返回类型简单解析
		
工作中用到了Extjs,从后台获取数据的时候,用到了extjs自己的Ext.data.store方法,然后封装了ExtGridReturn方法, 目的:前台用到Ext.data.store读取从后台传 ...
 - [原创]SSIS-WMI 数据读取器任务:监控物理磁盘空间
		
背景: 随着时间的推移,我们的DW会越来越大,也就意味着磁盘空间会越来越小,那如果哪一天留意不当,就会造成磁盘空间的不足而导致ETL失败,最终影响我们的系统的数据正确性和使用,更严重的有可 ...
 - 【原创】SSIS-WMI 数据读取器任务:监控物理磁盘空间
		
1.背景 随着时间的推移,我们的DW会越来越大,也就意味着磁盘空间会越来越小,那如果哪一天留意不当,就会造成磁盘空间的不足而导致ETL失败,最终影响我们的系统的数据正确性和使用,更严重的有可能导致物理 ...
 - 调用EF的存储过程报“存储区数据提供程序返回的数据读取器所具有的列数对于所请求的查询不够”问题
		
在运用Entity Framework调用存储过程的时候,遇到"调用EF的存储过程报"调用EF的存储过程报“存储区数据提供程序返回的数据读取器所具有的列数对于所请求的查询不够”问题 ...
 - datasets数据读取器
		
#切分数据集 img_dir = train_parameters['img_dir'] file_name = train_parameters['file_name'] df = pd.read_ ...
 - 怎样在C#中从数据库中读取数据(数据读取器)
		
实现在C#中通过语句,查询数据库中的数据 SqlConnection con = null; //创建SqlConnection 的对象 try //try里面放可能出现错误的代码 ...
 
随机推荐
- trie从入门到入殓
			
trie是什么?1. 字典树 2.集合 (其实两个都对啊喂) 一颗普通的trie树一般类似于这样(图片来源于http://dongxicheng.org/structure/trietree/): 绿 ...
 - UITableView移除某行的分割线和让分割线宽度为cell的宽度
			
1.移除 UITableView 某一行的分割线 所谓移除,其实就是使其偏移出 cell 的显示范围,看不到即移除. 方法1: 移除系统的分割线,自己定义每行的分割线 self.tableView.s ...
 - 百度之星2017初赛A轮 1001  小C的倍数问题
			
小C的倍数问题 Accepts: 1990 Submissions: 4931 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3 ...
 - html5 mdn一些精彩的案例
			
https://developer.mozilla.org/zh_CN/docs/Games/Examples
 - 实验演示Oracle“多版本一致读”和“Cross DDL”
			
http://space.itpub.net/17203031/viewspace-756336 在各种事务级别中,Oracle实现的是“Read Committed”,也就是读取的数据都是已经提 ...
 - 切换Ubuntu系统python默认版本的方法
			
另附切换系统python默认版本的方法: 先使用命令: update-alternatives --list python 查看python命令的各种可能结果, 例如我的结果: /usr/bin/py ...
 - Qt实现九宫图类控件
			
<1>. 头文件(类声明) class CPreviewWidge : public QWidget { Q_OBJECT public: CPreviewWidge( ); ~CPrev ...
 - jenkins 邮件添加附件
			
背景 当CI执行失败的时候,想获取到失败的用例,然后在本地调试,testNG是自带一个testng-failed.xml来记录的: 想法:尝试使用git 来push这个文件到远程仓库,然后本地pull ...
 - C# 隐藏文件
			
void SerializeXmlNodes(XmlSerializer serialize, string filePath, List<XmlNode> nodes) { using ...
 - 语音激活检测(VAD)--前向神经网络方法(Alex)
			
这是学习时的笔记,包含相关资料链接,有的当时没有细看,记录下来在需要的时候回顾. 有些较混乱的部分,后续会再更新. 欢迎感兴趣的小伙伴一起讨论,跪求大神指点~ VAD(ffnn神经网络)-Alex t ...