最近一直在学习“深蓝医生”的PDF.NET框架,对Sql-Map使用存储过程有了点小小的体会。基础知识请到http://www.cnblogs.com/bluedoctor/archive/2010/07/03/1769890.html中查看。

本文通过一个简单的例子以说明通过Sql-Map使用存储过程,并返回一个实体类。

功能实现:通过存储过程验证登录用户的合法性。

1.创建数据库表:

//系统用户维护表
CREATE TABLE T_USER
(
[USER_ID] [int] PRIMARY KEY,
[LOGIN_NAME] [nvarchar](50) NULL,
[REAL_NAME] [nvarchar](50) NULL,
[PASSWORD] [nvarchar](50) NULL,
[USER_STATE] [int] NULL,  --0:未激活  1:激活
[REMARK] [nvarchar](200) NULL
)

2.创建用户验证存储过程:

//功能:验证用户的合法性。如果验证通过则返回当前登录用户的全部信息
CREATE PROCEDURE up_user_verify
(
@login_name nvarchar(50),
@password nvarchar(50),
@error nvarchar(500) output  --如果验证未通过,输出错误提示信息。
)
AS
declare @user_id int,
@pwd nvarchar(50),
@user_state int
  --判断是否存在用户,此处对用户的登录名和登录密码进行大小写区分
select @user_id = [user_id], @pwd = [password], @user_state = [user_state]
  from t_user
  where cast([login_name] as varbinary) = cast(@login_name as varbinary)
--登录名验证
if @user_id is null
begin
set @error = '用户登录名:'+@login_name+'不存在'
return null
end
--登录密码验证
if cast(@password as varbinary) != cast(@pwd as varbinary)
begin
set @error = '登录密码不正确,请重新输入'
return null
end
--用户状态验证
if @user_state = 0
begin
set @error = '用户:' +@login_name+'未激活'
return null
end
  --通过验证,返回用户的信息
select * from t_user where [login_name] = @login_name

3.生成表T_USER对应的实体类:

  [Serializable()]
public partial class Tb_User : EntityBase
{
public Tb_User()
{
TableName = "T_USER";
EntityMap=EntityMapType.Table;
PrimaryKeys.Add("USER_ID");
}
protected override void SetFieldNames()
{
PropertyNames = new string[] { "USER_ID","LOGIN_NAME","REAL_NAME","PASSWORD","USER_STATE","REMARK" };
}
/// <summary>
/// 用户ID
/// </summary>
public System.Int32 USER_ID
{
get{return getProperty<System.Int32>("USER_ID");}
set{setProperty("USER_ID",value );}
}
/// <summary>
/// 登录名称
/// </summary>
public System.String LOGIN_NAME
{
get{return getProperty<System.String>("LOGIN_NAME");}
set{setProperty("LOGIN_NAME",value ,);}
}
/// <summary>
/// 真实姓名
/// </summary>
public System.String REAL_NAME
{
get{return getProperty<System.String>("REAL_NAME");}
set{setProperty("REAL_NAME",value ,);}
}
/// <summary>
/// 登录密码
/// </summary>
public System.String PASSWORD
{
get{return getProperty<System.String>("PASSWORD");}
set{setProperty("PASSWORD",value ,);}
}
/// <summary>
/// 用户状态
/// </summary>
public System.String USER_STATE
{
get{return getProperty<System.String>("USER_STATE");}
set{setProperty("USER_STATE",value ,);}
}
/// <summary>
/// 备注信息
/// </summary>
public System.String REMARK
{
get{return getProperty<System.String>("REMARK");}
set{setProperty("REMARK",value ,);}
}
}

4.Sql-Map配置脚本:

<CommandClass Name="UserManage" Class="UserInfoManageDAL" Description="系统用户信息维护" Interface="">
<Select CommandName="VerifyUser" CommandType="StoredProcedure" Method="" Description="验证用户的合法性"
ResultClass="EntityObject" ResultMap="DAL.Entitys.Tb_User">
<![CDATA[[up_user_verify] #login_name:String,String,50,Input# #password:String,String,50,Input# #error:String,String,500,Output#]]>
</Select>
</CommandClass>

5.SQL-MAP的DAL程序:

public partial class UserInfoManageDAL : DBMapper
{
/// <summary>
/// 默认构造函数
/// </summary>
public UserInfoManageDAL()
{
Mapper.CommandClassName = "UserManage";
Mapper.EmbedAssemblySource = "DAL,DAL.SqlMap.config";
}/// <summary>
/// 用户合法性验证
/// </summary>
/// <param name="loginName">登录名</param>
/// <param name="password">登录密码</param>
/// <param name="error">验证失败的错误信息</param>
/// <returns>验证通过,返回用户实体类实例</returns>
public Tb_User VerifyUser(string loginName, string password, ref string error)
{
CommandInfo cmdInfo = Mapper.GetCommandInfo("VerifyUser");
cmdInfo.DataParameters[].Value = loginName;
cmdInfo.DataParameters[].Value = password;
cmdInfo.DataParameters[].Value = error;
Tb_User user = EntityQuery<Tb_User>.QueryObject(CurrentDataBase.ExecuteDataReader(cmdInfo.CommandText, cmdInfo.CommandType, cmdInfo.DataParameters));        
error = user == null ? cmdInfo.DataParameters[].Value.ToString() : string.Empty;
return user;
}
/// <summary>
/// 获取全部用户信息
/// </summary>
/// <returns>用户实体列表</returns>
public List<Tb_User> GetAllUser()
{
return OQL.From<Tb_User>().Select().END.ToList<Tb_User>();
}
/// <summary>
/// 通过用户ID获取用户信息
/// </summary>
/// <param name="userId">用户ID</param>
/// <returns></returns>
public Tb_User GetUserById(int userId)
{
Tb_User user = new Tb_User();
user.USER_ID = userId;
OQL q = OQL.From(user).Select().Where(user.USER_ID).END;
return EntityQuery<Tb_User>.QueryObject(q);
}
}

6.测试程序

private void button1_Click(object sender, EventArgs e)
{
  UserInfoManageDAL dal = new UserInfoManageDAL();
  string name = "admin";
  string pwd = "abc";
  string error = string.Empty;
  Tb_User user = dal.VerifyUser(name, pwd, ref error);
  if (user == null)
    MessageBox.Show(error);
  else
    MessageBox.Show(user.USER_ID.ToString() + ":" user.LOGIN_NAME + ":" + user.REAL_NAME);
}

PDF.NET框架学习篇之SQL-MAP使用存储过程的更多相关文章

  1. Farseer.net轻量级开源框架 中级篇:SQL执行报告

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: 数据库切换 下一篇:Farseer.net轻量级开源框架 中级篇: 探究ORM(M ...

  2. 集合框架学习之Collection和Map详解

    线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些类均在java.util包中.本文试图通过简单的描述,向读者阐述各个类的作用以 ...

  3. [python 测试框架学习篇] 分享 uiautomator测试框架

    uiautomator测试框架 :https://testerhome.com/topics/4194

  4. [python测试框架学习篇] 分享一个和adb相关的测试框架

    https://testerhome.com/topics/7106   (user: zteandallwinner     password: same to qq ) 264768502 · # ...

  5. Flask框架学习篇(一)

    安装好Python,pip install flask安装好flask后,开始编写第一个flask程序 #包含动态路由的flask程序from flask import Flask app= Flas ...

  6. Farseer.net轻量级开源框架 中级篇:探究ORM(Mapping)

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: SQL执行报告 下一篇:Farseer.net轻量级开源框架 中级篇: Cooki ...

  7. Farseer.net轻量级开源框架 中级篇:数据库切换

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: 动态数据库访问 下一篇:Farseer.net轻量级开源框架 中级篇: SQL执行 ...

  8. 1.0EnterpriseFrameWork 框架学习

    1.先报其主页 :博主的框架是开源的 http://www.cnblogs.com/kakake/p/3938262.html . 2.学习的精髓是:该框架支持 ORM.SQL语句 和 存储过程 ,O ...

  9. JavaSE中Map框架学习笔记

    前言:最近几天都在生病,退烧之后身体虚弱.头疼.在床上躺了几天,什么事情都干不了.接下来这段时间,要好好加快进度才好. 前面用了三篇文章的篇幅学习了Collection框架的相关内容,而Map框架相对 ...

随机推荐

  1. Python的闭包

    Python的闭包 闭包概念都是一样的,实现机制一样,看看下面的代码是不是和javascript很像 def generate_counter(): cnt = [0] def count_one() ...

  2. input---checked小问题

    想必有很多做前端同学都遇到了这么一个问题. 那就是checkbox.那就是我们通过jquery设置选中的时候,发现checked属性已经设置上去了 但是选中的样式却没有. 我们做一个简单的测试:看下面 ...

  3. BrowserSync前端调试工具使用

    上次介绍了一款DebugGap移动端调试工具DebugGap推荐.但是这几天使用了之后感觉还是有些不足,尤其是里面的调试工具虽然和Chrome里面的调试长的很像,但是多少有些不同,使用起来还是不太方便 ...

  4. mongodb简介与增删该查

    一.简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案.MongoDB 将数据存储为一个文档,数据 ...

  5. poj 3352Road Construction(无向双连通分量的分解)

    /* 题意:给定一个连通的无向图G,至少要添加几条边,才能使其变为强连通图(指的是边强联通). 思路:利用tarjan算法找出所有的双联通分量!然后根据low[]值的不同将双联通分量 进行缩点,最后图 ...

  6. poj 2187 Beauty Contest(凸包求解多节点的之间的最大距离)

    /* poj 2187 Beauty Contest 凸包:寻找每两点之间距离的最大值 这个最大值一定是在凸包的边缘上的! 求凸包的算法: Andrew算法! */ #include<iostr ...

  7. 【原创】.NET读写Excel工具Spire.Xls使用(1)入门介绍

    在.NET平台,操作Excel文件是一个非常常用的需求,目前比较常规的方法有以下几种: 1.Office Com组件的方式:这个方式非常累人,微软的东西总是这么的复杂,使用起来可能非常不便,需要安装E ...

  8. 浅谈A/B测试里常见的辛普森悖论,企业决策者必看

    A/B测试背后有着高深的统计学知识,今天我们就来讲讲常见的辛普森悖论. 辛普森悖论 (Simpson's Paradox) 是英国统计学家 E.H.辛普森 (E.H.Simpson) 于1951年提出 ...

  9. 牛顿法与拟牛顿法学习笔记(五)L-BFGS 算法

    机器学习算法中经常碰到非线性优化问题,如 Sparse Filtering 算法,其主要工作在于求解一个非线性极小化问题.在具体实现中,大多调用的是成熟的软件包做支撑,其中最常用的一个算法是 L-BF ...

  10. 【转载】8天学通MongoDB——第三天 细说高级操作

    今天跟大家分享一下mongodb中比较好玩的知识,主要包括:聚合,游标. 一: 聚合 常见的聚合操作跟sql server一样,有:count,distinct,group,mapReduce. &l ...