现在的位置: 首页 > 综合 > 正文

ADO.NET快速上手(二)

2012年02月27日 ⁄ 综合 ⁄ 共 3782字 ⁄ 字号 评论关闭

回顾: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。

     

     

    抱歉!评论已关闭.