使用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. Android点击Button实现功能的几种方法

          Android中Button控件应该算作是比较简单的控件,然而,它的使用频率却是非常的高,今天,我在这里总结了三种常用的点击Button实现其功能的方法.       1.很多时候,我们在 ...

  2. Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决--转载

    原文地址:http://www.programgo.com/article/96083031845/ 最近项目中使用到Spring3,在感叹Spring3注解配置清爽的同时竟然出现了这个不和谐的事情, ...

  3. linux modprobe命令参数及用法详解--linux加载模块命令

    转:http://www.linuxso.com/command/modprobe.html modprobe(module probe) 功能说明:自动处理可载入模块. 语 法:modprobe [ ...

  4. 浏览器自动化工具-Selenium

    Table of Contents 1. 什么是Selenium 2. 简单的例子 3. PS 什么是Selenium Selenium可以自动化操作浏览器,利用Selenium可以模拟用户操作,因此 ...

  5. iOS runtime 运行时( - )

    谈到运行时,相对应的就有编译时: 1).运行时-- 直到程序运行时才去确定一个对象的具体信息,并且可以改变这个类的具体信息,包括它的方法,变量等等: 2).编译时-- 是在程序运行之前,编译的时候,就 ...

  6. iOS UITableView的一些方法

    项目中用到的一些tabview 问题及对应方法: 一.tableview 1.下划线左对齐 //步骤一:(加在 viewdidload方法中) if([tabView respondsToSelect ...

  7. X86汇编语言中的registers相关

    0.写在前面 本文中总结于王爽老师的汇编语言,建议有兴趣的都买一本,以支持王爽老师的辛勤付出.再者,这本书写的确实很nice. 8086CPU共有14个registers:AX, BX, CX, DX ...

  8. 我关于SecureCRT远程连接失败的问题解决办法

    使用VirtualBox搭建一个ubuntu14.04的系统环境,为了省去主机与虚拟机直接互相直接一直切换的频繁操作,所以想到了使用SecureCRT连接,但是出现了连接问题,问题如下图:

  9. poj 1698 Alice's Chance 最大流

    题目:给出n部电影的可以在周几拍摄.总天数.期限,问能不能把n部电影接下来. 分析: 对于每部电影连上源点,流量为总天数. 对于每一天建立一个点,连上汇点,流量为为1. 对于每部电影,如果可以在该天拍 ...

  10. linux中crontab和at

    1. Red Hat的发行版本中,通常还可以使用工具ntsysv设置服务的自启动状态. #类似chkonfig 服务名 on|off 2.系统服务脚本目录:/etc/init.d 3.ps: -a:显 ...