使用Connection连接数据库,使用DataReader访问数据库,并返回多行数据。
相关步骤:
- 需要引入两个命名空间
using System.Data; using System.Data.SqlClient;
- 使用DataReader访问数据库的步骤
- 创建SqlConnection对象,指定连接字符串
- 创建SqlCommand对象,指定与之相关的连接对象,以及数据库操作命令文本(CommandText)
- 打开连接
- 调用SqlCommand对象的ExecuteReader()方法,返回SqlDataReader对象
- 调用SqlDataReader对象的Read()函数,从数据库读取一行数据到程序中
- 通过SqlDataReader对象的“[]”操作,访问该行数据中的每一个字段
- 循环调用Read(),一次访问每一行数据
- 当Read()返回false的时候,表明所有行均已读完
- 调用SqlDataReader对象的Close()函数关闭之
- 调用SqlConnection对象的Close()函数关闭数据库连接
- DataReader的工作模式
- DataReader对象是以“向前只读(ForwardOnly)”游标进行工作
- 在调用Read()函数之前,所有的数据均位于数据库服务器上;每调用一次Read(),就从服务器上下载一条数据下来
- 在DataReader处理完数据之前,不能断开与数据库的连接。一旦断开,DataReader就无法再从数据库上下载数据
- 这种模式的优点是:程序中所需要的内存较少(因为每次只保存一条数据),只读游标访问速度很快
- 这种模式的缺点是:需要一直与数据库保持连接,会消耗较多数据库的资源
代码示例:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.Data; 7 using System.Data.SqlClient; 8 9 namespace ConsoleApplication1 10 { 11 class Program 12 { 13 static void Main(string[] args) 14 { 15 //1、创建连接对象 16 string strConn = @"server=Joe-PC;database=AdventureWorks_WroxSSRS2012;uid=sa;pwd=root"; 17 SqlConnection conn = new SqlConnection(strConn); 18 19 //2、创建命令对象 20 string strCmd = "SELECT ProductCategoryID,Name FROM Production.ProductCategory"; 21 SqlCommand cmd = new SqlCommand(strCmd,conn); 22 23 //3、打开数据库连接 24 conn.Open(); 25 26 //4、执行命令 27 SqlDataReader dr = cmd.ExecuteReader(); 28 29 //5、读取每行数据 30 while(dr.Read()) 31 { 32 // 通过 [] 运算符取得指定字段的值( object 类型,可转换为其它所需类型) 33 Console.WriteLine("{0}:{1}", dr["ProductCategoryID"], dr["Name"]); 34 } 35 36 //6、关闭 DataReader 对象 37 //dr.Cloase(); 38 39 //7、关闭数据库连接 40 //即使没有调用dr.Close(),conn.Close()也会强制dr关闭 41 conn.Close(); 42 } 43 } 44 }
PS:数据库连接管理
大多数的数据库只支持有限的连接,为避免占用资源,在完成数据库的操作之后,应当及时关闭连接。因此,必须确定成对调用连接对象的 Open 和 Close 方法。为了有效管理数据库连接的打开和关闭,还可以使用以下两种方法。
- 使用 try...catch...finally 语句块
在 try...catch...finally 语句块中,使用 try 语句打开数据库连接,使用 catch 语句捕获异常,使用 finally 语句确保关闭数据库的连接。
1 string strConn = @"server=Joe-PC;database=AdventureWorks_WroxSSRS2012;uid=sa;pwd=root"; 2 SqlConnection conn = new SqlConnection(strConn); 3 4 try 5 { 6 conn.Open(); 7 //执行数据库操作命令 8 } 9 catch(Exception ex) 10 { 11 //如果打开连接出现异常,在此进行异常处理 12 } 13 finally 14 { 15 conn.Close(); 16 }
- 使用 using 语句块
为更有效管理数据库的连接,C#提供了 using 语句块,用来自动管理数据库连接。当数据访问结束之后,using 语句首先自动关闭数据源连接,然后释放连接对象,因此大大简化编程。
1 string strConn = @"server=Joe-PC;database=AdventureWorks_WroxSSRS2012;uid=sa;pwd=root"; 2 3 using(SqlConnection conn = new SqlConnection(strConn)) 4 { 5 conn.Open(); 6 //执行数据库操作命令 7 }