silver

前途迷茫。。。

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::
这两天做了不少实验,发现最难的是调用带参数的存储过程。也不能说是难,更准确的说是麻烦。 

之前写了《ADO.NET常用类的使用》,里面就有提及如何调用存储过程,这里先复习一下,

先说明一下这里用的是之前的测试数据库,存储过程是晓村写的 Ins_User

//这里就只贴存储过程说明(还是英文嘀, 我用金山词霸翻译一下)和存储过程的参数

-- =============================================
-- Author:  Zplutor
-- Description: Use to insert a new record into User.// 使用插入一个新的记录到用户
-- =============================================
ALTER PROCEDURE [dbo].[Ins_User]

 @UserID varchar(20),
 @Password varchar(20),
 @RealName nvarchar(4) = NULL,
 @QQ bigint,
 @Email varchar(50),
 @Telephone bigint,
 @ShortTele int = NULL

 



//连接字符串
string strCon =
"Data Source=20090503-2108;Initial Catalog=DOF_Work_Site_Test_DataBase;
Integrated Security=True";

SqlConnection con = new SqlConnection(strCon);
SqlCommand com = new SqlCommand("Ins_User", con);

//指明类型是存储过程,如果不指明,则默认是CommandType.Text (SQL查询语句)
com.CommandType = CommandType.StoredProcedure;


接下就麻烦了,要为SqlCommand对象设置参数,要用到SqlParameter类,有7个构造函数,看了头就发麻。
 
先不管,直接看个简单易懂的构造函数就行:
 
SqlParameter sp = new SqlParameter("@UserID", SqlDbType.NVarChar, 20);// 参数名称、参数的类型、参数的大小

sp.Value = UserID;//赋值

这样只是完成了SqlCommand的声明初始化,接下来还要设置成SqlCommand的参数:

com.Parameters.Add(sp);

如果是多个参数只要重新初始化 SqlParameter sp 对象就行了,切忌不要再声明,不然就浪费内存了。

实际上SqlParameter类有多个构造函数,你可以根据自己的需要设置。


为SqlCommand对象设置参数也有多种方法,SqlCommand类有个Parameters属性(注意单词是复数形式),
 
用来获取SqlParameterCollection的,而SqlParameterCollection是用来存放SqlParameter对象里面的参数,
我们可以直接写代码为SqlCommand对象设置好参数:


com.Parameters.Add("@Password", SqlDbType.NVarChar, 20);
com.Parameters["@Password"].Value = pwd;


以上两种方法都是等价的,看个人习惯吧,我更偏向于第一种,更加简明易懂。





调用存储过程的麻烦还没完,如果调用了一个允许参数为空的存储过程,那就用到方法重载(终于发现重载的实际好处了)。
 
重载方法,代码量很大,比如上面那个存储过程,有七个参数,允许两个为空,那就要写4倍代码量。

当然如果表现层,业务逻辑层处理得好的话,也可以不用重载。
 
不过 “三层架构”里面说过:
三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL),区分层次的目的即为了“高内聚,低耦合”的思想。
 
DAL 不能过分依赖BLL,否则需求改变需要重构时,惨的还是DAL。所以还是乖乖写代码吧,别奢望师兄放你一马。
 
 

 

posted on 2009-07-26 02:04  silverVan  阅读(760)  评论(0)    收藏  举报