工作中,可能有时为了安全等的考虑,需要更多 的运用存储过程。有的公司甚至在登录一栏也会提出这样的要求,那么怎么用存储过程实现登录呢。好处就不用言名了,一个速度,一个就是安全系统更高。

下面贴上:1.存储过程登录代码

--实现登陆的存储过程

if exists(select * from sys.objects where name='usp_Login')

drop proc usp_Login

go

create proc usp_Login

@name varchar(10),

@pwd varchar(10),

@isLogin int output

--1 登陆成功 2用户名错误 3密码错误 4密码错误超过3次

as  declare @times int  --错误次数

--根据用户名是否存在

if exists(select * from [user] where uUserName=@name)

begin

select @times = uTimes from [user] where uUserName=@name

if(@times = 3)     --密码错误3次

set @isLogin=4

else

begin

if exists(select * from [user] where uUserName=@name and uPwd=@pwd)

begin

--用户名密码正确 登陆成功

set @isLogin=1

update [user] set uTimes=0 where uUserName=@name

end

else

begin

--密码错误

set @isLogin=3

update [user] set uTimes=uTimes + 1 where uUserName=@name

end

end

end

else

--用户名不存在

set @isLogin= 2

declare @login int

--调用登陆存储过程

exec usp_Login 'admin','123',@login output

print @login select * from [user]

2,客户端代码如下。调用存储过程

///登录事件
        private void btnLogin_Click(object sender, EventArgs e)
        {
            int n = Login1(txtName.Text, txtPwd.Text);
            //--1 登陆成功 2用户名错误 3密码错误 4密码错误超过3次
            if (n == 1)
            {
                MessageBox.Show("登陆成功");
            }
            else if(n == 2)
            {
                MessageBox.Show("用户名错误");
            }
            else if (n == 3)
            {
                MessageBox.Show("密码错误");
            }
            else if (n == 4)
            {
                MessageBox.Show("密码错误超过");
            }
            else
            {
                MessageBox.Show("未知错误");
            }
        }

///3.存储过程的调用

private  int Login1(string name, string pwd) {

string connStr = @"Data Source = .\sqlexpress;Initial Catalog = MySchool;uid=sa;pwd=sa";

using (SqlConnection conn = new SqlConnection(connStr))  {

using (SqlCommand cmd = new SqlCommand()) {

cmd.Connection = conn;

    cmd.CommandText = "usp_Login";

cmd.CommandType = CommandType.StoredProcedure;

    cmd.Parameters.AddWithValue("@name", name);

    cmd.Parameters.AddWithValue("@pwd", pwd);

//输出参数

    SqlParameter sp = cmd.Parameters.Add("@isLogin", SqlDbType.Int);

    sp.Direction = ParameterDirection.Output;

       conn.Open();

        cmd.ExecuteNonQuery();

                    //获取输出参数的值

        int result = Convert.ToInt32(sp.Value);

return result;

          }

    }

}

存储过程实现登录(.net)的更多相关文章

  1. PDF.NET框架学习篇之SQL-MAP使用存储过程

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

  2. T-Sql(七)用户权限操作(grant)

    一般数据库的权限操作我们很少用,除非一些大型的项目,需要给数据库配置不同的用户及权限,防患于未然,今天我们就来了解下t-sql中配置用户权限操作. 先看示例代码: --创建登录名 create log ...

  3. oracle日记

    win7旗舰版安装oracle11g 64位用sql plus可以登录 但用pl/sql dev报错ORA-12560 小型数据库:access.foxbase 中型数据库:mysql.sqlserv ...

  4. sql server 权限

    -----是否存在有效的登录账号:是否被禁用,sql login还有:密码是否过期,是否被锁定 select is_disabled, loginproperty(name,'Isexpired') ...

  5. SQL Server 审计操作概念

    概述 对于一般的数据库系统审计可能不太会被重视,但是对于金融系统就不一样的.金融系统对审计要求会很高,除了了记录数据库各种操作记录还可能会需要开发报表来呈现这些行为数据.使用SQL Server Au ...

  6. java编程(2)——servlet和Ajax异步请求的接口编程(有调用数据库的数据)

    第一步: 1.为项目配置 Tomcat 为 server: 2.导入 mysql的jar包 到项目目录中: 第二步:编码 1.数据库连接类ConnectMysql.java代码: package co ...

  7. 《SQL Server 2008从入门到精通》20180627

    数据库范式理论 范式理论是为了建立冗余较小结构合理的数据库所遵循的规则.关系数据库中的关系必须满足不同的范式.目前关系数据库有六种范式:第一范式(1NF).第二范式(2NF).第三范式(3NF).BC ...

  8. Oracle 笔记(五)

    1.              Oracle的自定义函数 2.              Oracle的触发器 3.              Oracle的存储过程 知识点一:自定义函数 语法:cr ...

  9. 关系型数据库MySQL(三)_触发器

    简介 用来给保证数据完整性的一种方法,经常用于加强数据的完整性: 是与表事件相关的特殊的存储过程,与存储过程的唯一区别是触发器不能执行execute语句调用,而是在用户执行SQL语句时自动触发执行 执 ...

随机推荐

  1. 分享大家一个背景为下雪的JQuery

    <html><head> <meta charset="utf-8"> <meta content="IE=edge,chrom ...

  2. Oracle常用日期函数

    常用的时间格式掩码如下:掩码元素       含义YYYY           四位数年份 (如:2005)     yearYY             二位数年份(如  05) Q         ...

  3. spring IOC 容器中 Bean 的生命周期

    IOC 容器中 Bean 的生命周期: 1.通过构造器或工厂方法创建 Bean 实例 2.为 Bean 的属性设置值和对其他 Bean 的引用 3.调用 Bean 后置处理器接口(BeanPostPr ...

  4. arraylist与linkedlist的区别与性能测试

    /** *arraylist和linkedlist的适用场合. **/ import java.util.List; import java.util.ArrayList; import java.u ...

  5. JAVA基础知识之JDBC——编程步骤及执行SQL

    JDBC编程步骤 下面以mysql数据库为例, 1.加载驱动 首先需要下载数据库的驱动jar文件,并且在eclipse包中加入到class path中去, 例如mysql的驱动文件 mysql-con ...

  6. linux 循环处理文件夹下所有文件脚本

    #!/bin/bashfunction ergodic(){ for file in ` ls $1 ` do if [ -d $1"/"$file ] then ergodic ...

  7. [问题2014A03] 解答

    [问题2014A03]  解答 注意到 \((A^*)^*\) 的第 (1,1) 元素是 \(A^*\) 的第 (1,1) 元素的代数余子式, 即为 \[\begin{vmatrix} A_{22} ...

  8. [问题2014S03] 解答

    [问题2014S03] 解答  设 \(A\) 的 \(n\) 个特征值分别为 \(\lambda_1,\lambda_2,\cdots,\lambda_n\), 由条件知它们都是不等于零的实数. 根 ...

  9. Python3基础 sort(reverse=True) 将一个列表降序排列

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  10. 1106 c程序的推导过程