WinForm:一个登陆窗体引发的问题系列(四):存储过程
实际的登陆窗体过程中,我们会遇到多用户情况,这里我们就必须用到数据库,或许我们可以直接编写代码连接数据库表进行查询判断,这样首先是可以的,但是为了编写高性能和高安全性的的登陆窗体,我们推荐使用存储过程来实现这一功能:
建立存储过程如下:(UserInfo.sql)
==================这里是数据库代码=================
use master
go
if exists(select * from sysdatabases where name='UserInfo')
drop database UserInfo
go
create database UserInfo
go
use UserInfo
go
create table userInfo(
name varchar(20),
pwd varchar(20)
)
select * from userInfo
insert into user values('admin','123')
insert into user values(Jason','321')
go
create proc ProcUser
@N varchar(20),
@P varchar(20)
as
select* from userInfo where name=@N and pwd=@P
go
执行后,就会创建一个UserInfo的数据库,这个数据库有一个userInfo的表,里面有用户名和密码,并建立了一个名为ProcUser的存储过程,里面有个@N,@P两个参数。
在程序如何调用,示例代码:
private void btnLogin_Click(object sender, EventArgs e)
{
if (this.txtName.Text == "")
{
MessageBox.Show("用户名不能为空!");
}
else
{
SqlConnection SqlCon = new SqlConnection(@"server=zhouw;database=userInfo;Trusted_Connection=SSPI");//连接数据库
SqlCon.Open();//打开连接
SqlCommand Cmd = new SqlCommand("ProcUser", SqlCon);//调用存储过程
Cmd.CommandType = CommandType.StoredProcedure;//设置解释命令为存储过程
SqlParameter p = Cmd.Parameters.Add("@N", SqlDbType.VarChar, 20);//设置存储过程需要的参数"@N"
p.Value = this.txtName.Text;//给"@N"赋值
p = Cmd.Parameters.Add("@P", SqlDbType.VarChar, 20);//设置存储过程需要的参数"@P"
p.Value = this.txtPassword.Text;//给"@P"赋值
SqlDataReader Reader = Cmd.ExecuteReader();//执行产寻
Reader.Read();
if (Reader.HasRows)//判断是否有查询到对象的数据
{
MessageBox.Show("登陆成功");
}
else
{
MessageBox.Show("用户名或密码错误");
}
SqlCon.Close();//关闭连接
}
}
作者:Jason_z(开发者的网上家园 - 博客园)
出处:http://www.cnblogs.com/Jason_z/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。