ADO.NET快速上手(二)

回顾:ADO.NET快速上手(一) 

前面简单提到了 Connection 、DataReader、Comand以及参数和存储过程的用法,现在更加深入的学习。

 

1.DataReader的用法:

 DataReader 从数据库中检索只读、只进的数据流。查询结果在查询执行时返回,在并存储在客户端的网络缓冲区中,直到您使用 DataReaderRead 方法对它们发出请求。 使用 DataReader 可以提高应用程序的性能,原因是它只要数据可用就立即检索数据,并且(默认情况下)一次只在内存中存储一行,减少了系统开销

例子见上一篇即可,说说使用DataReader的心得,在做项目中,有时候一个实体类中的字段又是另外一个实体雷,存在外键的关系。如下实体类源码 中就有2个这样的关系(高亮代码):

代码
using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  BookShop.Model
{
    [Serializable]
    
public   class  Book
    {
        
///   <summary>
        
///  图书编号
        
///   </summary>
         private   int  id;

        
public   int  Id
        {
            
get  {  return  id; }
            
set  { id  =  value; }
        }

        
///   <summary>
        
///  图书标题
        
///   </summary>
         private   string  title;

        
public   string  Title
        {
            
get  {  return  title; }
            
set  { title  =  value; }
        }

        
///   <summary>
        
///  图书作者
        
///   </summary>
         private   string  author;

        
public   string  Author
        {
            
get  {  return  author; }
            
set  { author  =  value; }
        }

        
///   <summary>
        
///  图书出版社
        
///   </summary>
         private   Publisher  publisher;

        
public   Publisher  Publisher
        {
            
get  {  return  publisher; }
            
set  { publisher  =  value; }
        }

        
///   <summary>
        
///  图书出版日期
        
///   </summary>
         private  DateTime publishDate;

        
public  DateTime PublishDate
        {
            
get  {  return  publishDate; }
            
set  { publishDate  =  value; }
        }

        
///   <summary>
        
///  图书ISBN编号
        
///   </summary>
         private   string  isbn;

        
public   string  Isbn
        {
            
get  {  return  isbn; }
            
set  { isbn  =  value; }
        }

        
///   <summary>
        
///  图书总字数
        
///   </summary>
         private   int  wordsCount;

        
public   int  WordsCount
        {
            
get  {  return  wordsCount; }
            
set  { wordsCount  =  value; }
        }

        
///   <summary>
        
///  图书价格
        
///   </summary>
         private   decimal  unitPrice;

        
public   decimal  UnitPrice
        {
            
get  {  return  unitPrice; }
            
set  { unitPrice  =  value; }
        }

        
///   <summary>
        
///  图书描述
        
///   </summary>
         private   string  contentDescription;

        
public   string  ContentDescription
        {
            
get  {  return  contentDescription; }
            
set  { contentDescription  =  value; }
        }

        
///   <summary>
        
///  图书作者描述
        
///   </summary>
         private   string  authorDescription;

        
public   string  AuthorDescription
        {
            
get  {  return  authorDescription; }
            
set  { authorDescription  =  value; }
        }

        
///   <summary>
        
///  图书作者评语
        
///   </summary>
         private   string  editorComment;

        
public   string  EditorComment
        {
            
get  {  return  editorComment; }
            
set  { editorComment  =  value; }
        }

        
///   <summary>
        
///  图书目录
        
///   </summary>
         private   string  toc;

        
public   string  Toc
        {
            
get  {  return  toc; }
            
set  { toc  =  value; }
        }

        
///   <summary>
        
///  图书的分类
        
///   </summary>
         private   Category  category;

        
public   Category  Category
        {
            
get  {  return  category; }
            
set  { category  =  value; }
        }

        
///   <summary>
        
///  图书点击
        
///   </summary>
         private   int  clicks;

        
public   int  Clicks
        {
            
get  {  return  clicks; }
            
set  { clicks  =  value; }
        }

    }
}

 

如果是这种关系,使用Datareader 就可能会出现异常,因为当代码读到 外键的时候,外键也要使用connection连接 这时就会抛出异常,所以

  • 与数据进行动态交互,例如绑定到 Windows 窗体控件或组合并关联来自多个源的数据。

  • 对数据执行大量的处理,而不需要与数据源保持打开的连接,从而将该连接释放给其他客户端使用。就使用DataSet或DataTable比较合适。‘

  •  

    也许你不太明白,但是你可以这样简单的记住,当实体类或数据库设计存在主外键关系的时候,使用Datareader就要谨慎了! 不过也没关系,很多经验都是从Debug学到的。

    就好像微软的视频一样,为爱Debug。

     

     

    你可能感兴趣的:(.net)