C#+SQL 存储过程在三层架构中的使用

原创 2011年10月19日 17:24:53

从11年6月份毕业到现在(1月份我就在这家公司上班了 ),一直没时间对存储过程进行学习。

之前一直不敢使用存储过程进行SQL的操作,虽然知道存储过程有很多好处,比如查询速度快等优点。但是因为存储过程不知道在代码中如何使用,

就一直没对他进行学习。最近一段时间,因为工作不忙,就抽时间把LittleItalyVineyard的例子好好研究了一下。

通过对其中列子的学习,才知道存储过程怎样使用。

 语言描述就不说了,存储过程和三层架构(表示层、业务逻辑层、数据访问层)相信大家都了解。该例子中处理的是商品目录的实现。

下面直接从处理过程来实现他们之间的调用关系。

首先,在SQL server 2005对应的数据库(MyDataTest)-->可编程性-->存储过程,右击新建一个存储过程:

代码如下

/*---------------------------------------商品目录------------------*/
create procedure Products_Select
as
select
ProductID,
ProductName,
ProductCategoryName,
ProductImageID,
substring(Description,1,150)+'...' as Description,
Price
from Products inner join ProductCategory on ProductCategory.ProductCategoryID=Products.ProductCategoryID

 

1. 在数据访问层DataAccess建立一个ProductSelectData 类,代码如下所示

 public class ProductSelectData : DataAccessBase
 {
  public ProductSelectData()
  {
   StoredProcedureName = StoredProcedure.Name.Products_Select.ToString();
  }

  public DataSet Get()
  {
   DataSet ds;

   DataBaseHelper dbhelper = new DataBaseHelper( StoredProcedureName );
   ds = dbhelper.Run( ConnectionString );

   return ds;
  }
 }

 

其中DataAccessBase中实现的是存储过程名StoredProcedureName 和数据库连接字符串ConnectionString;代码如下:

 public class DataAccessBase
 {
  private string _storedprocedureName;
       

        /// <summary>
        /// 存储过程
        /// </summary>
  protected string StoredProcedureName
  {
   get { return _storedprocedureName; }
   set { _storedprocedureName = value; }
  }

        /// <summary>
        /// 数据库连接字符串
        /// </summary>
  protected string ConnectionString
  {
   get { return ConfigurationManager.ConnectionStrings[ "SQLCONN" ].ToString(); }
  }
 }

 

 

2. 在业务逻辑层建立一个类ProcessGetProductByID,该类实现接口IBusinessLogic。

 public class ProcessGetProductByID : IBusinessLogic
 {
  private Product _product;
  private DataSet _resultset;

  public ProcessGetProductByID()
  {

  }

  public void Invoke()
  {
   ProductSelectByIDData selectproduct = new ProductSelectByIDData();
   selectproduct.Product = Product;
   ResultSet = selectproduct.Get();

   Product.Name = ResultSet.Tables[0].Rows[0]["ProductName"].ToString();
   Product.Description = ResultSet.Tables[0].Rows[0]["Description"].ToString();
   Product.Price = Convert.ToDecimal( ResultSet.Tables[0].Rows[0]["Price"].ToString() );
   Product.ImageID = int.Parse( ResultSet.Tables[0].Rows[0]["ProductImageID"].ToString() );
   Product.ProductCategory.ProductCategoryName = ResultSet.Tables[0].Rows[0]["ProductCategoryName"].ToString();
  }

  public Product Product
  {
   get { return _product; }
   set { _product = value; }
  }

  private DataSet ResultSet
  {
   get { return _resultset; }
   set { _resultset = value; }
  }
 }

IBusinessLogic中定义了Ivoke()方法;

3. 建立页面,页面中通过Table在DataList中布局,通过 <%# Eval("ProductName") %>的形式进行数据绑定,

后台代码如下:

 private void LoadProducts()
 {
  ProcessGetProducts processproducts = new ProcessGetProducts();

  try
  {
   processproducts.Invoke();
  }
  catch
  {
   Response.Redirect( "ErrorPage.aspx" );
  }

  datalistProducts.DataSource = processproducts.ResultSet;
  datalistProducts.DataBind();
 }

 

 

本文代码参考LittleItalyVineyard。希望对存储过程的使用不熟悉的人有帮助,谢谢。

 

 

 

 

 

用asp.net开发三层架构做的BLOG

  • 2011年11月23日 00:44
  • 3.55MB
  • 下载

delphi三层结构常出现的问题和解决方案

以下问题出现原因有可能多个,暂时将我遇见的记录下来,以后有新的在陆续更新上去,有网友愿意的话也可以共同测试一下。 一,无法更新定位行。一些值可能已在最后一次读取已更改。 错误出现前提: ...
  • chinajobs
  • chinajobs
  • 2016-03-24 19:29:44
  • 579

三层架构+存储过程实现分页

首先在项目下加入BLL,DAL,DataAccess,MODEL类库 -------前台界面---------                   $(functi...
  • wangjingjing1014
  • wangjingjing1014
  • 2013-05-21 19:08:24
  • 1456

基于.NET三层架构+高级SQL开发图书借阅管理系统

本项目实战课程基于最流行的.NET三层架构+高级SQL开发完成,整个课程全程实战教学,通过项目效果展示让学员了解需求,然后分析设计,最后编码实现,手把手完成所有功能,讲解细致入微。整个课程集聚了讲师多年的实战开发经验和教学技巧,让学员学的轻松,掌握的内容广泛而深入,学完后能够轻松胜任大中型项目开发。【课程咨询】请加QQ:995551858(报名咨询+购买后资料发放)
  • 2015年12月16日 19:32

三层架构抽象工厂最简单实现

  • 2011年05月21日 11:15
  • 232KB
  • 下载

C#+Sql Server 存储过程分页代码

  • 2012年07月29日 12:09
  • 79B
  • 下载

三层架构——存储过程(在ADO.net中调用存储过程)例子

.net版机房收费系统时,希望在各方面有一些革新,用一些新东西(当然,这也是这次的要求).做学生注册时,一个学生注册后,需要更新三个表——StudentInfo表、CardInfo表、Recharge...
  • hanxuemin12345
  • hanxuemin12345
  • 2013-02-28 09:31:21
  • 4012

在三层架构的B层应用TransactionScope事务

一说到事务大家都会想到在存储过程中使用事务,这样可以保证多表操作时的数据一致性。但是三层架构中D层的方法很多都是针对单表操作的,与之对应的数据库存储过程一般也只涉及到关系密切的几个表而已。但是当我们的...
  • wwwwenhuan
  • wwwwenhuan
  • 2013-02-04 19:51:37
  • 1954

asp.net三层架构用存储过程实现gridview分页

  • 2014年04月03日 20:28
  • 97KB
  • 下载

Delphi 三层 实例(1)

http://www.25aspx.com/Knowledge/ASPdotNet/81.html 所谓三层: (1) 客户端 (2) 服务器端 (3) 数据库     在数据访问时,使得客...
  • lailai186
  • lailai186
  • 2013-04-18 10:28:19
  • 1457
收藏助手
不良信息举报
您举报文章:C#+SQL 存储过程在三层架构中的使用
举报原因:
原因补充:

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