• ADO.NET笔记——将DataReader作为函数返回值


    相关知识:

    1. 在很多情况下,可能把数据库的访问封装到一个函数中,通过该函数返回一个DataReader对象给调用者。例如定义函数:SqlDataReader returnDR(),然后再Main函数中调用它。
    2. 但这里导致了一个问题:在哪里关闭数据库连接?
      • 在returnDR()函数中关闭Connection,那么在Main函数中将无法获取每行数据;
      • 在Main函数中关闭Connection,但是Main函数无法访问returnDR()函数内部定义的SqlConnection对象;(除非把SqlConnection对象声明为类的成员变量,但这样做又会使类变得复杂)
    3. 其实,ExecuteReader函数提供了一种重载方式,允许通过参数指定DataReader与Connection对象的关联行为CommandBehavior.CloseConnection:一旦关闭DataReader对象,则与该对象关联的Connection对象也会自动关闭。

    示例代码:

     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 ConsoleApplication2
    10 {
    11     class Program
    12     {
    13         //返回DataReader的函数
    14         static SqlDataReader returnDR()
    15         {
    16             string strConn = @"server=Joe-PC;database=AdventureWorks_WroxSSRS2012;uid=sa;pwd=root";
    17             SqlConnection conn = new SqlConnection(strConn);
    18 
    19             string strCmd = "SELECT ProductCategoryID,Name FROM Production.ProductCategory";
    20             SqlCommand cmd = new SqlCommand(strCmd, conn);
    21 
    22             conn.Open();
    23 
    24             SqlDataReader dr = cmd.ExecuteReader();
    25 
    26             return dr;
    27         }
    28 
    29         //Main中进行调用
    30         static void Main(string[] args)
    31         {
    32             SqlDataReader dr = returnDR();
    33             while (dr.Read())
    34             {
    35                 Console.WriteLine("{0}:{1}", dr["ProductCategoryID"], dr["Name"]);
    36             }
    37             dr.Close();
    38             //ExecuteReader函数提供了一种重载形式
    39             //允许通过参数指定DataReader与Connection对象的关联行为CommandBehavior.CloseConnection:
    40             //一旦关闭DataReader对象,则与该对象关联的Connection对象也自动关闭
    41         }
    42     }
    43 }

  • 相关阅读:
    linux mint使用起來比較穩定
    ubntu下的记录软件brasero ,mint内置
    [Enterprise Library]Data (二)DataCollection
    jquery 获取标签名
    谁会做logo呢
    供用淘宝卖家常用的称谓:各位亲,跨年,诸事顺利~
    rails缓存 学习
    test
    jquery 复习基础知识
    开机改用nginx启动,停止apache2的开机启动
  • 原文地址:https://www.cnblogs.com/chenguangqiao/p/4340021.html
Copyright © 2020-2023  润新知