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();
//关闭连接
            }

        }



 


 

posted @ 2009-10-21 14:15  Jason.z  阅读(955)  评论(0编辑  收藏  举报