数据库应用程序的开发流程一般主要分为以下几个步骤:

  1. 创建数据库
  2. 使用Connection对象连接数据库
  3. 使用Command对象对数据源执行SQL命令并返回数据
  4. 使用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的更多相关文章

  1. 数据读取器对象SqlDataReader与数据适配器对象SqlDataAdapter的使用

        一.数据读取器对象SqlDataReader的使用      如何执行有查询结果集的select语句. 1.SqlDataReader对象的作用:当包含select语句的SqlCommad对象 ...

  2. 如何在ADO中使用数据读取器(DataReader)读取数据

    DbDataReader类型(实现IDataReader接口)是从数据源获取信息最简单也最快速的方法. 数据读取器是只读向前的效据流.井且一次返回一条记录.因此.只有当你向数据源提交 Select 查 ...

  3. c#中使用数据读取器读取查询结果

    今天有时间了. 在看<c#数据库入门经典> ,总结数据读取器查询结果. 针对单个结果集使用读取器,有3中方法: String connString =..; String sql =@&q ...

  4. Extjs的数据读取器store和后台返回类型简单解析

    工作中用到了Extjs,从后台获取数据的时候,用到了extjs自己的Ext.data.store方法,然后封装了ExtGridReturn方法, 目的:前台用到Ext.data.store读取从后台传 ...

  5. [原创]SSIS-WMI 数据读取器任务:监控物理磁盘空间

    背景:       随着时间的推移,我们的DW会越来越大,也就意味着磁盘空间会越来越小,那如果哪一天留意不当,就会造成磁盘空间的不足而导致ETL失败,最终影响我们的系统的数据正确性和使用,更严重的有可 ...

  6. 【原创】SSIS-WMI 数据读取器任务:监控物理磁盘空间

    1.背景 随着时间的推移,我们的DW会越来越大,也就意味着磁盘空间会越来越小,那如果哪一天留意不当,就会造成磁盘空间的不足而导致ETL失败,最终影响我们的系统的数据正确性和使用,更严重的有可能导致物理 ...

  7. 调用EF的存储过程报“存储区数据提供程序返回的数据读取器所具有的列数对于所请求的查询不够”问题

    在运用Entity Framework调用存储过程的时候,遇到"调用EF的存储过程报"调用EF的存储过程报“存储区数据提供程序返回的数据读取器所具有的列数对于所请求的查询不够”问题 ...

  8. datasets数据读取器

    #切分数据集 img_dir = train_parameters['img_dir'] file_name = train_parameters['file_name'] df = pd.read_ ...

  9. 怎样在C#中从数据库中读取数据(数据读取器)

    实现在C#中通过语句,查询数据库中的数据 SqlConnection con = null; //创建SqlConnection 的对象 try    //try里面放可能出现错误的代码        ...

随机推荐

  1. 用SSH解决大局域网反向端口转发问题

    本文作者Tony Lee,转载自FreeBuf.COM ​​自从家里换了联通光纤后,联通就在我家宽带出口前搭了一个路由器,我家也彻底沦为192.168.1.0/24段的局域网了,带来的问题就是在外网无 ...

  2. Classy(排序)

    Description In his memoir So, Anyway. . ., comedian John Cleese writes of the class di erence betwee ...

  3. python 文件打开小知识

    一个文件被打开后,你有一个file对象,你可以得到有关该文件的各种信息. file.name : 返回文件的名称 file.closed: 文件关闭返回值为True,否则为False file.mod ...

  4. 写一个Vue loading 插件

    什么是vue插件? 从功能上说,插件是为Vue添加全局功能的一种机制,比如给Vue添加一个全局组件,全局指令等: 从代码结构上说,插件就是一个必须拥有install方法的对象,这个方法的接收的第一个参 ...

  5. Vue.js安装

    环境 操作系统:window7 虚拟机:centos7 vue.js: 2.8 安装nodejs 参考我得文章: http://blog.csdn.net/u013066244/article/det ...

  6. 使用pg_upgrade工具为PostgreSQL进行版本升级

    公司的测试环境和生产环境都是9.2.4版本,而开发环境是9.0.18版本. PS: 不知道公司里的其它同事,是如何做数据库迁移的,利用第三方可视化工具备份数据库,然后恢复到其它高版本的环境?反正我没成 ...

  7. 设计模式(3)--SimpleFactory( [1] 简单工厂模式)--创建型

    1.模式定义: 简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 2.模式特点: 实现方式的 ...

  8. markdownpad生成目录

    生成目录 document.addEventListener("DOMContentLoaded", function() { // 生成目录列表 var outline = do ...

  9. 如何修改ionic Popup的样式

    第一次用ionic的Popup时感觉很好用,但是太丑了.但是又不会修改自定义的样式,只能自己写了个模态框.后来仔细搜索了一下.发现还是可以修改的. var confirmPopup = $ionicP ...

  10. 谨慎使用递增/递减运算符(C++)

    递增++和递减运算符--不论看起来还是用起来,都感觉是十分简单而又优雅的,然而其中却藏有无法受控制的陷阱,我们必须小心的避免错误的用法而出现的不可控的情况发生. 比方说:x = 2* x++ *(3 ...