您的位置:首页 > 数据库

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

2011-10-19 17:24 435 查看
从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。希望对存储过程的使用不熟悉的人有帮助,谢谢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐