使用Connection连接数据库,使用DataReader访问数据库,并返回多行数据。

相关步骤:

  1. 需要引入两个命名空间

    using System.Data;
    using System.Data.SqlClient;
  2. 使用DataReader访问数据库的步骤
    • 创建SqlConnection对象,指定连接字符串
    • 创建SqlCommand对象,指定与之相关的连接对象,以及数据库操作命令文本(CommandText)
    • 打开连接
    • 调用SqlCommand对象的ExecuteReader()方法,返回SqlDataReader对象
    • 调用SqlDataReader对象的Read()函数,从数据库读取一行数据到程序中
    • 通过SqlDataReader对象的“[]”操作,访问该行数据中的每一个字段
    • 循环调用Read(),一次访问每一行数据
    • 当Read()返回false的时候,表明所有行均已读完
    • 调用SqlDataReader对象的Close()函数关闭之
    • 调用SqlConnection对象的Close()函数关闭数据库连接
  3. DataReader的工作模式
    • DataReader对象是以“向前只读(ForwardOnly)”游标进行工作
    • 在调用Read()函数之前,所有的数据均位于数据库服务器上;每调用一次Read(),就从服务器上下载一条数据下来
    • 在DataReader处理完数据之前,不能断开与数据库的连接。一旦断开,DataReader就无法再从数据库上下载数据
    • 这种模式的优点是:程序中所需要的内存较少(因为每次只保存一条数据),只读游标访问速度很快
    • 这种模式的缺点是:需要一直与数据库保持连接,会消耗较多数据库的资源

代码示例:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient; namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//1、创建连接对象
string strConn = @"server=Joe-PC;database=AdventureWorks_WroxSSRS2012;uid=sa;pwd=root";
SqlConnection conn = new SqlConnection(strConn); //2、创建命令对象
string strCmd = "SELECT ProductCategoryID,Name FROM Production.ProductCategory";
SqlCommand cmd = new SqlCommand(strCmd,conn); //3、打开数据库连接
conn.Open(); //4、执行命令
SqlDataReader dr = cmd.ExecuteReader(); //5、读取每行数据
while(dr.Read())
{
// 通过 [] 运算符取得指定字段的值( object 类型,可转换为其它所需类型)
Console.WriteLine("{0}:{1}", dr["ProductCategoryID"], dr["Name"]);
} //6、关闭 DataReader 对象
//dr.Cloase(); //7、关闭数据库连接
//即使没有调用dr.Close(),conn.Close()也会强制dr关闭
conn.Close();
}
}
}

PS:数据库连接管理

  大多数的数据库只支持有限的连接,为避免占用资源,在完成数据库的操作之后,应当及时关闭连接。因此,必须确定成对调用连接对象的 Open 和 Close 方法。为了有效管理数据库连接的打开和关闭,还可以使用以下两种方法。

  • 使用 try...catch...finally 语句块

    在 try...catch...finally 语句块中,使用 try 语句打开数据库连接,使用 catch 语句捕获异常,使用 finally 语句确保关闭数据库的连接。

             string strConn = @"server=Joe-PC;database=AdventureWorks_WroxSSRS2012;uid=sa;pwd=root";
SqlConnection conn = new SqlConnection(strConn); try
{
conn.Open();
//执行数据库操作命令
}
catch(Exception ex)
{
//如果打开连接出现异常,在此进行异常处理
}
finally
{
conn.Close();
}
  • 使用 using 语句块

    为更有效管理数据库的连接,C#提供了 using 语句块,用来自动管理数据库连接。当数据访问结束之后,using 语句首先自动关闭数据源连接,然后释放连接对象,因此大大简化编程。

             string strConn = @"server=Joe-PC;database=AdventureWorks_WroxSSRS2012;uid=sa;pwd=root";

             using(SqlConnection conn = new SqlConnection(strConn))
{
conn.Open();
//执行数据库操作命令
}

ADO.NET笔记——使用Connection连接数据库,使用Command对象的ExecuteReader()方法创建DataReader对象返回多行数据的更多相关文章

  1. 【ADO.NET基础知识】SqlConnection、command、DataSet 、DataTable、dataAdapter

    1.使用Connection连接数据库的步骤: (1).添加命名空间 System.Data.SqlClient(注意:初学者经常会忘记) (2)定义连接字符串.连接SQL Server 数据库时: ...

  2. Spring学习笔记之 Spring IOC容器(一)之 实例化容器,创建JavaBean对象,控制Bean实例化,setter方式注入,依赖属性的注入,自动装配功能实现自动属性注入

    本节主要内容:       1.实例化Spring容器示例    2.利用Spring容器创建JavaBean对象    3.如何控制Bean实例化    4.利用Spring实现bean属性sett ...

  3. ADO.NET的Connection Timeout和Command Timeout (转载)

    每次对数据库连接时,我们有时候会碰到连接超时或者命令超时,这两个超时是不一样的.以ADO.NET为例,当客户端和服务器端连接时,碰到的超时情况主要有下面几种:当从连接池获取一个连接时,碰到超时.当建立 ...

  4. ADO.NET笔记——利用Command对象的ExecuteScalar()方法返回一个数据值

    相关知识: 有些SQL操作,例如SUM,只会从数据库返回一个数据值,而不是多行数据 尽管也可以使用ExecuteReader()返回一个DataReader对象,代表该数据值,但是使用Command对 ...

  5. ADO.NET系列之Connection对象

    ADO.NET系列之Connection对象 ADO.NET系列之Command对象 ADO.NET系列之DataAdapter对象 ADO.NET系列之事务和调用存储过程 ADO.NET概念 ADO ...

  6. ADO.NET笔记——基本概念

    ADO.NET中的主要对象: Connection:连接对象.用于建立从应用程序到数据库服务器指定数据库的连接通道 Command:命令对象.用于执行增删查改等数据库语句命令 DataReader:数 ...

  7. ADO.Net笔记整理(一)

    几次装机,Notes已烟消云散,近日因为Node.js死活搞不定,无奈装机,备份好的东东,没想到磁盘扇区出现异常,可能是PE启动盘的病毒,只好将磁盘全部重新分区,恢复数据也懒得恢复了,日积月累关乎将来 ...

  8. ADO.net笔记

    1.DbConnectionConnection对象也称为数据库连接对象,Connection对象的功能是负责对数据源的连接.所有Connection对象的基类都是DbConnection类.Conn ...

  9. ADO.NET 二(Connection)

    C# 语言中 Connection 类是 ADO.NET 组件连接数据库时第一个要使用的类,也是通过编程访问数据库的第一步. 接下来了解一下 Connection 类中的常用属性和方法,以及如何连接 ...

随机推荐

  1. HTML与Servlet

    1.什么是servlet Servlet 是在服务器上运行的小程序.一个 Servlet 就是 Java 编程语言中的一个类,它被用来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访 ...

  2. GET和POST的主要区别

    1.get是从服务器上获取数据,post是向服务器传送数据 2.在客户端上,get通过url提交数据,数据在url上可以看到,post方式,数据放置在HTMLHEADER内提交 3.对于get方式,服 ...

  3. TCP/IP协议原理与应用笔记21:路由选择的方法

    1. 路由选择的方法 (1)基本思想 不是收到IP分组后才能为其选路,而是预先获得所有的目的的路由(Routing Protocol) IP报文按预定的路由转发(route table) (2)预定路 ...

  4. UIBootatrap:是由AngularJS UI团队编写的纯AngularJS实现的Bootstrap组件

    本文为翻译文档.原文是https://angular-ui.github.io/bootstrap/(需要FQ). 准备工作: 依赖关系:这个库中包含一组基于Bootstrap组件和CSS的原生Ang ...

  5. codechef January Challenge 2014 Sereja and Graph

    题目链接:http://www.codechef.com/JAN14/problems/SEAGRP [题意] 给n个点,m条边的无向图,判断是否有一种删边方案使得每个点的度恰好为1. [分析] 从结 ...

  6. [转]如何编译tizen源码(图文教程)?

    http://blog.csdn.net/flydream0/article/details/9004746 前一篇文章已经介绍了如何下载tizen源码(http://blog.csdn.net/fl ...

  7. 获取IOS bundle中的文件

    在xcode中选择bundle中的文件,右键Show in Finder即可拷贝或删除文件.

  8. AspNetPager学习使用2

    接上回: <webdiyer:aspnetpager id=" FirstPageText="首页"LastPageText="尾页" Next ...

  9. css3 transfrom使用以及其martix(矩阵)属性与其它属性的关系

    写法 其属性martix与skew .scale .translate之间的关系   兼容性 :       IE9+ : -ms-transform :  IE9只支持2D转换       fire ...

  10. SQL 把查出来的信息整合为一张表

    select name ,population from bbc where name='France' union all select name ,population from bbc wher ...