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

下面贴上: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. Python 迭代器&生成器

    1.内置参数     Built-in Functions     abs() dict() help() min() setattr() all() dir() hex() next() slice ...

  2. asp检测数字类型函数

    '**************************************************'函数ID:0014[检测ID是否为数字类型]'函数名:JCID'作 用:检测ID是否为数字类型' ...

  3. Ruby(rails)win环境下安装

    1.RubyInstaller 在RubyInstaller官网下载window版本安装,地址:http://rubyinstaller.org/downloads/  执行安装程序,勾选Add Ru ...

  4. s3c2440 移值u-boot-2016.03 第2篇 支持Nand flash启动

    1, 要求:在4K 的代码以内,完成 NOR NAND 类型判断,初始化 NAND 复制自身到 SDRAM ,重定向. 2, 在 /arch/arm/cpu/arm920t/ 文件夹里 添加一个 in ...

  5. Linux内核内存管理子系统分析【转】

    本文转载自:http://blog.csdn.net/coding__madman/article/details/51298718 版权声明:本文为博主原创文章,未经博主允许不得转载. 还是那张熟悉 ...

  6. python入门练习题2

    1,制作表格 循环提示用户输入:用户名,密码,邮箱(要求用户输入的长度超过20个字符,如果超过则只有前20个字符有效) 如果用户输入q或Q就退出程序,将用户输入的内容以表格形式显示 user_inpu ...

  7. jQuery Validate input是动态变化的

    表单验证 $("#dataList").append("<div id='data"+dataNum+"' style='padding-top ...

  8. KTV项目总结

    KTV项目总结 大约一个星期前吧,老湿说我们要开始做KTV项目了,说是KTV项目是贯穿整个学的内容的,会所的,要我们认真去对待,一开始,第一天搭前台界面,总是有不会的,要去问问,这个要用什么控件啊,用 ...

  9. Eclipse默认标签TODO,XXX,FIXME和自定义标签[转]

    http://www.blogjava.net/Guides/archive/2011/11/14/363686.html   Eclipse中的一些特殊的注释技术包括:    1.    // TO ...

  10. LuaStudio 9.27 去10分钟退出暗桩板

    http://bbs.pediy.com/showthread.php?p=1428203#post1428203