存储过程实现登录(.net)
工作中,可能有时为了安全等的考虑,需要更多 的运用存储过程。有的公司甚至在登录一栏也会提出这样的要求,那么怎么用存储过程实现登录呢。好处就不用言名了,一个速度,一个就是安全系统更高。
下面贴上: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)的更多相关文章
- PDF.NET框架学习篇之SQL-MAP使用存储过程
最近一直在学习“深蓝医生”的PDF.NET框架,对Sql-Map使用存储过程有了点小小的体会.基础知识请到http://www.cnblogs.com/bluedoctor/archive/2010/ ...
- T-Sql(七)用户权限操作(grant)
一般数据库的权限操作我们很少用,除非一些大型的项目,需要给数据库配置不同的用户及权限,防患于未然,今天我们就来了解下t-sql中配置用户权限操作. 先看示例代码: --创建登录名 create log ...
- oracle日记
win7旗舰版安装oracle11g 64位用sql plus可以登录 但用pl/sql dev报错ORA-12560 小型数据库:access.foxbase 中型数据库:mysql.sqlserv ...
- sql server 权限
-----是否存在有效的登录账号:是否被禁用,sql login还有:密码是否过期,是否被锁定 select is_disabled, loginproperty(name,'Isexpired') ...
- SQL Server 审计操作概念
概述 对于一般的数据库系统审计可能不太会被重视,但是对于金融系统就不一样的.金融系统对审计要求会很高,除了了记录数据库各种操作记录还可能会需要开发报表来呈现这些行为数据.使用SQL Server Au ...
- java编程(2)——servlet和Ajax异步请求的接口编程(有调用数据库的数据)
第一步: 1.为项目配置 Tomcat 为 server: 2.导入 mysql的jar包 到项目目录中: 第二步:编码 1.数据库连接类ConnectMysql.java代码: package co ...
- 《SQL Server 2008从入门到精通》20180627
数据库范式理论 范式理论是为了建立冗余较小结构合理的数据库所遵循的规则.关系数据库中的关系必须满足不同的范式.目前关系数据库有六种范式:第一范式(1NF).第二范式(2NF).第三范式(3NF).BC ...
- Oracle 笔记(五)
1. Oracle的自定义函数 2. Oracle的触发器 3. Oracle的存储过程 知识点一:自定义函数 语法:cr ...
- 关系型数据库MySQL(三)_触发器
简介 用来给保证数据完整性的一种方法,经常用于加强数据的完整性: 是与表事件相关的特殊的存储过程,与存储过程的唯一区别是触发器不能执行execute语句调用,而是在用户执行SQL语句时自动触发执行 执 ...
随机推荐
- 看门外汉如何实现:C#操作 MongoDB基本CURD的事务控制之 第二部分
第二部分 尝试解决BulkWrite(List<WriteModel<T>>)问题 在上次发表的文章中,得到了一些很好的反馈,真切体会到写博文的好处,有高人指出两大问题,具体可 ...
- app安装位置声明
AndroidManifest.xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" ...
- MVC5 + EF6 完整入门教程三
期待已久的EF终于来了. 学完本篇文章,你将会掌握基于EF数据模型的完整开发流程. 本次将会完成EF数据模型的搭建和使用. 基于这个模型,将之前的示例添加数据库查询验证功能. 文章提纲 概述 & ...
- 如何利用.snk文件生成DLL文件中的Publickeytoken
1.在该路径下C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin查找是否有sn.exe. 没有的话,从网上下载,注意需要的版本. 2.打开c ...
- HDU 5690:2016"百度之星" - 初赛 All X
原文链接:https://www.dreamwings.cn/hdu5690/2657.html All X Time Limit: 2000/1000 MS (Java/Others) Mem ...
- Wow! Such Sequence!(线段树4893)
Wow! Such Sequence! Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- [Python]处理windows下多级目录文件,上传到Linux服务器
#-*- coding: utf-8 -*- __author__ = 'tsbc' import sys reload(sys) sys.setdefaultencoding('utf-8') im ...
- 2016年江西理工大学C语言程序设计竞赛(初级组)
问题 A: 木棒根数 解法:把所有的情况保存下来,加一下就好 #include<bits/stdc++.h> using namespace std; map<char,int> ...
- HDU1532 Drainage Ditches 网络流EK算法
Drainage Ditches Problem Description Every time it rains on Farmer John's fields, a pond forms over ...
- Masonry+拖动
最近遇到一个问题,用Masonry写的布局: 拖动其中某个view,拖动方法按传统的写成如下形式.如果view中的label更改text值,拖动之后的view就会回到最初被设定的位置. - (void ...