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

下面贴上: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. 7.$a = 'abcdef'; 请取出$a的值并打印出第一个字母

    echo $a[0]; echo $a{0}; echo chr(ord($a));//先输出$a字符串里的第一个字符的ASCII值 再从指定的 ASCII 值返回字符.

  2. 十三、Java基础---------多线程总结

    多线程概述 理解多线程首先应明确线程,要了解线程就必须了解什么是进程. 1.进程 是一个正在执行的程序. 每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或者叫一个控制单元. 2.线程 就是进程 ...

  3. LINQ to SQL Count/Sum/Min/Max/Avg Join

    public class Linq { MXSICEDataContext Db = new MXSICEDataContext(); // LINQ to SQL // Count/Sum/Min/ ...

  4. 解决”不按住fun键输入的是数字,按着fun键才能输入字母”

    原来联想的“FN+NUMLK“键组合,是进行数字和字符区域的切换的. 如果当前输入的是数字,说明当前处于数字模式,按一次“FN+NUMLK“键组合即可切换到字母模式.这样就能够正常地输入字母了.

  5. Sql Server2005新特性及性能

    举几个例子来简单说明 这些例子我引用了Northwind库. 1. TOP 表达式 SQL Server 2000的TOP是个固定值,是不是觉得不爽,现在改进了. --前n名的订单declare @n ...

  6. Java 新手学习 CSS样式列表 排版 格式布局

    1,样式表分为  内联样式表   内嵌样式表  外部样式表  三种. 内联样式表是直接写在标签里面的  比如 <p style=“”></p>  <div style=& ...

  7. java正则表达式的使用

    姿势: Pattern pattern = Pattern.compile("^Java.*");Matcher matcher = pattern.matcher("J ...

  8. 使用HttpClient发送数据 到WebApi

    发送和JSON数据 /=============================webAPI接受POST的JOSN数据=============================/ POST api/& ...

  9. iframe显示错误页面

    当系统出现异常时,ifrme中显示的内容为错也页面,而不是罪顶层的框架显示错误内容,此时的解决办法是在错误页面或相关的登录页面中加入 错误页面加载的JS如下 <script type=" ...

  10. VC++6.0在Win7以上系统上Open或Add to Project files崩溃问题 解决新办法

    崩溃原因是和office高版本冲突,比如我64位win7装了64位office2013及visio就遇到了这个问题(我很纳闷,记得重装系统前装的是32位office2013及visio就未曾遇到该问题 ...