PetShop学习--SQLServerDAL

转载 2007年10月10日 14:46:00
中午看了一下SqlServerDAL,画了一个图先贴上来。
SQL数据访问层设计专为SQLServer数据库而设计的。该层是整个项目的最底层!
SQLHelper通过一组静态方法来封装数据的访问功能。
(DAAB.NET SQLHelper完整代码偶全打印出来了,删了一些注释后共21页。留着上课不想听课时候看。)
SQLHelper.cs类为 Account.cs 、Inventory.cs、Item.cs、Order.cs、Product.cs、Profile.cs 六个类的基类。他们都调用SQLHelper.cs类的方法进行功能操作。

如图:

(图好丑哦..)

继续看PetShop的SQLHelper.cs..闪人..


[1]SQLServerDAL的核心-->SQLHelper.cs
今天软考祝露哥 网工考试顺利!~~
Date: 2005-11-5

继续看...
SQLHelper由以下静态方法组成。分别为:
public static int ExecuteNonQuery() 
public static SqlDataReader ExecuteReader()
public static object ExecuteScalar()
public static void CacheParameters()
public static SqlParameter[] GetCachedParameters()
private static void PrepareCommand()

首先看一下PrepareCommand()。因为ExecuteNonQuery() 、ExecuteReader()、ExecuteScalar()都调用了PrepareCommand()!
private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) 
        
{

            
//连接状态是否打开
            if (conn.State != ConnectionState.Open)
                conn.Open();

            cmd.Connection 
= conn;
            cmd.CommandText 
= cmdText;

            
//Transact-SQL 事务
            if (trans != null)
                cmd.Transaction 
= trans;

            cmd.CommandType 
= cmdType;

            
if (cmdParms != null{
                
foreach (SqlParameter parm in cmdParms)
                    cmd.Parameters.Add(parm);
            }

        }
PrepareCommand()有6个参数
SqlCommand cmd,                 //要执行的sql语句或存储过程
SqlConnection conn,               //数据库连接字符串
SqlTransaction trans,               //数据库事务
CommandType cmdType,       //执行数据库的类型 text or StoredProcedure
string cmdText,                       //SQL语句(存储过程和T-SQL命令)
SqlParameter[] cmdParms      //SqlCommand的参数
PrepareCommand主要确定数据库状态是否打开,如果状态为关闭的则打开数据库。数据库事务trans是否不为空,如果不为空则执行事务操作。另外返回一些参数。

再来看看 CacheParameters()在SQLHelper类中首先申明了一个私有静态Hashtable域,该域主要用于存放SQL的参数(cmdParms)。它将在 CacheParameters()用到。
public static void CacheParameters(string cacheKey,//缓冲的标识关键字
                                           
params SqlParameter[] cmdParms) //SQL参数数组
        {
            parmCache[cacheKey] 
= cmdParms;
        }

SQLHelper还定义了一个获取缓存参数方法 GetCacheParameters() 用于从Cache中获取缓冲的SQL参数。
public static SqlParameter[] GetCachedParameters(string cacheKey) {
            SqlParameter[] cachedParms 
= (SqlParameter[])parmCache[cacheKey];
            
//如果缓存中为nll则返回空值
            if (cachedParms == null)
                
return null;
            
            SqlParameter[] clonedParms 
= new SqlParameter[cachedParms.Length];

            
//复制Cache中的参数
            for (int i = 0, j = cachedParms.Length; i < j; i++)
                clonedParms[i] 
= (SqlParameter)((ICloneable)cachedParms[i]).Clone();

            
return clonedParms;
        }
简单的看了一下预先处理的方法再来看三个数据读取的方法咯~
ExecuteNonQuery()方法的主要功能是返回受影响的行。它有两个重载,下面列出所有ExecuteNonQuery的重载方法。
ExecuteNonQuery方法
        public static int ExecuteNonQuery(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms) 
        
{

            SqlCommand cmd 
= new SqlCommand();

            
using (SqlConnection conn = new SqlConnection(connString)) {
                PrepareCommand(cmd, conn, 
null, cmdType, cmdText, cmdParms);
                
int val = cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
                
return val;
            }

        }
参数依次为:数据库连接字符串,执行命令类型,SQL语句和SQL参数数组。
那个using(...)表示数据库操作完成后,自动关闭数据库连接,释放系统资源。
ExecuteNonQuery方法(重载一)
public static int ExecuteNonQuery(SqlConnection conn, CommandType cmdType, string cmdText, params SqlParameter[] cmdparms)
ExecuteNonQuery方法(重载二)
public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)

ExecuteReader方法
public static SqlDataReader ExecuteReader(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms) 
        
{
            SqlCommand cmd 
= new SqlCommand();
            SqlConnection conn 
= new SqlConnection(connString);
// we use a try/catch here because if the method throws an exception we want to 
// close the connection throw code, because no datareader will exist, hence the 
     // commandBehaviour.CloseConnection will not work
            try {
                PrepareCommand(cmd, conn, 
null, cmdType, cmdText, cmdParms);
                SqlDataReader rdr 
= cmd.ExecuteReader(CommandBehavior.CloseConnection);
                cmd.Parameters.Clear();
                
return rdr;
            }
catch {
                conn.Close();
                
throw;
            }

        }
ExecuteReader包含四个参数:数据库连接字符串、数据库执行类型、SQL语句和SQL参数数组。主要作用是提供一种从数据库读取只进的行流的一种方式。

最后还有一个ExecuteScalar方法。该提供了一个重载。它的主要用途是返回影响数据库记录的行数对象。
public static object ExecuteScalar(string connstring, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
ExecuteScalar重载
public static object ExecuteScalar(SqlConnection conn, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)

PetShop的SqlHelper.cs基本上看完了。在后面的调用中还会返回来学习SQLHelper.cs的。先闪...


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=818534

 

值得关注和学习的java开源项目

名称 资料 概况 OFBiz http://ofbizchina.com:8080/ http://www.ofbiz.org/ https://o...
  • shanzhizi
  • shanzhizi
  • 2014年11月06日 15:01
  • 7397

基于Node的PetShop,RESTful API以及认证

由于宠物店的业务发展需要,我们需要一种更加便捷的方式来管理日益增多的宠物和客户。最好的方法就是开发一个APP,我可以用这个APP来添加、更新和删除宠物。同时,业务要给宠物店的会员用户有限查看某些宠物。...
  • future_challenger
  • future_challenger
  • 2016年07月01日 11:15
  • 2281

以PetShop为样本代码,阐述如何通过改造它实现一个更合理实用的三层架构。

原标题:.NET三层架构的改进以及通用数据库访问组件的实现 前言 微软的三层架构示例项目PetShop是很多.NET开发人员学习项目开发的经典样本代码,很多人都是直...
  • lishimin1012
  • lishimin1012
  • 2014年01月16日 16:26
  • 1078

Petshop 4.0学习-MasterPage.master文件

http://xiaoruanjian.iteye.com/blog/881921 虽然母版页和内容页功能强大,但是其创建和应用过程并不复杂。本节和下一节将以创建如图1所示示例为例,向读...
  • L1126900915
  • L1126900915
  • 2011年10月19日 12:08
  • 458

PetShop 4.0学习--业务功能介绍

   Default.aspx页面列举了宠物商店的宠物类别,例如,BIRDS、BUGS、BACKYARD等。单击宠物类别,以便查看更为详细的信息。另 外,在页面右上角包括一个文本框和一个搜索图片...
  • lowechenwen
  • lowechenwen
  • 2011年01月16日 20:00
  • 215

PetShop 4.0学习--登录以及注册功能的分析

PetShop 4.0学习--登录以及注册功能的分析   先从PetShop 4.0的登录注册开始分析.在PetShop 4.0中并没有对登录以及注册进行编码,而是使用被称作ASP.NET 成员资格的...
  • lowechenwen
  • lowechenwen
  • 2011年01月16日 20:02
  • 620

Petshop4.0学习资料集合

  • 2007年11月29日 23:09
  • 571KB
  • 下载

petshop3层架构范例,供新手学习,Model+DAL+IDAL+DALFactory+BLL

  • 2012年03月13日 09:27
  • 256KB
  • 下载

学习PetShop3.doc

  • 2008年11月08日 21:39
  • 42KB
  • 下载

SQLServerDAL.dll

  • 2013年06月09日 17:14
  • 8KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PetShop学习--SQLServerDAL
举报原因:
原因补充:

(最多只允许输入30个字)