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

下面贴上: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. AJAX-----05XMLHttpRequest对象的用post方式进行ajax请求

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 将java项目转换成Web项目

    http://www.cnblogs.com/kaige123/p/5866446.html 在项目上点击右键,进入Properties配置,点击Project Facets,再点击Convert t ...

  3. C#:涉及DPI的高分辨率下的显示问题

    一.背景 在PC机上显示正常,在高分辨率下的Pad上,显示出现问题: 1.显示在屏幕最右端的窗体(控件)显示不出来: 2.截图时,被截图的界面字体文字变大,界面因此显示不全. 二.解决方法: 方法一: ...

  4. windows 8.1无人值守安装

    上个星期网上泄漏了微软最新的操作系统Windows 8.1,我便迫不及待的下载下来进行体验.发现其安装过程交互次数太多,太过漫长,遂研究了一下无人值守安装,现将成果记录如下. 一. 微软有专门的布署工 ...

  5. js-统计选项个数

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. 用jxl导出数据到excel

    需要jxl.jar 测试结果没问题,代码: package com; import java.io.File; import java.io.IOException; import java.util ...

  7. WPF里的报警闪烁效果

    <esri:MarkerSymbol x:Key="FlashMarkerSymbol" OffsetX="41" OffsetY="41&qu ...

  8. 实操canvas

    我觉得仅仅靠看书是不会学好canvas的,经过前几天对canvas画布属性的阅读和了解,然后我觉得还是要实际操作才会学的更好. <canvas width="" height ...

  9. Unity3d 脚本相互调用

    unity中三种调用其他脚本函数的方法 第一种,被调用脚本函数为static类型,调用时直接用  脚本名.函数名().很不实用…… 第二种,GameObject.Find("脚本所在物体名& ...

  10. iOS-浅谈runtime运行时机制-runtime简单使用(转)

    转自http://www.cnblogs.com/guoxiao/p/3583432.html 由于OC是运行时语言,只有在程序运行时,才会去确定对象的类型,并调用类与对象相应的方法.利用runtim ...